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.

[参考译文] DM385:如何将捕获的帧从 VPSS 获取到 A8主机

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/607994/dm385-how-to-get-captured-frame-from-vpss-to-a8-host

器件型号:DM385

大家好、

我使用的是 ADV7280来捕获模拟视频、并使用 VIP0端口 A (8位)来捕获模拟视频。 目前、我在加载 VPSS 固件之前在用户空间中设置了 ADV7280。

我可以将 VPSS 固件配置为创建 Capture -> Null 链接、一旦创建并启动这些链接、我就可以看到、由于定期打印输出和捕获状态、我们将接收视频数据。 我在 src_bios6/main_app/src/main_m3vps.c 文件中配置、创建和启动这些链接 代码基本上就是这样(代码的简单编辑):

uint32 cameraId;
uint32 captureId;

CaptureLink_CreateParams capturePrm;
NullLink_CreateParams nullPrm;
CaptureLink_VipInstParams * pCaptureInstPrm;
CaptureLink_OutParams *pCaptureOutPrm;




System_linkControl (system_link_ID_M3VPSS、
System_M3VPSS_CMD_RESET_VIDEO 器件、
null、
0、
true);

System_linkControl (system_link_ID_M3VPSS、
System_common_CMD_SET_CH2IVAHD_MAP_TBL、
&systemVid_encDecIvaChMapTbl、
sizeof (SystemVideo_Ivahd2ChMap_Tbl)、
True);


/*链接 ID */
CaptureId = system_link_ID_capture;
nullId = system_vpss_link_ID_NULL_0;

