主题 : 【这次是解码】tiny210在Linux下的MFC库移植及硬解码测试源码 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 87533
精华: 1
发帖: 41
金钱: 255 两
威望: 51 点
贡献值: 1 点
综合积分: 102 分
注册时间: 2013-02-19
最后登录: 2017-09-13
楼主  发表于: 2013-04-21 21:54

 【这次是解码】tiny210在Linux下的MFC库移植及硬解码测试源码

管理提醒: 本帖被 xoom 执行加亮操作(2013-04-22)
上次搞定了编码 http://www.aiothome.net/read.php?tid-28647-fpage-2.html
周末无事,又研究了一下解码,看似不难,但为了一个tiled nv12的问题浪费了大量光阴。
注意几点
1)还是和编码一样superboot,必不可少,u-boot不行
2)调用SsbSipMfcDecInit()之前一定要先调用SsbSipMfcDecGetInBuf()然后填入header(SPS/PPS/SEI)信息。
3)SsbSipMfcDecGetOutBuf()返回的status只有是MFC_GETOUTBUF_DISPLAY_DECODING或者MFC_GETOUTBUF_DISPLAY_ONLY时YVirAddr和CVirAddr才有效,如果返回MFC_GETOUTBUF_DECODING_ONLY则需要再次调用SsbSipMfcDecExe()和SsbSipMfcDecGetOutBuf()
4)YVirAddr和CVirAddr指向的数据是tiled nv12的格式(64x32 tiled),需要转化成现行格式才能正常现实。这个mfc api已经提供了csc_tiled_to_linear(),头文件color_space_convertor.h
5)测试程序有几个问题:不支持multi-slice的帧;最后buffer里的几帧偷懒没有处理直接丢掉了;如果第一个header后的数据帧不是IDR的话,会出warning,直到第一个IDR帧为止,之前的non-IDR帧可能译码不正确或者丢帧。
测试代码和mfc api包附上供参考。
觉得有用的tx请回个帖留个浮云。我很讨厌强制回复才能下载,没意思。
Makefile就不写了,简单的就 arm-none-linux-gnueabi-gcc testMfcDec.c color_space_convertor.c SsbSipMfcDecAPI.c -o testMfcDec
[ 此帖被kylezhou在2013-04-21 22:01重新编辑 ]
附件: s5pv210_mfc_dec_test.tgz (20 K) 下载次数:623
级别: 新手上路
UID: 95636
精华: 0
发帖: 22
金钱: 115 两
威望: 23 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2013-08-19
最后登录: 2013-09-17
1楼  发表于: 2013-08-30 10:35
请问,各位大侠,我怎么做测试,arm-none-linux-gnueabi-gcc testMfcDec.c color_space_convertor.c SsbSipMfcDecAPI.c -o testMfcDec 以后直接在命令行运行testMfcDec就可以了吗,应该还有其他的东西,没什么思路啊请教各位大侠
级别: 新手上路
UID: 95636
精华: 0
发帖: 22
金钱: 115 两
威望: 23 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2013-08-19
最后登录: 2013-09-17
2楼  发表于: 2013-08-30 13:45
我在文件夹下面放了一个test.264,然后运行程序发现生成了输出文件,test-mfc-dec.nv12,但是这样能表示什么,有没有高手回答一下我的问题
我执行了以后出现了以下的现象

[root@FriendlyARM /udisk]# ./testMfcDec
Input file: test.264. Output file: test-mfc-dec.nv12.
Header: cstart=0, cend=22, length=34
SsbSipMfcDecOpen succeeded.
SsbSipMfcDecGetInBuf succeeded.
SsbSipMfcDecInit succeeded.
[ 7076.313342] mfc_wait_for_done: Decode Error Returned Disp Error Status(0), Dec Error Status(171)
[ 7076.313423] mfc_decode_one_frame: MFCINST_WARN_DEC_EXE.........(interrupt_flag: 32), (WARN Code: 171)
[ 7076.313792] mfc_wait_for_done: Decode Error Returned Disp Error Status(0), Dec Error Status(171)
[ 7076.317780] mfc_decode_one_frame: MFCINST_WARN_DEC_EXE.........(interrupt_flag: 32), (WARN Code: 171)
[ 7076.327291] mfc_wait_for_done: Decode Error Returned Disp Error Status(0), Dec Error Status(171)
[ 7076.335739] mfc_decode_one_frame: MFCINST_WARN_DEC_EXE.........(interrupt_flag: 32), (WARN Code: 171)
[ 7076.345219] mfc_wait_for_done: Decode Error Returned Disp Error Status(0), Dec Error Status(171)
[ 7076.353675] mfc_decode_one_frame: MFCINST_WARN_DEC_EXE.........(interrupt_flag: 32), (WARN Code: 171)
[ 7076.363136] mfc_wait_for_done: Decode Error Returned Disp Error Status(0), Dec Error Status(171)
[ 7076.371612] mfc_decode_one_frame: MFCINST_WARN_DEC_EXE.........(interrupt_flag: 32), (WARN Code: 171)
[ 7076.381244] mfc_wait_for_done: Decode Error Returned Disp Error Status(0), Dec Error Status(171)
[ 7076.389551] mfc_decode_one_frame: MFCINST_WARN_DEC_EXE.........(interrupt_flag: 32), (WARN Code: 171)
[ 7076.399052] mfc_wait_for_done: Decode Error Returned Disp Error Status(0), Dec Error Status(171)
[ 7076.407489] mfc_decode_one_frame: MFCINST_WARN_DEC_EXE.........(interrupt_flag: 32), (WARN Code: 171)
[ 7076.416973] mfc_wait_for_done: Decode Error Returned Disp Error Status(0), Dec Error Status(171)
[ 7076.425427] mfc_decode_one_frame: MFCINST_WARN_DEC_EXE.........(interrupt_flag: 32), (WARN Code: 171)
[ 7076.434920] mfc_wait_for_done: Decode Error Returned Disp Error Status(0), Dec Error Status(171)
[ 7076.443365] mfc_decode_one_frame: MFCINST_WARN_DEC_EXE.........(interrupt_flag: 32), (WARN Code: 171)

我该怎么样去验证和测试