我现在遇到一个问题希望,能得到大家的帮助,关于在C6678上单核跑H264编码的问题:
我直接使用TI网上提供的codec例子:C66x_h264hpvenc_01_00_01_04_ELF;
我想在做这样一个项目,在一个核上跑C66x_h264hpvdec_01_01_01_04_ELF,一个核上跑C66x_h264hpvenc_01_00_01_04_ELF,我想问一下,这个编码例子是否可以直接用在非EVM板卡上。
目前我已经将解码例子C66x_h264hpvdec_01_01_01_04_ELF在TMS320C6678 EVM 版 单核上跑起来了,但是编码在TMS320C6678 EVM 版 存在问题。编码情况如下:
1 我直接在单核core0上运行,可以正常编码。
或者以0核为主核,1到7核为次核,多核编一路码流,也能正常编码。
2 现在是我想在除了0核以外的其他核上,单独将 C66x_h264hpvdec_01_01_01_04_ELF跑起来,做了如下修改:
a) 例如,在core1上单独跑起来,在文件encoder.cfg和h264hpvenc.cfg中
ncores = 1
CoreTeamMap = 1;
SharedRegion.setEntryMeta(0, { base: Program.global.shmSL2Base, len: Program.global.shmSL2Size, ownerProcId: 0, isValid: true, cacheEnable: true, cacheLineSize: 64, name: "ipc_internal_shared_mem", });
to
SharedRegion.setEntryMeta(0, { base: Program.global.shmSL2Base, len: Program.global.shmSL2Size, ownerProcId: 1, isValid: true, cacheEnable: true, cacheLineSize: 64, name: "ipc_internal_shared_mem", });
经过上述修改后,运行起来后,发现如下问题:
1)函数H264HPVENC_encodeFrame() 返回0,loutArgs->bytesgenerated= 0,我查看输出buffer的内容,通过eseye码流分析工具,发现当前编码输出的码流输出了正确的sps,pps帧头,slice头,从第一个宏块开始的码流数据就全是0了,(参数配置文件中generateHeader = 0)。
2)在单核core1上运行的错误log如下:
[C66xx_1]
---------------------------------------------------------
Test Case Number : 1
---------------------------------------------------------
Config File : ..\..\..\Test\TestVecs\Config\encoder.cfg
Input YUV : ..\..\..\Test\TestVecs\Input\airshow_p352x288.yuv
Output Stream : ..\..\..\Test\TestVecs\Output\airshow_p352x288.264
ShmemTab initialized on Core 1
Algorithm Instance Creation for the Module DEV.H264HP.E.C6678.01.00.01.04 Done...
Started Reading Frame : 0.......
Frame_Cycles : 0.102369
#0 : IVIDEO_IDR_FRAME : Bits : 0
Started Reading Frame : 1.......
Frame_Cycles : 0.119687
#1 : IVIDEO_P_FRAME : Bits : 0
Started Reading Frame : 2.......
Frame_Cycles : 0.118790
#2 : IVIDEO_P_FRAME : Bits : 0
Started Reading Frame : 3.......
Frame_Cycles : 0.118818
#3 : IVIDEO_P_FRAME : Bits : 0
3)我想问的问题:
我目前做的项目是在C6678上:core0跑sysbois,core1跑一路解码,core2跑一路编码,将core1解出的YUV成新的码流;
同样,core3跑一路解码,core4跑一路编码,将core3解出的YUV编成新的码流;
core5跑一路解码,core6跑一路编码,将core5解出的YUV编成新的码流;
1)我能不能直接使用TI提供的codecs示例编解码程序C66x_h264hpvenc_01_00_01_04_ELF、C66x_h264hpvdec_01_01_01_04_ELF,直接在非EVM板卡(研华8901板卡)上跑起来,如果能,需要做哪些工作;
2)如果能用,我上面的修改是否正确,上面修改后编码出现的问题,请问怎么解决;
3)在例子程序中,在非0核上,每个核上跑一路编码或解码,需要每个核上 的编码或解码程序里都有一个sysbios库支持,他们同时运行的时候,8个核之间sysbios有什么影响么,能这样用么。