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

DM8127 H264编码数据异常

您好!

 我在是用DM8127,采集bayer图像,然后1080P H264编码的时候出现数据异常。

encLink_h264.c的((IVIDENC2_Handle)handle)->fxns->process()后,H编码的数据前4个字节不是0x00,0x00,0x00,0x01.

如果我修改采集的分辨率,小于1920,那么就会出现这个问题。但是设置为1920就没有问题。

请问这个是什么情况产生的?

Chris Meng:

你好,

请问你是否有保证capturewidht是16的倍数?也就是采集buffer的宽度是16的倍数,数据可以在buffer的左侧?

ruqun xu:

回复 Chris Meng:

我的采集宽度是1600。出问题的那几帧数据的地址,都是在申请的地址的前面。

ruqun xu:

回复 ruqun xu:

       我在linux 里面通过 IpcBitsInLink_getFullVideoBitStreamBufs(gVencModuleContext.ipcBitsInHLOSId,&fullBitsBufList),

来获取编码后的数据。如果获得的(fullBitsBufList.bufs[i]->addr+ fullBitsBufList.bufs[i]->startOffset)的地址范围是a~b.

我发现出问题的那几帧都是紧靠着a地址的。

        我已经在处理(fullBitsBufList.bufs[i]->addr+ fullBitsBufList.bufs[i]->startOffset)之前加上了Cache_inv()。

Chris Meng:

回复 ruqun xu:

你好,

那我还是觉得被篡改的可能性比较大。有很多客户都使用1600×1200的分辨率来编码的。

ruqun xu:

回复 Chris Meng:

有这个可能。但是编码后的数据直接就通过ipcbitsout,ipcbitin,给到linux了。中间没有插入任何环节的。

而且出问题的永远都是开头的几个地址。很像是cache刷新的问题。

但是我已经加上了cache刷新也不管用。

Chris Meng:

回复 ruqun xu:

你好,

先在M3上打印看看,是否在M3上的时候就不对了?

ruqun xu:

回复 Chris Meng:

对的。我在h264编码后打印就不对。

在encLink_h264.c的Enclink_h264EncodeFrameBatch()的((IVIDENC2_Handle)handle)->fxns->process()后,打印allocatedRingBufferAddr的内容。

发现数据就不对。

ruqun xu:

回复 ruqun xu:

找到问题了。

是M3默认会在h264编码数据的地址空间之前申请一段空间用作boxcar的数据采集。

ISS的文档显示boxcar的采集的数据大小是根据图像的分辨率而变化的。

但是默认的boxcar的申请的buffer大小会不够。

所以就导致写boxcar的地址会越界到h264的数据空间去。

ruqun xu:

回复 ruqun xu:

找到问题了。

是M3默认会在h264编码数据的地址空间之前申请一段空间用作boxcar的数据采集。

ISS的文档显示boxcar的采集的数据大小是根据图像的分辨率而变化的。

但是默认的boxcar的申请的buffer大小会不够。

所以就导致写boxcar的地址会越界到h264的数据空间去。

Chris Meng:

回复 ruqun xu:

Ruqun,

非常感谢你的分享!

赞(0)
未经允许不得转载:TI中文支持网 » DM8127 H264编码数据异常
分享到: 更多 (0)