This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

基于mcfw的视频图像处理

Other Parts Discussed in Thread: TVP5158

我想基于mcfw的采集和显示的框架下,做一下视频图像处理,在上面加一些自己的视频图像处理的算法,(使用的是DVRRDK_02.00.00.23)但是编译执行之后看不到有什么变化! 请问一下如果是自己的算法,应该放在什么位置?我现在将自己的算法加在demo_vcap_venc_vdec_vdis_bits_rdwr.c的VcapVencVdecVdis_ipcBitsProcessFullBufs这个函数,在他的后面加了自己的处理算法,但是变异通过之后没有效果,请问一下他的数据传输过来之后是在哪个地方存储,使用的什么方式传递?希望能有人解答!还有在以后的话如果想使用DSP执行算法!应该怎样调用DSP上的算法?是根据在mcfw/src_bios6/shdnks_c6xdsp/alg_link/scd路径下的文件实现吗?

  • 你希望做什么样的图像处理?能否介绍一下,我们可以根据你的需求提供一些建议的数据流和方案。

  • 大家好!我也是想弄一个基于mcfw的视频图像处理,就比如我要做个图像颜色校正的,我这边的程序开发包也是DVRRDK_02.00.00.23,我应该怎么修改程序,在哪修改加入我自己的算法?

  • 在RDK demo里,multich_progressive_vcap_venc_vdec_vdis.c中有将图像采集下来、送入DSP处理的数据通路。

    处理的是YUV数据,你需要用自己的代码替换掉demo中的算法,在这个demo中,DSP用来添加OSD,算法部分都在函数AlgLink_OsdalgProcessFrame中

    你可以把你的算法写在这个函数里,就可以实现用DSP处理YUV数据的功能。

  • 非常感谢你!还有一些问题就是在那个里面修改之后,把我们的算法加进去之后编译的时候只能通过MAKEFILE编译?之后执行的时候怎样才能看到自己算法处理的效果吗,还是执行/opt/DVRRDK_02.00.00.23/dvr_rdk/bin/ti816xrun_mcfw_demo.sh这个文件,然后在执行的过程中怎样选择执行自己的算法呢?那里面很多选项,我们处理的时候不需要编码解码!直接对采集到的数据进行处理,D1输入之后是什么样的格式,需要进行格式转换吗?因为之前在DM642上做试验的时候通常先对采集的视频进行格式转换(就是色差信号重采样),然后再进行处理,在这个上面用不用进行这样的处理,/opt/DVRRDK_02.00.00.23/dvr_rdk/demos/mcfw_api_demos/mcfw_demo是不是整体都是以这个目录为主体,其他的算吗都是通过在这个里面被调用?再次感谢您!

  • 我怎么没有找着你说的那个函数?能给我说下在哪个文件里吗?

  • 应该是版本问题,如果有条件,建议更新到RDK3.5版本。

    应该在mcfw\arc_bios6\links_c6xdsp\alg_link中有类似的处理,这个目录下的文件都是在DSP上运行的。

     

  • 我们的RDK中主要是针对DVR应用写的参考usecase,建议你精度某个usecase,熟悉一下数据通路是如何搭建起来的,之后可以把enc、dec等不需要的模块去掉。

    在目前框架下,是通过MAKEFILE编译、执行run_mcfw_demo.sh来运行、看效果。

    不过这里DSP处理过后的数据会进入编码码流,不一定会在预览窗口看到。可以先通过串口打印来确定自己的算法被执行到了。

    采集下来的D1是YUV422格式、在经过DEI、进入DSP前,默认是YUV420格式,如果仍然需要422格式,需要修改代码。

    mcfw_demo可以理解为demo的主函数,顺着读下去,重点在Vsys_create这个函数。

  • 谢谢您!非常感谢!!!

  • /opt/DVRRDK_02.00.00.23/dvr_rdk/mcfw/src_linux/mcfw_api/usecases/ti816x在这个目录下面就有……

  • Haijun Guo您好:

          main()---Demo_run(DEMO_VCAP_VDIS)//5;----Demo_startStop(5, TRUE)----VcapVdis_start();------Vsys_create();-----MultiCh_createVcapVdis();

    -----System_init();

    ----System_initLinks()----AlgLink_init()-----AlgLink_tskMain---- AlgLink_algProcessData(pObj);-----AlgLink_OsdalgProcessFrame

    这个是根据您的提示找到的执行函数之间的调用关系链,(最后的算法在AlgLink_OsdalgProcessFrame这个函数里面)还有一点不太明白的就是在执行了run_mcfw_demo.sh之后选择Demo_run(DEMO_VCAP_VDIS)//5这个以后出现的是1,采集设置2,编码设置3,解码设置4,显示设置,选择采集设置以后里面是关于OSD的和SWOSD的设置,这个有什么作用?如果是在AlgLink_OsdalgProcessFrame修改了自己的算法(比如说一个最简单的取反操作)怎样才能在屏幕上看到所执行后的效果?麻烦您给指点一下!!!

  • mcfw_demo是不是就没有用dsp的算法?

    AlgLink_OsdalgProcessFrame这个算法是不是只在dsp中执行?

    如果在mcfw_demo中调用dsp,能不能直接用,还是要有初始化等一系列的操作?

    在src_bios6和src_linux中有很多函数名称,文件名称都是一样的,例如system_init();就有4个。怎么区分谁对谁?

    是不是在mcfw_demo中调用dsp,用system_c6xdsp.c中的system_init就可以?

    最后,要用dsp处理算法是不是用multich_progressive_vcap_venc_vdec_vdis.c中的数据通路,在把AlgLink_OsdalgProcessFrame算法改一下就可以?

    多谢了。

  • 你好!上次有说过可以在AlgLink_OsdalgProcessFrame()函数中加入自己的算法。假如我要让图片变得更亮,我应该怎么写入指令?另外你们有没有一些其它的参考例程?

  • 首先这个DEMO_VCAP_VDIS demo里好像没有用到DSP算法。

    在demo_vcap_venc_vdec_vdis里有用DSP在YUV数据上添加OSD的操作。

    因为DSP在添加OSD后的YUV送去做了编码,并没有送显示,所以你在显示上可能看不到OSD。

    要在屏幕上看到效果,可以切换通道,让解码通道显示在屏幕上 (具体可以参见demo guide)。

  • 具体的算法还要你自己去开发,我们这里只是提供一个接口和一个DSP平台。

  • mcfw_demo是不是就没有用dsp的算法?

    【回答】有的,在demo_vcap_venc_vdec_vdis中,就有用DSP在YUV数据上叠加OSD的操作。

    AlgLink_OsdalgProcessFrame这个算法是不是只在dsp中执行?

    【回答】是的,mcfw\src_bios6\links_c6xdsp\ 下的代码在DSP中执行。

    如果在mcfw_demo中调用dsp,能不能直接用,还是要有初始化等一系列的操作?

    【回答】需要一系列初始化操作,具体请参考demo

    在src_bios6和src_linux中有很多函数名称,文件名称都是一样的,例如system_init();就有4个。怎么区分谁对谁?

    是不是在mcfw_demo中调用dsp,用system_c6xdsp.c中的system_init就可以?

    【回答】每个函数是针对不同的处理器上的。比如4个system_init(),分别是A8、DSP、VideoM3、VPSSM3这4个处理器上各自的初始化工作。

    最后,要用dsp处理算法是不是用multich_progressive_vcap_venc_vdec_vdis.c中的数据通路,在把AlgLink_OsdalgProcessFrame算法改一下就可以?

    【回答】可以,具体算法由用户自己开发,这里提供的是数据接口和DSP平台。

  • 我在函数AlgLink_OsdalgProcessFrame添加了程序,我现在要重新编译生成run_mcfw_demo.sh我要执行Make ,后面加什么指令?还是我要用一开始的make -s sys-all?这样编译太久了?

  • Haijun Guo您好:

                         在mcfw中调用DSP(mcfw\src_bios6\links_c6xdsp\ 下的代码在DSP中执行)在那个run_mcfw_demo.sh执行文件中怎样才能调用DSP来执行这些算法?或者说怎样判断我的DSP是否执行到了我所添加的算法?

    multich_progressive_vcap_venc_vdec_vdis.c这个里面通往DSP的数据通路是不是已经建立好了,那样我如果把我的算法添加到AlgLink_OsdalgProcessFrame这个函数中之后怎样设置DSP去执行这个算法呢?

    还有使用DSP的时候初始化应该在什么地方添加?具体执行的步骤在哪个地方有参考?麻烦您指示一下,谢谢!!!

  • multich_progressive_vcap_venc_vdec_vdis.c这个里面通往DSP的数据通路已经建立好了,AlgLink_OsdalgProcessFrame会默认运行。

    你可以在AlgLink_OsdalgProcessFrame中添加点串口打印来验证程序是否跑到。

    DSP初始化在system_c6xdsp.c中

  • Haijun Guo您好:

    还有之前所得DSP的初始化的工作,以及在数据通路中建立DSPlink的函数这一系列的工作开发包里已经全部做好了,是不是我们只需要根据传输过来的数据加上我们自己的算法进行处理就可以了(不需要编码解码的话将编码解码部分去掉就可以了)?

    关于xdias算法封装的问题,怎样检测自己写的算法是不是符合Ti所说的标准?

    这一系列是不是通过M3控制采集然后调用DSP执行相关的算法只涉及到M3和DSP之间的通信?systemlink和ipclink这两个使用的过程中有什么区别?(在读技术文档的时候对这两个东西不是很理解,麻烦您指点一下!!!非常感谢!!!)

  • 信号量或者while(done)

  • Haijun Guo您好:

                          按照您的指点,在DSP上运行算法的结果已经可以再屏幕上显示了(图像叠加的那个),在开发算法的时候他们不是有一个Ti的XDM标准,我大概看了一下Ti的那个算法那标准就是在封装的时候应该怎样检测自己的算法是否符合这个标准?开发这个算法和开发和直接写在DSP上运行的算法有没有区别?之前大概了一下Codecengine的东西上面说DSP执行的算法必须要封装成可以被ARM端识别调用的?但是在mcfw的框架下,是不是也要符合这样的标准?请教一下!!!麻烦您了!谢谢!!!

  • 关于你说的XDM标准,我不熟悉。建议你新开一个帖子询问这个问题,嵌套在这个贴子里,不容易被专家发现:)

  • 我的程序开发包也是DVRRDK_02.00.00.23.谁能帮我讲解下OsdLink_alg.c(dvr_rdk/mcfw/src_bios6/links_c6xdsp/ag_link/swosd/OsdLink_alg.c)这个代码的工作流程?谢谢啦

  • 你好请问函数AlgLink_OsdalgProcessFrame中的FVID2_Frame *pFrame,FVID2_Frame这个在哪个头文件中有定义?它里面包含了哪些内容?找了好久都没有找到。求解决,谢谢!

  • FVID2相关的结构体定义在ti_tools下的HDVPSS包里。

  • gVcapModuleContext.colorPrm.videoBrightness = 0x80;    /* TUNED for
                                                                    * specific
                                                                    * scene's, to
                                                                    * make black
                                                                    * blacker */
            gVcapModuleContext.colorPrm.videoContrast   = 0x80;     /* TUNED for
                                                                    * specific
                                                                    * scene's, to
                                                                    * make black
                                                                    * blacker */
            gVcapModuleContext.colorPrm.videoSaturation  = 0x80;    /* default */

            gVcapModuleContext.colorPrm.videoHue         = 0x00;
    你好,请问这段代码有何作用?为何改了这边的值,图片都没有变化?代码在(mcfr\src_linux\mcfw_api\ti_vcap.c中)

  • 郭老师您好:AlgLink_OsdalgProcessFrame这个函数中执行的是什么算法?

    我把这个函数题体的信息全部删除以后没有任何效果,是不是处理后的编码送到编码中了没有送到显示,所以在显示中看不到?

    这个地方的算法处理的是不是采集过来的视频经过编码之后的?然后处理后之后再送到解码去,最后再显示的?在哪个地方可以设置将这个处理后的图像直接送去显示不进行编码?

    在那个OSD图像叠加的demo中那个“标志图像”是在程序的什么地方加进去的?

    谢谢!

  • AlgLink_OsdalgProcessFrame这个函数中执行的是在编码数据中叠加OSD。

    你的理解是正确的,处理后的编码送到了编码中,预览显示是看不到的,需要在回放(解码)显示中看。

    “标志图像”在demo层初始化的。

  • 可是怎么看回放呀。用vlcplayer打开硬盘中存储的东西?

  • 郭老师 您好: 

                          AlgLink_OsdalgProcessFrame这个函数接收到的是原始采集的数据,然后再进行处理,之后再编码,然后解码,最后送到显示实现?也就是图像采集之后直接就送到DSP里进行叠加还是编码之后再进行图像叠加,之后再解码显示,现在能不能在DSP处理之后不解过编码 解码 直接送到显示端口显示?希望郭老师给提示一下? 谢谢您!

  • 是图像采集之后直接就送到DSP里进行叠加,在编码之前。

    可以在DSP处理之后不解过编码 解码 直接送到显示端口显示。更改相应的数据通路就可以了。

  • 郭老师您好:

                           mcfw\src_bios6\links_c6xdsp\swosd\中的AlgLink_OsdalgProcessFrame这个函数中我把函数体改写了之后,编译没有任何提示,甚至是将links_c6xdsp这个文件夹删除,编译的时候都不会报错,所有功能都可以正常执行,涉及到DSP的算法不都是在这个里面吗? 为什么编译的时候没有一点影响呢? 还有就是在那个更改数据通道的时候是在那个参考文档里有参考?谢谢您!!!

  • 郭老师您好:

                           mcfw\src_bios6\links_c6xdsp\swosd\中的AlgLink_OsdalgProcessFrame这个函数中我把函数体改写了之后,编译没有任何提示,甚至是将links_c6xdsp这个文件夹删除,编译的时候都不会报错,所有功能都可以正常执行,涉及到DSP的算法不都是在这个里面吗? 为什么编译的时候没有一点影响呢? 还有就是在那个更改数据通道的时候是在那个参考文档里有参考?谢谢您!!!

  • 郭老师您好:

                      你说的这个目录文件,在编译的时候为什么把整个links_c6xdsp目录删除掉执行make -s dvr_rdk_linux 命令的时候不会报错呢?

    而且修改的alg_link中的文件,有明显的语法错误,但是编译仍然能够通过,这是为什么???请您指点一下!!!

  • 郭老师您好:

                        我的算法改好之后,在使用 make -s dvr_rdk_linux编译之后,怎样链接到mcfw\src_bios6\links_c6xdsp\alg_link这个里面的算法? 

                        应该使用什么编译命令! 使用make -s dvr_rdk_bios6 是清除和编译DVR RDK只在BIOS6的代码! 但是编译之后 应该使用什么命令把这个算法添加到demo中,之前你说AlgLink_OsdalgProcessFrame这个函数是默认运行的, 那修改之后使用什么样的方式编译呢? 谢谢您! 麻烦您了!!!

  • 使用make -s dvr_rdk_bios6 是清除和编译DVR RDK只在BIOS6的代码! 但是编译之后 应该使用什么命令把这个算法添加到demo中,之前你说AlgLink_OsdalgProcessFrame这个函数是默认运行的, 那修改之后使用什么样的方式编译呢?

  • 为什么串口打印只能看到的是SCD的信息,没有关于SWOSD的信息,是不是直接掉用的SCD的算法?

  • 你好!我使用的也是DM8168的DVRRDK_02.00.00.23开发包,我现在也是想在上面加一些自己的视频图像处理算法(例如,我要是最后显示的图片的RGB关系是R‘=R-(g+b)/4)。我应该在哪个函数中写入自己的算法?写入之后,我的DEMO主程序是怎么调用DSP算法的?

    TVP5158_i2C.C程序中的Device_tvp5158SetVideoColor()这个函数有何作用?注释掉也不会改变显示的颜色?

     regAddr[numRegs] = DEVICE_TVP5158_REG_Y_BRIGHTNESS;

        if ( pPrm->videoBrightness == DEVICE_VIDEO_DECODER_DEFAULT )
        {
            regValue[numRegs] = 128;
            numRegs++;
        }
        else if ( pPrm->videoBrightness == DEVICE_VIDEO_DECODER_NO_CHANGE )
        {

        }
        else
        {
            regValue[numRegs] = pPrm->videoBrightness;
            numRegs++;
        }

        regAddr[numRegs] = DEVICE_TVP5158_REG_Y_CONTRAST;

        if ( pPrm->videoContrast == DEVICE_VIDEO_DECODER_DEFAULT )
        {
            regValue[numRegs] = 128;
            numRegs++;
        }
        else if ( pPrm->videoContrast == DEVICE_VIDEO_DECODER_NO_CHANGE )
        {

        }
        else
        {
            regValue[numRegs] = pPrm->videoContrast;
            numRegs++;
        }

    还有郭老师上次说可以在这个函数中(AlgLink_OsdalgProcessFrame)加入自己的算法,但是为何把这个函数注释掉,对原来没有影响?

    请高手给小弟一点指导,小弟是个新手。谢谢各位了。

  • 我现在弄的也是跟你一样的然间包RDK2.0  北京合众达的SEED-DVS8168   现在也弄了几个月了 也是搞视频处理算法   我QQ466914350      

  • 郭老师您好:

    如果在mcfw_demo中调用dsp,能不能直接用,还是要有初始化等一系列的操作?

    【回答】需要一系列初始化操作,具体请参考demo

    请问具体是参考哪些demo?谢谢。

  • 请问在DM8127里面做类似的设计,这个函数又是在哪里了。用的IPNC_RDK,也遇到与本帖大部分人相似的问题。