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.

DM8168 dvrrdk中demo问题

Other Parts Discussed in Thread: TVP5147, TVP5158, TVP7002

Hi All,

       请问一下在dvrrdk的目录中ti_tools/hdvpss/hdvpss_01_00_01_37_patched/packages/ti/psp/examples/common/vps/capture/captureVip/src/CaptureVip_main.c编译后生成了ti_tools/hdvpss/hdvpss_01_00_01_37_patched/build/hdvpss_examples_captureVip/bin/ti816x-evm/hdvpss_examples_captureVip_m3vpss_debug.xem3文件,这个文件可以直接执行吗?我在开发板启动完毕后,先运行了./init.sh、./load.sh,这两个脚本是负责加载一下相应驱动以及固件,然后我在运行hdvpss_examples_captureVip_m3vpss_debug.xem3,结果报如下错误:

root@dm816x:/opt/dvr_rdk/ti816x# ./hdvpss_examples_captureVip_m3vpss_debug.xem3
Killed

直接异常退出了,请问是什么原因造成的?

  • 你说的运行.xem3指的是什么?    ./   ?

    这个是M3的固件,应该不是linux下可执行的东西

  • 哦 谢谢。但我看这个程序是个demo程序啊,不能独立运行这个demo程序吗?packages/ti/psp/examples/common/vps/capture/captureVip/src/CaptureVip_main.c,或者说我改如何使用这个demo程序呢?

  • 看样子是个新手。

    生成的hdvpss_examples_captureVip_m3vpss_debug.xem3是VPSS M3的固件,需要通过load.sh来加载。可执行的程序应该是你生成的.out文件。具体根据你使用的demo 的makefile中指定的名字有关。

  • 是的,我刚接触这些,多有麻烦之处,还请多见谅。谢谢

    我看过编译过程,CaptureVip_main.c就只生产了这个.xem3的固件,没有看到生产了相对应的.out问题,我有个疑问,既然这个是个可执行的main.c程序,为何要生产了一个xem3的固件,那如果我通过load.sh加载这个固件,会是什么个效果?

  • 这个是HDVPSS包中的demo代码,意思是你可以仿照这个来写测试程序,刚刚看了下例子,你可能需要使用rdk下的工具fwloader来加载改程序运行

    dvr_rdk\mcfw\src_linux\utils\fw_load\src编译后生成的fw_load.out来加载你生成的这个M3固件,如果加载你可以参考脚本load_vpss.sh。

    HDVPSS是个独立的安装包,能不能实现独立的自测,还真不太清楚,大致看了下程序,感觉应该得依赖于别的工具。具体你可能得咨询TI的FAE。

  • Robin,很感谢你给我的帮助。

    还有个疑问,如果我用fw_load.out来加载生产的那个M3固件,那是不是等同于我运行了那个程序,加载固件会直接从编译的那个源码的main函数开始执行呢? 还是需要别的方式来启动这个demo来运行。还有个问题,你是如果了解到要执行M3固件必须用fw_load.out来加载的,之所以这个问题,我想以后遇到了类似的问题,自己就可以知道怎么解决,免得麻烦大家。

    另外,我想了解一下DVRRDK这套架构可以实现prot0 A、B和Port1A、B各自连接一路8bit的输入源,同时采集工作,能做到这个效果吗?假如这四路bit输入是tvp5147 decode

        

  • 加载后,会运行的,这部分你可以看firmware loader的代码,参考下http://blog.csdn.net/crushonme/article/details/10287693 loader部分说明,在dvrrdk中在运行后是会给HOST端发送一个字符 's',来确认slave已经在跑程序了。你这个不知道行不行,看了下程序,貌似用了vps_printf,这个程序是需要先运行remote_debug的。

    DVRRDK确定是可以实现port0 A、B ,port 1 A、B同时采集8bit数据的,这个我们有产品做过。

  • Robin,我用fw_load.out加载了这个固件,运行情况如下:

    root@dm816x:/opt/dvr_rdk/ti816x# bin/fw_load.out startup VPSS-M3 hdvpss_examples
    _captureVip_m3vpss_debug.xem3
    Attached to slave procId 2.
    Loaded file hdvpss_examples_captureVip_m3vpss_debug.xem3 on slave procId 2.
    Started slave procId 2.
    After Ipc_loadcallback status [0x00000000]
    After Ipc_startcallback status [0x00000000]
    root@dm816x:/opt/dvr_rdk/ti816x#

    好像还没有从main()函数开始运行,是否还需要别的方法来启动这个demo程序呢?

    另外,还有个问题想问问你,我看过你的这篇csdn的文章了,里面有提到输入分Single Channel和Multi Channe两种方式,Multi模式应该指的是像tvp5158这种可以通过一个输入端口(例如port0 A口或者port0B口)采集到将四路输入合并到一个平面上视频源吧?如果是我理解的这样,那是不是说如果prot0A、B和Prot1A、B各种接入一个8bit一路输入源,其模式就是Single Channel模式吗?

    在dvrrdk中,有定义几个传入到HDVPSS xem3固件中的参数,这些参数是用来告诉HDVPSS输入源的模式的,几种模式如下:

    /**
    * \brief Video capture operation mode
    */
    typedef enum
    {
    VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNC = 0,
    /**< Single Channel non multiplexed mode */
    VPS_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_LINE_MUX_EMBEDDED_SYNC,
    /**< Multi-channel line-multiplexed mode */
    VPS_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_PIXEL_MUX_EMBEDDED_SYNC,
    /**< Multi-channel pixel muxed */
    VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_HSYNC_VBLK,
    /**< Single Channel non multiplexed discrete sync mode with HSYNC and
    VBLK as control signals. */
    VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_HSYNC_VSYNC,
    /**< Single Channel non multiplexed discrete sync mode with HSYNC and
    VSYNC as control signals. */
    VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VBLK,
    /**< Single Channel non multiplexed discrete sync mode with ACTVID and
    VBLK as control signals. */
    VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC,
    /**< Single Channel non multiplexed discrete sync mode with ACTVID and
    VBLK as control signals. */
    VPS_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_LINE_MUX_SPLIT_LINE_EMBEDDED_SYNC,
    /**< Multi-channel line-multiplexed mode - split line mode */
    VPS_CAPT_VIDEO_CAPTURE_MODE_MAX
    /**< Maximum modes */
    } Vps_CaptVideoCaptureMode;

    我看了dvrrdk中,如果输入源是tvp5158,他们用的参数是VPS_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_PIXEL_MUX_EMBEDDED_SYNC,如果是16bit的输入,例如tvp7002、sil9135,它们用的就是VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNC。假如说我现在要通过prot0B  口(不是A口)采集一路来自tvp5147 8bit(或者8bit的高清输出decode)的输入源,那我这个定义应该选择哪一个呢?

  • 1、出现以上打印不代表你的VPSS核没跑,只是因为你没有做remote debug,所以VPSS侧的打印没法输出到linux下的串口。

    2、

    Multi模式应该指的是像tvp5158这种可以通过一个输入端口(例如port0 A口或者port0B口)采集到将四路输入合并到一个平面上视频源吧?

    是的。

    如果是我理解的这样,那是不是说如果prot0A、B和Prot1A、B各种接入一个8bit一路输入源,其模式就是Single Channel模式吗?

    是的。

    假如说我现在要通过prot0B  口(不是A口)采集一路来自tvp5147 8bit(或者8bit的高清输出decode)的输入源,那我这个定义应该选择哪一个呢?

    TVP5147,我看了下手册,貌似是多路选择一路编码,如果是这样的话,就应该VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNC或者是外同步模式,这个根据你实际情况选择。

    这个问题根据TVP5147具体是干嘛的,我只是随便看了下它的手册,或许理解不正确,你需要确认下。

    PS:如果你满意我的回答,请将答案钩绿。

  • Robin,谢谢你给了我这么多的帮助。

    还有个问题想问问你,比如说我现在要换一个采集视频的芯片,不用tvp5158这些dvrrdk已有的解码器,换成别采集芯片,dvrrdk中demos/link_api_demos/common/chains_main.c这些例子的相应的调整方式,在ti论坛上有没有相关的介绍如果更改的资料呢?

  • 这方面个人认为不会给出详细的移植手册,因为这些太简单了。你多看两遍代码就知道怎么用的了。HDVPSS下面不是提供了部分device的driver吗?依葫芦画瓢就行。

    如果答案解决了你的疑惑,请将答案标绿。

  • Hi Robin,有个问题还想请教一下你,又得麻烦你了,谢谢

    目前dvrrdk这套软件对外部设备是通过I2C1总线来访问的,也就是说dvr这套软件运行起来后,是会占用I2C1总线的,而现在我有个实验需要使得linux内核访问I2C1总线,所以需要dvr这套软件启动时,不再占用I2C1总线(如果这样做导致dvrrdk无法采集视频也没有关系,我只需要系统加载了dvrrdk这些vpss、hdcvp等等固件就行,根据我了解到的,在vpss固件加载时,会去做占用I2C1总线的操作),你知道再哪里改成放弃M3对I2C1的控制权吗?

  • 如果M3内不控制I2C,那么你有两种选择:

    1、在M3内使用GPIO模拟I2C;

    2、所有的AD、DA控制全放到A8侧来做。新的SDK中貌似就是这么做的。

  • 你好,我想问下应该如何编译这个例子啊,在哪个文件夹下执行哪条命令?谢谢啦。

  • ./run_make.sh  ti816x-etv  hdvpss 这样编译吧 

  • 感谢你的提问啊!很有借鉴意义。