TI中文支持网
TI专业的中文技术问题搜集分享网站

关于在rdk3.5版本下jpeg图片问题

论坛里各位朋友好!

    我使用rdk3.5平台, 编码出的jpeg图片发现偶尔会出现损坏的情形,具体见附件图片,还出现过编码后的jpeg图片无图片头(FF D8)从而打不开,想肯定哪位大侠帮我解答下出现这些异常的jpeg图片一般是什么原因造成的呢? (除了待编码的YUV数据存在问题外).先谢谢了!

Chris Meng:

Zhang Jensen,

第一张图像想是YUV数据没有写全,看看ISS的优先级是否配置为最大。

jpeg图片无图片头,会否是数据被篡改?例如配置的jpeg输出buffer太小了,数据写到了后面?

jensen zhang:

回复 Chris Meng:

非常感谢Chris Meng的回复.我刚才检查了下iss的优先级设置为3,是最高优先级了. 输出jpeg的buffer配置为  jpeg_width * jpeg_height + jpeg_width * jpeg_height * 24/256,即按照rdk中的配置设置的.我把jpeg的quality降低一些,貌似效果会好些,昨天测试了一个晚上,出现打不开的jpeg几率有千分之3, 出现半截的几率也大致差不多.总还是无法杜绝…还有别的原因吗? 或者我的配置有问题吗?

jensen zhang:

回复 jensen zhang:

下面是我用到的encode link的参数,请帮我看看是否有没有问题的? 先谢谢了

    EncLink_CreateParams encPrm;    EncLink_ChCreateParams * pLinkChPrm;    EncLink_ChDynamicParams * pLinkChDynPrm;    UInt32 idx;    MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm);    for (idx = 0; idx < VENC_PRIMARY_CHANNELS; ++idx)    {        pLinkChPrm = &encPrm.chCreateParams[idx];        pLinkChDynPrm = &pLinkChPrm->defaultDynamicParams;        pLinkChPrm->format = (idx == 0 ? IVIDEO_MJPEG : IVIDEO_H264HP);         pLinkChPrm->profile = 100;            pLinkChPrm->dataLayout = IVIDEO_PROGRESSIVE;                    pLinkChPrm->fieldMergeEncodeEnable = FALSE;                    pLinkChPrm->enableAnalyticinfo = (idx == 0 ? 1 : 0);        pLinkChPrm->maxBitRate =   -1;        pLinkChPrm->encodingPreset = 3;         pLinkChPrm->rateControlPreset = IVIDEO_USER_DEFINED; //pChPrm->rcType;                    pLinkChPrm->enableHighSpeed = FALSE;                    pLinkChPrm->enableWaterMarking = 0;        pLinkChPrm->StreamPreset = 0;        pLinkChDynPrm->intraFrameInterval = 30;        pLinkChDynPrm->targetBitRate = 800 * 1000 * 1000;        pLinkChDynPrm->interFrameInterval = 1;    //         pLinkChDynPrm->mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;         pLinkChDynPrm->inputFrameRate = 30;        pLinkChDynPrm->rcAlg = 0;        pLinkChDynPrm->qpMin = 1;        pLinkChDynPrm->qpMax = 51;        pLinkChDynPrm->qpInit = -1;        pLinkChDynPrm->vbrDuration = 8;        pLinkChDynPrm->vbrSensitivity = 0;        encPrm.numBufPerCh[idx] = 4;         gVencModuleContext.encFormat[idx] = pLinkChPrm->format;    }    encPrm.chCreateParams[0].defaultDynamicParams.inputFrameRate = 30;    encPrm.chCreateParams[1].defaultDynamicParams.inputFrameRate = 30;      encPrm.vsEnable = FALSE;

Chris Meng:

回复 jensen zhang:

jensen zhang

非常感谢Chris Meng的回复.我刚才检查了下iss的优先级设置为3,是最高优先级了. 输出jpeg的buffer配置为  jpeg_width * jpeg_height + jpeg_width * jpeg_height * 24/256,即按照rdk中的配置设置的.我把jpeg的quality降低一些,貌似效果会好些,昨天测试了一个晚上,出现打不开的jpeg几率有千分之3, 出现半截的几率也大致差不多.总还是无法杜绝…还有别的原因吗? 或者我的配置有问题吗?

jensen zhang:

回复 Chris Meng:

再次感谢Chris Meng的解答.

1. 出现半幅图像

你能否尝试降低系统的DDR负荷,看是否这样的图片就没有了?

这个我去尝试下哈.

2. 打不开图片

你能否打印每张JPEG编码后输出的大小,看看是否有超过你设定的buffer大小的情况?

这个貌似不会,我看了那些打不开的jpeg图片(看图片实际内容实际是缺少了FF D8,FF C0等jpeg格式中要求的段)最终大小都没超过申请的输出buffer,

比如有一张无法打开的jpeg图片大小为400k左右,而我申请的输出buffer大小为4096*3168+4096*3168*24/256=13M左右,应该是绝不可能超出这个大小的

具体是在encLink_common.c的Utils_ringBuffer_init(&ringBuffer[i], 13M); 不知道我的理解是否正确?

Chris Meng:

回复 jensen zhang:

jensen zhang

2. 打不开图片

你能否打印每张JPEG编码后输出的大小,看看是否有超过你设定的buffer大小的情况?

这个貌似不会,我看了那些打不开的jpeg图片(看图片实际内容实际是缺少了FF D8,FF C0等jpeg格式中要求的段)最终大小都没超过申请的输出buffer,

比如有一张无法打开的jpeg图片大小为400k左右,而我申请的输出buffer大小为4096*3168+4096*3168*24/256=13M左右,应该是绝不可能超出这个大小的

具体是在encLink_common.c的Utils_ringBuffer_init(&ringBuffer[i], 13M); 不知道我的理解是否正确?

打印出图片缺少头的buffer的首地址,在程序的map文件里面看看,这个buffer前面的空间是谁在使用。很有可能是这个buffer前面的空间使用者越界使用了。

jensen zhang:

回复 Chris Meng:

再次感谢Chris Meng的指导…我的内存配置(config.bld)如下

….

var LINUX_SIZE                 = 166*MB;var CMEM_SIZE                  = 135*MBvar SR1_SIZE                   = 76*MB;var VIDEO_M3_CODE_SIZE         = 3*MB;

1.我查看了使用CMem的代码,是没有可能超出范围的.

2.我检查了下出错的jpeg图片,发现打不开的输出内存都是从0x92D91000开始的(即从301M+580K,大致是SR1空间起始地址偏移580K,前面的580K我看了是在cameraLink中Utils_memAlloc_cached()使用了),但不是所有输出缓冲地址为0x92D91000的jpeg图片都是有问题的(大部分都是正常的).

咳,还得请Chris Meng指导下..不胜感激中…

赞(0)
未经允许不得转载:TI中文支持网 » 关于在rdk3.5版本下jpeg图片问题
分享到: 更多 (0)