您的位置:首页 > 其它

mcsdk_video下 h.264 视频编码 demo(sv04)编译实验

2016-08-14 21:14 211 查看
由于项目需要,想要将视频编码程序烧写到rom中,为此需要修改源程序将视频编码参数提前写入,不再通过串口访问PC上的参数文件。

在C:\ti\mcsdk_video_2_2_0_46\examples\transcode 下有个demo,这个demo可以进行视频编解码,但是由于“年久失修”,有很多问题,最后也没有调通,具体问题可以参考:https://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/t/521705

于是准备修改上一篇博文介绍的demo,不过要首先能成功 rebuild 它,参考资料:http://processors.wiki.ti.com/index.php/MCSDK_VIDEO_2.x_Getting_Started_TFTP_Demo_Guide

第一步:安装
Active Perl 到默认位置 C:\Perl 、安装
MinGW ,并保证已安装的相应组件的版本号是符合此项目需求的,太新太旧都不行。

第二步:在C:\ti\mcsdk_video_2_2_0_46\dsp\mkrel 下打开命令行界面,输入 setupenvMsys.bat bypass ,等待环境配置成功后输入 make sv04 ,即可开始编译项目。



编译成功后会在C:\ti\mcsdk_video_2_2_0_46\dsp\mkrel\sv04下生成 sv04.out 文件。

编译测试成功后,开始修改源文件,将参数写入代码中,需要修改的源文件如下:

1、C:\ti\mcsdk_video_2_2_0_46\dsp\siu\vct 下 siuVctParse.h 文件,添加如下代码



2、C:\ti\mcsdk_video_2_2_0_46\dsp\siu\vct 下 siuVctParse.c 文件,在文件最后添加如下函数

