大家好、
我使用的是 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接口在这两者之间的配置是否不同、但我不确定如何检查。
谢谢