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.

[参考译文] DM8107:修改2通道720p60输入源的 DEMO_VCAP VENC_VDIS_HD -从哪里开始?

Guru**** 2580575 points
Other Parts Discussed in Thread: TVP5158

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/629440/dm8107-modifying-demo_vcap_venc_vdis_hd-for-2-channel-720p60-input-sources---where-to-begin

器件型号:DM8107
主题中讨论的其他器件:TVP5158

您好!

我有一个定制的8107电路板、已经过修改、可接受2个 SDI 输入。 在使用供应商提供的闭源代码脚本后、我勉强决定尝试实施我自己的解决方案、以获得更多功能和更好的控制(以及更少的错误)。

我正在尝试修改 demo_vcap_venc_vdis.c (demo id demo_vCAP_VENC_VDIS_HD)、以支持至少一个当前来自 SDI 的720p60输入。 最后、我需要支持两个、但首先我需要使其正常工作。 我只需要编码到磁盘、对显示或后续解码不感兴趣。 如果可能,可以稍后使用文本刻录。

我正在使用 DVR RDK v 4.0、我知道我的硬件是 NVR 选项。

尝试按如下方式初始化系统:

VSYS_PARAMS_S vsysParams;
   vCAP_PARAMS_S vcapParams;
   VENC_PARAMS_S vencParams;
   VDIS_PARAMS_S vdisParams;

   uint32 useCase、demoId;
   uint32 chid、resolationClass;
   uint16 osdFormat[ALG_LINK_OSD_MAX_CH];

   if (hdDemo)
      demoId = demo_vCAP_VENC_VDIS;
   其他
      demoId = demo_vCAP_VENC_VDIS_HD;
      
   VSYS_params_init (vsysParams);

   useCase = VSYS_USECASE_MULTICHN_HD_VCCP_VENC;
   //useCase = VSYS_USECASE_MULTICHN_Progressive_VCCP_VDIS_VENC_VDEC_D1_AND_CIF;


   vcap_params_init (vcapParams);
   Venc_params_init (vencParams);
   VDIS_params_init (vdisParams);

   {
       gDemo_info.maxVcapChannels = 1;
       gDemo_info.maxVdisChannels = 0;
       gDemo_info.maxVencChannels = 1;
       gDemo_info.maxVdecChannels = 0;

       vcapParams.numChn = 1;
       vcapParams.deviceParams[0].portEnable = true;
   vcapParams.deviceParams[0].portMode = VCAP 模式 BT656_8BIT_YUV422;
   vcapParams.deviceParams[0].dataFormat = VCAP_MULTICHN_OPEN_SINGLE_CHN;
   vcapParams.deviceParams[0].signalType = VS_AUTO_DETECT;
       vencParams.numPrimaryChn = 1;
       vencParams.numSecondaryChn = 0;
       vdisParams.numChannels = 0;
   }

   vsysParams.systemUseCase       = useCase;
   vsysParams.enableCapture       = true;
   vsysParams.enableNsf           = false;
   vsysParams.enableEncode        = true;
   vsysParams.enableDecode        = false;
   vsysParams.enableNullSrc       = false;
   vsysParams.numDeis             = 0;
   {
       vsysParams.numSwm=1             ;
       vsysParams.numDisspays         = 1;
       vsysParams.enableSecondaryOut  = false;/*不用于此用例*/
       vsysParams.enableMjpegEnc      = false;
       vsysParams.enableOsd           = false;
       vsysParams.enableScd           = false;
   }
   if (vsysParams.enableSecondaryOut)
   {
       if (vsysParams.enableMjpegEnc =false)
          gDemo_info.maxVencChannels *= 2;
       其他
          gDemo_info.maxVencChannels *= 3;
   }


   vdisParams.deviceParams[VDIS_DEV_HDMI].resolution  = VSYS_STD_720p_60;
   printf ("---------------- 频道详细信息--- \n");
   printf ("捕获通道=>%d\n"、vcapParams.numChn);
   printf ("Enc channels => Primary %d、Secondary %d\n"、vencParams.numPrimaryChn、vencParams.numSecondaryChn);
   printf ("Disp Channels =>%d\n"、vdisParams.numChannels);
   printf ("------------------------------------------ \n");

   VSYS_INIT (vsysParams);

   vcap_init (vcapParams);
   Venc_init (vencParams);

   {
       DEMO_swMsGenerateLayout (VDIS_DEV_HDMI、0、gDemo_info.maxVdisChannels、
                             DEMO_LAY_MODE_7CH_1CH、
                             vdisParams.PingicParams[0]、true、
                             gDemo_info.Type、
                             VDIS_getSwMsLayoutResolution (VDIS_DEV_HDMI);
       vdisParams.嵌 合 Params[0].userSetDefaultSWMLayout = true;
   }
   VDIS_INIT (vdisParams);

   resolionClass = demo_scd_resolution_class_CIF;

   if (vsysParams.enableScd =true)
   {
       SCD_bitsWriteCreate (useCase、resolationClass);
   }

   /*插入将处理位流交换的应用特定模块*/
   VcapVenc_bitsWriteCreate();

   /*插入将处理视频帧交换的应用特定模块*/
   printf ("VcapVenc_ipcFramesCreate\n");
   VcapVenc_ipcFramesCreate (useCase);
   printf ("VcapVenc_ipcFramesInSetCbInfo\n");
   VcapVenc_ipcFramesInSetCbInfo();

   /*配置显示*/
   VSYS_configureDisplay();

   /*创建链接实例并连接组块*/
   printf ("创建链接实例并连接组件块...\n");
   VSYS_CREATE ();
   printf ("创建了 VSYS。\n");

并在尝试使用以下输出调用 VcapVenc_ipcFramesInSetCbInfo()时遇到崩溃:

-------- 频道详细信息---
捕捉通道=> 1
ENC 通道=>初级1、次级0
Disp CHANNELS => 0
------------------------------------------
 0:系统:正在进行系统通用初始化!!!
 0:系统:正在进行 IPC 初始化!!
 19:系统:CPU [DSP]在此平台上不可用!!
 19:系统:CPU [VIDE-M3] syslink proc ID 是[0]!!!
 19:系统:CPU [VPSS-M3] syslink proc ID 是[1]!!!
 19:系统:CPU [host] syslink proc ID 是[2]!!!
 19:系统:创建 MSGQ 堆[IPC_MSGQ_MSG_HIP_3]...
 21:系统:创建 MSGQ [host_MSGQ]...
 23:系统:创建 MSGQ [host_ack_MSGQ]...
 25:系统:打开 MSGQ [VIDE-M3_MSGQ]...
 25:系统:打开 MSGQ [VPSS-M3_MSGQ]...
 26:系统:通知注册到[VIDEO-M3]第0行,事件15...
 27:系统:通知寄存器到[VPSS-M3]行0,事件15...
 28:系统:IPC 初始化完成!!
 29:系统:在区域0中创建 ListMP [HOST_IPC_OUT_24]...
 31:系统:在区域0中创建 ListMP [HOST_IPC_IN_24]...
 32:系统:ListElem Shared Addr = 0x40778300
 33:系统:在区域0中创建 ListMP [HOST_IPC_OUT_25]...
 35:系统:在区域0中创建 ListMP [HOST_IPC_IN_25]...
 37:系统:ListElem Shared Addr = 0x407d3f80
 39:系统:在区域0中创建 ListMP [HOST_IPC_OUT_19]...
 40:系统:在区域0中创建 ListMP [HOST_IPC_IN_19]...
 42:系统:ListElem Shared Addr = 0x4082fc00
 43:系统:在区域0中创建 ListMP [HOST_IPC_OUT_20]...
 45:系统:在区域0中创建 ListMP [HOST_IPC_IN_20]...
 47:系统:ListElem Shared Addr = 0x4087d780
 48:系统:在区域0中创建 ListMP [HOST_IPC_OUT_21]...
 50:系统:在区域0中创建 ListMP [HOST_IPC_IN_21]...
 51:系统:ListElem Shared Addr = 0x408cb300
 55:系统:系统通用初始化完成!!!
 [host] HDMI 控制器:正在初始化
 [host] HDMI Ctrl :已初始化
 
 启用文件写入(是- y /否- n):n
 
 文件写入已禁用!!!
 
VcapVenc_ipcFramesCreate

 [主机] MCFW_IPCFRAMES:VcapVenc_ipcFramesSendRecvFxn:entered...VcapVenc_ipcFramesInSetCbInfo
 创建链接实例并连接组块...
[主机]
ThreadName:SystemLink_tskMain_3000003f、ThreadID:1820
JTW 进入 SystemLink_tskMain


9056:!!从内核[VPSS-M3]关闭!!!
SystemLink_CopySlaveCoreExceptionContext:120
[0x3fe2d000:40960]的 mmap
mmap virt address:0x40087750
总线错误

我知道这里有很多问题、但希望获得任何有关其他演示代码的帮助/片段/说明。

也许我可以尝试更新的 RDK、但我还没有找到网站上的任何链接。

提前感谢、

Dmitry

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    有关 DVRRDK 支持、请查看此主题:
    e2e.ti.com/.../426680

    您可以在 e2e 中搜索类似的问题。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Margarita、

    您链接的支持主题指出:"TI 已完成 DM816x 和 DM64x 器件的 RDK 和 EZSDK 软件开发。 TI 不再计划更新此软件以进行错误修复或功能增强。"

    由于地理位置和其他安排的结合、从我们获得硬件的合作伙伴那里获得支持变得非常复杂、不切实际。

    我是否仍能在此处获得支持、或者我是否打算了解该产品太旧且不受支持?

    我的案例与 e2e.ti.com/.../959972中描述的案例类似

    如果无法向我指出更一般的策略、我有几个具体的问题要问:

    1) 1)我们的硬件设置已修改为从 SDI 接收输入、而不是从 HDMI 或复合接口接收输入。 就 VCAP 输入标准而言、这意味着什么?

    我可以看到在 DVR-RDK/DVR_RDK/mcfw/src_Linux/mcfw_API/usecases/ti816x/multich_HD_SDI_DVR.c 中使用 SDI

    代码似乎查询两个外部器件(tw2968、TVP5158)以获取输入、而不是在 multifh_hdsdidvr_get_video_decoder_device_id ()方法中指定一个排序常量。 这对应 于 multify_HD_SDI_DVR 中其他地方使用的 vipInstId 的 system_captiv_INST_INST_VIP1_Porta 或 system_captive_INST_SC5_WB2值。 用例?

    2) 2)我知道 multifh_HD_SDI_DVR 用例适用于 ti816x 平台、但我目前只需要它即可接受一个720p60信号。 是否可以通过删除额外的4个 SD 编码链接、预编码合并链接并 将数据直接传递到 EncodeLink 来修改此用例? 我不确定我是否需要解码和显示步骤(我只需要 A8主机上的编码数据、以便可以将其保存到 SATA 磁盘)。

    无论如何、我会向这个总方向挖掘、但如果有人确认这并不是完全错误、我将不胜感激。

    提前感谢、

    Dmitry

    [引用用户="Margarita Gashova">您好、

    有关 DVRRDK 支持、请查看此主题:
    e2e.ti.com/.../426680

    您可以在 e2e 中搜索类似的问题。

    BR
    玛格丽塔

    [/报价]