/************************bbs***************/
siuVctParams_t *bbs1(const char *fileName){
//	strncpy ((char *) siuVctParseMap[25].Place, "320", SIU_VCT_PARAM_TYPE_INT_DEC);

// 	tlong tlongContent;
// 	sscanf ("320", "%d", &tlongContent);
// 	* (tlong *) (siuVctParseMap[25].Place) = tlongContent;

strncpy ((char *) siuVctParseMap[0].Place, "192.168.1.101", SIUVCT_PARSE_ADDRESS_SIZE);
strncpy ((char *) siuVctParseMap[1].Place, "F8-BC-12-A0-D3-18", SIUVCT_PARSE_ADDRESS_SIZE);
strncpy ((char *) siuVctParseMap[2].Place, "192.168.1.100", SIUVCT_PARSE_ADDRESS_SIZE);
strncpy ((char *) siuVctParseMap[3].Place, "08-24-BA-75-5E-9E", SIUVCT_PARSE_ADDRESS_SIZE);

strncpy ((char *) siuVctParseMap[4].Place, "H264HPENC", SIUVCT_PARSE_ADDRESS_SIZE);
* (tlong *) (siuVctParseMap[9].Place)=1;//核心数
siuVctParams.coreTeamMapping[0] = 0;//0核
siuVctParams.coreTeamMapping[1] = -1;//表示结束

* (tlong *) (siuVctParseMap[25].Place)=320;
* (tlong *) (siuVctParseMap[26].Place)=3;
* (tlong *) (siuVctParseMap[27].Place)=5;
* (tlong *) (siuVctParseMap[28].Place)=1088;
* (tlong *) (siuVctParseMap[29].Place)=1920;
* (tlong *) (siuVctParseMap[30].Place)=1;
* (tlong *) (siuVctParseMap[31].Place)=3;
* (tlong *) (siuVctParseMap[32].Place)=12000000;
* (tlong *) (siuVctParseMap[33].Place)=0;
* (tlong *) (siuVctParseMap[34].Place)=1;
* (tlong *) (siuVctParseMap[35].Place)=0;
* (tlong *) (siuVctParseMap[36].Place)=1;
* (tlong *) (siuVctParseMap[37].Place)=100;
* (tlong *) (siuVctParseMap[38].Place)=40;
* (tlong *) (siuVctParseMap[39].Place)=3;
* (tlong *) (siuVctParseMap[40].Place)=3;
* (tlong *) (siuVctParseMap[41].Place)=0;
* (tlong *) (siuVctParseMap[42].Place)=0;
* (tlong *) (siuVctParseMap[43].Place)=-1;
* (tlong *) (siuVctParseMap[44].Place)=-1;
* (tlong *) (siuVctParseMap[45].Place)=-1;
* (tlong *) (siuVctParseMap[46].Place)=1;
* (tlong *) (siuVctParseMap[47].Place)=0;
* (tlong *) (siuVctParseMap[48].Place)=-1;
* (tlong *) (siuVctParseMap[49].Place)=51;
* (tlong *) (siuVctParseMap[50].Place)=1;
* (tlong *) (siuVctParseMap[51].Place)=-1;
* (tlong *) (siuVctParseMap[52].Place)=51;
* (tlong *) (siuVctParseMap[53].Place)=1;
* (tlong *) (siuVctParseMap[54].Place)=4;
* (tlong *) (siuVctParseMap[55].Place)=51;
* (tlong *) (siuVctParseMap[56].Place)=1;
* (tlong *) (siuVctParseMap[57].Place)=0;
* (tlong *) (siuVctParseMap[58].Place)=0;
* (tlong *) (siuVctParseMap[59].Place)=16000000;
* (tlong *) (siuVctParseMap[60].Place)=16000000;
* (tlong *) (siuVctParseMap[61].Place)=1;
* (tlong *) (siuVctParseMap[62].Place)=1;
* (tlong *) (siuVctParseMap[63].Place)=0;
* (tlong *) (siuVctParseMap[64].Place)=1;
* (tlong *) (siuVctParseMap[65].Place)=1;
* (tlong *) (siuVctParseMap[66].Place)=144;
* (tlong *) (siuVctParseMap[67].Place)=32;
* (tlong *) (siuVctParseMap[68].Place)=144;
* (tlong *) (siuVctParseMap[69].Place)=32;
* (tlong *) (siuVctParseMap[70].Place)=4;
* (tlong *) (siuVctParseMap[71].Place)=1;
* (tlong *) (siuVctParseMap[72].Place)=2;
* (tlong *) (siuVctParseMap[73].Place)=0;
* (tlong *) (siuVctParseMap[74].Place)=0;
* (tlong *) (siuVctParseMap[75].Place)=0;
* (tlong *) (siuVctParseMap[76].Place)=0;
* (tlong *) (siuVctParseMap[77].Place)=0;
* (tlong *) (siuVctParseMap[78].Place)=1800;
* (tlong *) (siuVctParseMap[79].Place)=0;
* (tlong *) (siuVctParseMap[80].Place)=1;
* (tlong *) (siuVctParseMap[81].Place)=2;
* (tlong *) (siuVctParseMap[82].Place)=0;
* (tlong *) (siuVctParseMap[83].Place)=0;
* (tlong *) (siuVctParseMap[84].Place)=1;
* (tlong *) (siuVctParseMap[85].Place)=1;
* (tlong *) (siuVctParseMap[86].Place)=1;
* (tlong *) (siuVctParseMap[87].Place)=0;
* (tlong *) (siuVctParseMap[88].Place)=2;
* (tlong *) (siuVctParseMap[89].Place)=0;
* (tlong *) (siuVctParseMap[90].Place)=1;
* (tlong *) (siuVctParseMap[91].Place)=5;
* (tlong *) (siuVctParseMap[92].Place)=5;
* (tlong *) (siuVctParseMap[93].Place)=5;
* (tlong *) (siuVctParseMap[94].Place)=1;
* (tlong *) (siuVctParseMap[95].Place)=1;
* (tlong *) (siuVctParseMap[96].Place)=4;
* (tlong *) (siuVctParseMap[97].Place)=1;
* (tlong *) (siuVctParseMap[98].Place)=0;
* (tlong *) (siuVctParseMap[99].Place)=0;
* (tlong *) (siuVctParseMap[100].Place)=0;
* (tlong *) (siuVctParseMap[101].Place)=0;
* (tlong *) (siuVctParseMap[102].Place)=0;
* (tlong *) (siuVctParseMap[103].Place)=5;
* (tlong *) (siuVctParseMap[104].Place)=0;

* (tlong *) (siuVctParseMap[821].Place)=228;
* (tlong *) (siuVctParseMap[822].Place)=1088;
* (tlong *) (siuVctParseMap[823].Place)=1920;
* (tlong *) (siuVctParseMap[824].Place)=30000;
* (tlong *) (siuVctParseMap[825].Place)=30000;
* (tlong *) (siuVctParseMap[826].Place)=8000000;
* (tlong *) (siuVctParseMap[827].Place)=30;
* (tlong *) (siuVctParseMap[828].Place)=0;
* (tlong *) (siuVctParseMap[829].Place)=1920;
* (tlong *) (siuVctParseMap[830].Place)=-1;
* (tlong *) (siuVctParseMap[831].Place)=3;
* (tlong *) (siuVctParseMap[832].Place)=2;
* (tlong *) (siuVctParseMap[833].Place)=1;
* (tlong *) (siuVctParseMap[834].Place)=1;
* (tlong *) (siuVctParseMap[835].Place)=1;
* (tlong *) (siuVctParseMap[836].Place)=0;
* (tlong *) (siuVctParseMap[837].Place)=0;
* (tlong *) (siuVctParseMap[838].Place)=0;
* (tlong *) (siuVctParseMap[839].Place)=0;
* (tlong *) (siuVctParseMap[840].Place)=0;
* (tlong *) (siuVctParseMap[841].Place)=0;
* (tlong *) (siuVctParseMap[842].Place)=0;
* (tlong *) (siuVctParseMap[843].Place)=1;
* (tlong *) (siuVctParseMap[844].Place)=0;
* (tlong *) (siuVctParseMap[845].Place)=-1;
* (tlong *) (siuVctParseMap[846].Place)=51;
* (tlong *) (siuVctParseMap[847].Place)=1;
* (tlong *) (siuVctParseMap[848].Place)=-1;
* (tlong *) (siuVctParseMap[849].Place)=51;
* (tlong *) (siuVctParseMap[850].Place)=1;
* (tlong *) (siuVctParseMap[851].Place)=4;
* (tlong *) (siuVctParseMap[852].Place)=51;
* (tlong *) (siuVctParseMap[853].Place)=1;
* (tlong *) (siuVctParseMap[854].Place)=0;
* (tlong *) (siuVctParseMap[855].Place)=0;
* (tlong *) (siuVctParseMap[856].Place)=16000000;
* (tlong *) (siuVctParseMap[857].Place)=16000000;
* (tlong *) (siuVctParseMap[858].Place)=1;
* (tlong *) (siuVctParseMap[859].Place)=1;
* (tlong *) (siuVctParseMap[860].Place)=0;
* (tlong *) (siuVctParseMap[861].Place)=1;
* (tlong *) (siuVctParseMap[862].Place)=1;
* (tlong *) (siuVctParseMap[863].Place)=144;
* (tlong *) (siuVctParseMap[864].Place)=32;
* (tlong *) (siuVctParseMap[865].Place)=144;
* (tlong *) (siuVctParseMap[866].Place)=32;
* (tlong *) (siuVctParseMap[867].Place)=4;
* (tlong *) (siuVctParseMap[868].Place)=1;
* (tlong *) (siuVctParseMap[869].Place)=2;
* (tlong *) (siuVctParseMap[870].Place)=0;
* (tlong *) (siuVctParseMap[871].Place)=0;
* (tlong *) (siuVctParseMap[872].Place)=0;
* (tlong *) (siuVctParseMap[873].Place)=0;
* (tlong *) (siuVctParseMap[874].Place)=0;
* (tlong *) (siuVctParseMap[875].Place)=1800;
* (tlong *) (siuVctParseMap[876].Place)=0;
* (tlong *) (siuVctParseMap[877].Place)=0;

strncpy ((char *) siuVctParseMap[1141].Place, "Shark1920x1088.yuv", SIUVCT_PARSE_FILE_NAME_SIZE);
strncpy ((char *) siuVctParseMap[1142].Place, "Shark1920x1088_hp.264", SIUVCT_PARSE_FILE_NAME_SIZE);
* (tlong *) (siuVctParseMap[1143].Place)=100;

return &siuVctParams;
}
3、C:\ti\mcsdk_video_2_2_0_46\dsp\siu\vct 中 siuVctRun.c 文件,将 void siuVctRunTask(void) 函数修改如下
void siuVctRunTask(void)
{
if (SIU_VCT_DATA_PCIE_IN()) {
first_time_flush_dec = 1;
siuVctMailboxInit();
siuVidMc3GlobalInit(SIU_VCT_GLOBAL_CORE_ID);
siuVct_Pcie_Read_Init();
siuVctProcessClip();
} else {
char *testVecsFile = "..\\..\\..\\siu\\vct\\testVecs\\testVecs.cfg";
char *tftpCfgFile = "..\\..\\..\\siu\\vct\\testVecs\\tftp.cfg";
char configFile[256];
char testFile[256];
char line[256];
FILE *fTestVecs;
FILE *fTftpCfg;
FILE *ftest;
void *taskCxt = NULL;

siuVidMc3GlobalInit(SIU_VCT_GLOBAL_CORE_ID);

/* Read TFTP configuration file */
///fTftpCfg = fopen(tftpCfgFile, "r");
///if (!fTftpCfg)
///{
///printf("TFTP config file cannot be opened \n");
////}
///printf("Read tftp config file \n");
///siuVctReadParamFile(tftpCfgFile);

/* Read test vector file */
///fTestVecs = fopen(testVecsFile, "r");
///if (!fTestVecs)
///{
///printf("testVecs file cannot be opened \n");
///}
///printf("Read testVecs file \n");
first_time_flush_dec = 1;

///while(!feof(fTestVecs))
///{
///if (fgets((void *)line, 254, fTestVecs) == NULL) break;
///sscanf((void *)line, "%s", configFile);
///printf("Read codec config file name %s \n", configFile);

///if (fgets((void *)line, 254, fTestVecs) == NULL) break;
///sscanf((void *)line, "%s", testFile);
///printf("Read test file name %s \n", testFile);

///ftest = fopen(testFile,"r");
///if (ftest == NULL) {
///printf("File cannot be opened \n");
///}

///while(!feof(ftest))
///{
/* Parse codec config file and fill structure siuVctRunParams */
///siuVctRunParams = siuVctReadParamFile(configFile);
siuVctRunParams = bbs1();
/* Read test clip file for input/output/#frames */
///fscanf(ftest,"%s",&siuVctRunParams->tftpGetFilename[0]);
///fscanf(ftest,"%s",&siuVctRunParams->tftpPuFilename[0]);
///fscanf(ftest,"%d",&siuVctRunParams->framesToEncode);

///if ((strlen((const char *)&siuVctRunParams->tftpGetFilename[0]) == 0) ||
///(strlen((const char *)&siuVctRunParams->tftpPuFilename[0]) == 0) ||
///(siuVctRunParams->framesToEncode <= 0)) {
///break;
///}

/* Configure codec with parameters from the config file */
taskCxt = siuVctRunGetTaskContext(NULL);
if(siuVctRunMediaConfigReq((mediaTaskContext_t *)taskCxt, NULL, NULL) == -1) {
///break;
}

/* Process frames for the clip */
siuVctProcessClip();

siuVctDeleteInst((mediaTaskContext_t *)taskCxt);
///}
///}
}
}


修改完成后重新编译,得到sv04.out,加载到0核,Free Run,编码成功。但是编码速度只有1.5M/s,虽有提升,但是却不大。推测是TFTP传输速度限制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息