资源简介
从飞思卡尔官方例程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
相关资源
- RC6遥控解码程序
- labview信道编码解码重复码 卷积码 线
- 基于FPGA的HDB3编解码系统
- TMS320F2812扩展正交解码脉冲接口的设计
-
VC 中使用ba
se64编解码图片 - protel99se原创电路图PCB图 PCM语音编解码
- imx6处理器EIM访问fpga
- DTMF编码发音、捕获解码的DEMO
- TCP接收264码流,使用ffmpeg解码
- PCM编解码实验
- 正交解码电路和捕获单元在转角和转
- 无线遥控解码编码程序315MHzPT2240PT22
- 基于vhdl的pcm编解码
- 字母赫夫曼编码01序列解码
- STM32 tim3的输入捕获功能解码 电视红外
- 2/3FEC编码和解码程序
- 基于IRM3638的红外摇控解码应用
- ts解码
- Huffman编码、解码器的Verilog实现
- G.729AG729A编解码库va_g729a
- CAD vlx fas解码程序 fas61.rar
- LDPC奇偶校验码的编解码
- CSF解码器暴风影音.7z
- 基于FPGA的BISS-C协议编码器接口技术研
- AMR格式解码
- JSVM解码器阅读笔记
- 基于FPGA的红外编码解码器设计报告
- stm8s解码pt2262
- RS编解码源码,亲测可用
- imx6q直接从USB OTG运行uboot方法
评论
共有 条评论