//正交链路参数*/
CaptureLink_CreateParams_Init (&capurePrm);
CapturePrm.numVipInst= 1;
capPrm.tilerEnable= false;
CapturePrm.numBufsPerCh= 10;capurePrm.numQueu.ParnueLink
= 0];capurePrm.outId = 0[nullrum.Params.outId

pCaptureInstPrm =&capturePrm.vipInst[0];
pCaptureInstPrm->vipInstId = system_capture_INST_VIP0_Porta;
pCaptureInstPrm->videoDecoderId = system_device_VID_DEC_dummy;
pCaptureInstPrm->标准 = SYSTEM_STD_D1;
pCaptureInstPrm-> numOutput = 1;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;

pCaptureOutPrm =&pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV420SP_UV;
pCaptureOutPrm->scEnable = false;
pCaptureOutPrm->scOutWidth = 720;//仅在 pCaptureOutPrm->scEnable 为 true
pCaptureOutPrm->scOutHeight 时使用 = 240;//仅在 pCaptureOutPrm->scEnable 为 true
pCaptureOutPrm->outQueId 时使用 = 0;
pCaptureOutPrm->frameSkipMask = 0;


//
*捕获 NULL 链接
*/
nullPrm.numInQue = 1;
nullPrm.inQueParams[0].prevLinkId = CaptureId;
nullPrm.inQueParams[0].prevLinkQueId = 0;



VPS_printf ("捕获链接创建时间-%u ms\r\n"、Utils_getCurTimeInMsec ());

System_linkCreate (CaptureId、&Prm、CapturePrm);

vps_printf ("其他链接创建时间-%u ms\r\n"、Utils_getCurTimeInMsec());

vps_printf ("零链接创建时间-%u ms\r\n"、Utils_getCurTimeInMsec());

System_linkCreate (nullId、&nullPrm、sizeof (nullPrm));

vps_printf ("零链接创建时间-%u ms\r\n"、Utils_getCurTimeInMsec());


System_linkStart( CaptureId );

加载后、我会定期打印、输出有关捕获的统计信息。 如果我通过 I2C 命令禁用了 ADV7280芯片、则统计信息会指示帧不再进入、如果我重新启用芯片、统计信息会指示帧现在进入。

目前、我们的系统在主机侧以自定义用例设置所有 MCFW 链路。 我正在尝试在主机上的自定义用例下设置捕获和空链接、但我看不到正在捕获的任何帧。 这是来自主机端的代码。 我已编辑此代码段以删除与非捕获相关的代码:

静态 uint32_t G_CAP_id;
静态 uint32_t g_null;



CaptureLink_CreateParams CapturePrm;
NullLink_CreateParams nullPrm;
CaptureLink_VipInstParams *pCaptureInstPrm;
CaptureLink_OutParams *pCaptureOutPrm;



/*
*配置捕获路径
*
osa_printf ("\n***** 已输入“Capture (捕获)”->“Encode (编码)”->“Out (A8)”**** \n");

vcapDecParams.videoIfMode = DEVICE_CAPT_VIDEO IF_MODE_8BIT;
vcapDecParams.video/DataFormat = VF_YUV422P;
vcapDecParams.standard = VSYS_STD_AUTO_DETECT;
vcapDecParams.video/CaptureMode = DEVICE_CAPT_VIDEO CAPTURE_MODE_SINGLE_CH_NON_MUX_INEDGE_SYNC;
vcapDecParams.videoSystem = DEVICE_VIDEO 解码器视频系统自动检测;
vcapDecParams.videoCropEnable =错误;

vcap_configVideoDecoder (&vcapDecParams,1);



/*
*设置链接 ID
*
G_CAP_ID = system_link_ID_capture;
g_null = SYSTEM_VPSS_LINK_ID_NULL_0;


/*
*设置 CaptureLink
*
CaptureLink_CreateParams_Init (&capturePrm);
CapturePrm.numVipInst = 1;
CapturePrm.tilerEnable =错误;
CapturePrm.numBufsPerCh = 10;
CapturePrm.outQueParams[0].nextLink = g_null_id;

pCaptureInstPrm = capturePrm.vipInst[0];
pCaptureInstPrm->vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA;
pCaptureInstPrm->videoDecoderId = system_device_VID_DEC_虚设;
pCaptureInstPrm->标准 = SYSTEM_STD_D1;
pCaptureInstPrm-> numOutput = 1;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;

pCaptureOutPrm =&pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV420SP_UV;
pCaptureOutPrm->scEnable =错误;
pCaptureOutPrm->scOutWidth = 720; //仅在 pCaptureOutPrm->scEnable 为 true 时使用
pCaptureOutPrm->scOutHeight = 240; //仅在 pCaptureOutPrm->scEnable 为 true 时使用
pCaptureOutPrm->outQueId = 0;
pCaptureOutPrm->frameSkipMask = 0;

nullPrm.numInQue = 1;
nullPrm.inQueParams[0].prevLinkId = g_cap_id;
nullPrm.inQueParams[0].prevLinkQueId = 0;


/*
*重置 M3VPSS 并设置编码/解码通道映射
*
System_linkControl (system_link_ID_M3VPSS、system_M3VPSS_CMD_RESET_VIDEO_devices、NULL、0、true);

System_linkControl (system_link_ID_M3VPSS、
System_common_CMD_SET_CH2IVAHD_MAP_TBL、
&systemVid_encDecIvaChMapTbl、
sizeof (SystemVideo_Ivahd2ChMap_Tbl)、true);



//创建
OSA_printf ("########### 创建捕获链接################ \n");
System_linkCreate (g_cap_id、 capturePrm (&C)、 sizeof (capturePrm));
System_linkCreate (g_null_id、 空 Prm (&N)、 sizeof (nullPrm));


System_linkStart (g_cap_id);

注意:主机示例上的 System_linkStart 通常会在我从不同的代码部分调用 VCAP_START 时发生、但在本示例中、我将调用它。

有人能告诉我为什么当我从 VPSS 启动捕获时、我似乎没有任何问题地捕获帧、而当我从 A8主机启动它时、我似乎没有获得任何帧捕获? 我想知道 VIP0接口在这两者之间的配置是否不同、但我不确定如何检查。

谢谢

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

    我想我已经回答了自己的问题。 此调用看起来像是"vcap_configVideoDecoder (&vcapDecParams,1);"正在重置 ADV7280,因此很显然,如果 有人需要引用,我们不会获得上述代码应用于捕获到空链接的帧。