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.

[参考译文] TDA2HF:如何在用例运行时更改 VPE 参数?

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1046802/tda2hf-how-to-change-vpe-params-when-usecase-is-running

器件型号:TDA2HF

在 VISION_SDK_03_08中、我希望使用 VPE_LINK 从 CAPTURE_LINK 缩放和裁剪数据。

当我设置 VPE_LINK VpeLink_ChannelParams 时,它会达到所需的效果。

现在、我想在  用例运行时将 scCropCfg 参数更改为显示不同区域。

我在 e2e 网站上浏览,并有一个相关的问题:

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/894080/tda2evm5777-vpe-runtime-control-from-linux-side/3306051?tisearch=e2e-sitesearch&keymatch=vision%20vpe%20runtime#3306051

我在 vpeLink_tsk.c:VpeLink_tskMain 中添加了一些 cmd

case VPE_LINK_CMD_SET_PORT1:
                        Vps_printf("wwlog:vpe get port1(0,0,1280x800)\n");
                           
                            for (outId = 0U; outId < VPE_LINK_OUT_QUE_ID_MAX; outId++)
                            {
                                pObj->createArgs.chParams[0].scCropCfg.cropStartX=0;
                                pObj->createArgs.chParams[0].scCropCfg.cropStartY=0;
                                pObj->createArgs.chParams[0].scCropCfg.cropWidth=1280;
                                pObj->createArgs.chParams[0].scCropCfg.cropHeight=800;
                            }
                            VpeLink_drvUpdateScCropPrm(pObj,0,TRUE);
                            Utils_tskAckOrFreeMsg(pMsg, status);
                             Vps_printf("wwlog: vpe set flag %d\n",wwFlag); 
                             wwFlag=TRUE;
                            break; 
                    case VPE_LINK_CMD_SET_PORT2:
                        Vps_printf("wwlog:vpe get port2(0,0,800x400)\n");
                            
                            for (outId = 0U; outId < VPE_LINK_OUT_QUE_ID_MAX; outId++)
                            {
                                pObj->createArgs.chParams[0].scCropCfg.cropStartX=0;
                                pObj->createArgs.chParams[0].scCropCfg.cropStartY=0;
                                pObj->createArgs.chParams[0].scCropCfg.cropWidth=800;
                                pObj->createArgs.chParams[0].scCropCfg.cropHeight=400;
                            }
                            VpeLink_drvUpdateScCropPrm(pObj,0,TRUE);
                            Utils_tskAckOrFreeMsg(pMsg, status);
                            Vps_printf("wwlog: vpe set flag %d\n",wwFlag);
                            wwFlag=TRUE;
                            break; 
                    case VPE_LINK_CMD_SET_PORT3:
                    Vps_printf("wwlog:vpe get port3(500,400,800*400)\n");
                           
                            for (outId = 0U; outId < VPE_LINK_OUT_QUE_ID_MAX; outId++)
                            {
                                pObj->createArgs.chParams[0].scCropCfg.cropStartX=500;
                                pObj->createArgs.chParams[0].scCropCfg.cropStartY=400;
                                pObj->createArgs.chParams[0].scCropCfg.cropWidth=800;
                                pObj->createArgs.chParams[0].scCropCfg.cropHeight=400;
                            }
                            VpeLink_drvUpdateScCropPrm(pObj,0,TRUE);
                            Utils_tskAckOrFreeMsg(pMsg, status);     
                            Vps_printf("wwlog: vpe set flag %d\n",wwFlag);
                            wwFlag=TRUE;
                            break;  

n`t 代码不起作用,请告诉我  在用例运行时如何更改 VPE 参数。

此致

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

    唐浩您好、

    从上面的代码看来、控制命令的执行是正确的。 您是否从用例调用此控制命令? 您能否放入断点和 updateCropPrms API、看看它是否被调用? 或者可以使用 VPS_printf 进行一些调试打印、以查看是否真正调用了控制命令?  

    此致、

    Brijesh

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

    感谢您的回复。

    我认为您的意思是   VpeLink_drvUpdateScCropPrm,而不 是 updateCropPrms 

    我添加了打印信息, 并调用了经过日志验证的 API。

    Int32 VpeLink_drvUpdateScCropPrm(VpeLink_Obj * pObj, UInt32 chId,
                                     Bool rtPrmUpdate)
    {
        VpeLink_ChObj *pChObj;
        System_LinkChInfo *pInQueChInfo;
        UInt32 outId;
        VpeLink_ChannelParams *chParams;
        System_CropConfig *scCropCfg;
    
        pChObj = &pObj->chObj[chId];
        pInQueChInfo = &pObj->inQueInfo.chInfo[chId];
        chParams = &pObj->createArgs.chParams[chId];
    
        for (outId = 0U; outId < VPE_LINK_OUT_QUE_ID_MAX; outId++)
        {
            scCropCfg = &chParams->scCropCfg;
    
            if ((scCropCfg->cropStartX != 0U) || (!rtPrmUpdate))
            {
                pChObj->scCropCfg[outId].cropStartX = scCropCfg->cropStartX;
            }
            else
            {
                pChObj->scCropCfg[outId].cropStartX = pInQueChInfo->startX;
            }
    
            if ((scCropCfg->cropWidth != 0U) || (!rtPrmUpdate))
            {
                pChObj->scCropCfg[outId].cropWidth = scCropCfg->cropWidth;
            }
            else
            {
                pChObj->scCropCfg[outId].cropWidth = pInQueChInfo->width;
            }
    
            if ((scCropCfg->cropStartY != 0U) || (!rtPrmUpdate))
            {
                pChObj->scCropCfg[outId].cropStartY = scCropCfg->cropStartY;
            }
            else
            {
                pChObj->scCropCfg[outId].cropStartY = pInQueChInfo->startY;
            }
    
            if ((scCropCfg->cropHeight != 0U) || (!rtPrmUpdate))
            {
                pChObj->scCropCfg[outId].cropHeight = scCropCfg->cropHeight;
                Vps_printf("wwlog:scCropCfg->cropHeight set to %d\n",scCropCfg->cropHeight);
            }
            else
            {
                pChObj->scCropCfg[outId].cropHeight = pInQueChInfo->height;
            }
    
            if ((System_Link_Ch_Info_Get_Flag_Scan_Format(pInQueChInfo->flags) ==
                                                         SYSTEM_SF_INTERLACED) &&
                (pObj->createArgs.chParams[chId].deiCfg.bypass != 0U))
            {
                pChObj->scCropCfg[outId].cropStartY *= 2U;
                pChObj->scCropCfg[outId].cropHeight *= 2U;
            }
    
            if (rtPrmUpdate)
            {
                pChObj->vpeRtPrm.scCropCfg = &pChObj->scCropCfg[outId];
            }
        }
    
        return SYSTEM_LINK_STATUS_SOK;
    }

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

    您好、hao、

    查看 VPE 代码、它在 VpeLink_drvMakeFrameLists API 中设置 RT 参数、如下所示。

    pInFram->perFrameCfg =&pChObj->vpeRtPrm;

    仅 当 chRtOutInfoUpdate 标志设置为 true 时才会设置此值。 但在  VpeLink_drvUpdateScCropPrm API 中、FLAG 未设置为 true。 因此、这就是为什么不更新裁剪参数的原因。

    调用 VpeLink_drvUpdateScCropPrm 后、是否可以 尝试将此标志设置为 true?

    此致、

    Brijesh

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

    我发现 flag 只用作局部变量,所以我跳过它,它起作用了。  

    感谢您的回复。

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

    感谢您的更新、关闭此主题。