资源简介
从飞思卡尔官方例程mxc_vpu_test中,艰难的分离出来的vpu解码部分C代码,已封装为类,关键处都有注释。使用简单,参考我的博客。

代码片段和文件信息
#include “vpudecode.h“
VpuDecode::VpuDecode()
{
dec = NULL;
stream_buf = NULL;
stream_size = 0;
dec_buf = NULL;
dec_size = 0;
}
VpuDecode::~VpuDecode()
{
}
int VpuDecode::poll(void)
{
DecHandle handle = dec->Handle;
RetCode ret;
int loop_id;
int is_waited_int = 0;
memset(&par.decparam0sizeof(DecParam));
par.decparam.dispReorderBuf = 0;
par.decparam.skipframeMode = 0; //跳帧模式关
par.decparam.skipframeNum = 0;
par.decparam.iframeSearchEnable = 0; //I帧搜索关闭
ret = vpu_DecStartOneframe(handle &par.decparam); //解码一帧
if (ret == RETCODE_JPEG_EOS) //最后一帧
{
printf(“ JPEG bitstream is end\n“);
return -1;
}
else if (ret == RETCODE_JPEG_BIT_EMPTY) //图片位空
{
printf(“ RETCODE_JPEG_BIT_EMPTY\n“);
return -1;
}
if (ret != RETCODE_SUCCESS)
{
printf(“DecStartOneframe failed ret=%d\n“ ret);
return -1;
}
is_waited_int = 0;
loop_id = 0;
while (vpu_IsBusy()) //等待解码完成
{
if (loop_id == 50)
{
vpu_SWReset(handle 0);
return -1;
}
if (vpu_WaitForInt(100) == 0)
is_waited_int = 1;
loop_id ++;
}
if (!is_waited_int)
vpu_WaitForInt(100);
ret = vpu_DecGetOutputInfo(handle &par.outinfo); //读取解码信息
// usleep(0); //让出线程时间片
if (ret != RETCODE_SUCCESS) {
printf(“vpu_DecGetOutputInfo failed Err code is %d\n“
“\tframe_id = %d\n“ ret (int)par.frame_id);
return -1;
}
if (par.outinfo.decodingSuccess == 0)
{
printf(“Incomplete finish of decoding process.\n“
“\tframe_id = %d\n“ (int)par.frame_id);
return -1;
}
if (par.outinfo.decodingSuccess & 0x10)
{
printf(“vpu needs more bitstream in rollback mode\n“
“\tframe_id = %d\n“ (int)par.frame_id);
return 0;
}
if (par.outinfo.notSufficientPsBuffer) {
printf(“PS Buffer overflow\n“);
return -1;
}
if (par.outinfo.notSufficientSliceBuffer) {
printf(“Slice Buffer overflow\n“);
return -1;
}
if(par.outinfo.indexframeDecoded >= 0)
{
//是解码图片时出现的许多错误宏块大概101帧出现一次,原因未知
if (par.outinfo.numOfErrMBs) {
par.totalNumofErrMbs += par.outinfo.numOfErrMBs;
printf(“Num of Error Mbs : %d in frame : %d \n“
par.outinfo.numOfErrMBs par.frame_id);
}
par.frame_id++; //帧计数
dec_width = par.outinfo.decPicWidth;
dec_height = par.outinfo.decPicHeight;
isIDR = par.outinfo.idrFlg;
int index = par.outinfo.indexframeDecoded;
dec_buf = (u8 *)(dec->pfbpool[index]->addrY +
dec->pfbpool[index]->desc.virt_uaddr -
dec->pfbpool[index]->desc.p
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 19532 2020-10-25 17:50 vpudecode.cpp
文件 4697 2020-10-25 17:49 vpudecode.h
----------- --------- ---------- ----- ----
24229 2
相关资源
-
imx6qSBP的jli
nk初始化脚本 - uboot到linux logo显示不间断 补丁
- IMX385驱动代码.zip
- sony_imx385.zip
- 2017款解码软件v1.0.0.6
- 一种红外遥控编解码仿真
- 曼彻斯特编解码_同步QuartusII工程
- L-Z编码L-Z解码
- QT,JPEG解码源代码(已完成)
- vc URL编解码类
- imx6q ch452驱动矩阵键盘扫描
- VS1053B编解码器的VDR分布式声音采集卡
- ETC中FM0解码器的设计
- H.264视频编码基本知识
- x264源码及其配置文件,用于配置树莓
- FFMEPG实现h264解码
- 解码hevc解析h265流
- 电信物联网NB-lot上传编解码插件检测
- 一种基于DAB接收机的MP3播放器设计方
- 易语言URL解码算法源码
- 易语言图像编码、解码器源码易语言
- 易语言迅雷URL编解码源码
- 易语言url编解码汇编源码
- 易语言URL网址编解码源码
- 易语言URL编解码源码
- 黑群晖DS918+_6.2.3系统开启核显硬解码
- vs2010 ffmpeg实时解码h264码流
- Qt基于FFmpeg播放本地 H.264H264文件
- 从ffmpeg中抽取的h264解码器,可用于
- X264实时编码,FFmpeg实时解码
评论
共有 条评论