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

        由于项目需要,想要将视频编码程序烧写到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传输速度限制

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: x-cube-mcsdk-ful_5.4.6.zip是一款蓝牙物联网软件开发套件。它通过使用蓝牙技术,将智能设备(如手机、平板电脑等)与其他设备(如传感器、灯、温度计等)连接起来,实现智能家居、智能照明等应用。此套件提供了多种模块,包括设备管理、蓝牙连接、数据传输等,方便开发者快速地构建自己的应用。此套件也可以进行二次开发,添加更多自定义功能。它支持多种开发板(如STM32)和操作系统(如Windows、Linux、macOS等),易于使用。此套件的功能丰富,适合各种物联网应用程序的开发。此外,它还具有高度移植性和灵活性,适合初学者和专业开发者使用。综上所述,x-cube-mcsdk-ful_5.4.6.zip是一款优秀的蓝牙物联网软件开发套件,将在未来智能家居、智能照明、智能医疗等应用中扮演重要角色。 ### 回答2: x-cube-mcsdk-ful_5.4.6.zip是为STM32微控制器开发的全功能SDK。这个SDK提供了丰富的API和驱动程序,方便了开发人员在STM32上实现与云端的连接。通过这个SDK,开发人员可以快速地将他们的STM32电路板连接到云平台上,实现数据的收集和控制。这个SDK提供了许多有用的组件,如MQTT协议、OTA升级功能、数据推送、云端诊断等等,使得开发人员可以更容易地将STM32嵌入式系统与云服务进行集成。同时,这个SDK还提供了丰富的例程和API文档,使开发人员可以更好地理解和使用SDK。总之,x-cube-mcsdk-ful_5.4.6.zip是一款功能十分强大的SDK,可以显著地提高STM32嵌入式系统与云服务之间的连接效率和稳定性,从而满足用户对于互联设备的需求。 ### 回答3: x-cube-mcsdk-ful_5.4.6.zip是意法半导体提供的一款软件开发工具包,用于开发物联网设备和应用程序。该工具包提供了丰富的软件组件和示例应用,支持多种硬件平台和通信协议。使用x-cube-mcsdk-ful_5.4.6.zip可以简化物联网设备和应用程序的开发过程,提高开发效率和软件质量。该工具包主要包括以下几个方面: 1.物联网平台:x-cube-mcsdk-ful_5.4.6.zip提供了完整的物联网平台解决方案,支持设备和云端的快速集成和连接。 2.通信协议:x-cube-mcsdk-ful_5.4.6.zip支持MQTT、CoAP等通信协议,可以保证设备和云端的稳定通信和数据传输。 3.软件组件:x-cube-mcsdk-ful_5.4.6.zip包括了多个软件组件,如TLS、JSON解析、文件系统等,可以满足不同的开发需求,并且易于集成和使用。 4.示例应用:x-cube-mcsdk-ful_5.4.6.zip提供了多个示例应用,如温湿度监测、智能插座控制等,可以帮助开发者快速搭建自己的物联网应用。 总之,x-cube-mcsdk-ful_5.4.6.zip是一款非常实用的物联网开发工具包,它可以为开发者提供丰富的软件组件和示例应用,帮助他们快速搭建物联网设备和应用程序,实现设备和云端之间的通信和数据传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值