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.

8168 Display 图像格式

请问TI工程师:

在Cap+Dis的link 链中,Capture的输出格式pCaptureOutPrm->dataFormat只能是SYSTEM_DF_YUV422I_YUYV 么?

我需要输出的422SP的格式,DSP方便处理,然后Display出来。只有这一种格式可以 captures+display 正常

我修改为SYSTEM_DF_YUV422SP_UV系列,都是报错如下:

2763:!!!SLAVE CORE [VPSS-M3] DOWN!!!

SystemLink_copySlaveCoreExceptionContext:146

mmap of [0xbe9e0000:36864]

mmap virt addresss:0x400c7000

munmap of [0x400c7000:36864]

SystemLink_copySlaveCoreExceptionContext:153

SystemLink_handleSlaveCoreException:173

SystemLink_handleSlaveCoreException:178

  [m3vpss ]  15762: CAPTURE: VIP0 PortA capture mode is [16-bit, Non-mux Embedded Sync] !!!

  [m3vpss ]  15763: Assertion @ Line: 779 in links_m3vpss/capture/captureLink_drv.c: pInst->captureVipHandle != NULL : failed !!!

附录部分代码: 

Void Chains_doubleChCapDis(Chains_Ctrl *chainsCfg)

{

/*********************************************************************************/

 

    for(i=0; i<capturePrm.numVipInst; i++)

    {

        vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA + 2*i;

        pCaptureInstPrm                     = &capturePrm.vipInst[i];

        pCaptureInstPrm->vipInstId          = vipInstId%SYSTEM_CAPTURE_INST_MAX;

        pCaptureInstPrm->videoDecoderId     = SYSTEM_DEVICE_VID_DEC_SII9233A_DRV;

        pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;

        pCaptureInstPrm->standard           = chainsCfg->displayRes[i];

        pCaptureInstPrm->numOutput          = 1;

        pCaptureInstPrm->numChPerOutput     = 1;

        pCaptureInstPrm->frameCaptureMode   = FALSE;

        pCaptureInstPrm->fieldsMerged       = FALSE;

 

        pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];

        pCaptureOutPrm->dataFormat          = SYSTEM_DF_YUV422I_YUYV;

        pCaptureOutPrm->scEnable            = FALSE;

        pCaptureOutPrm->scOutWidth          = chainsCfg->channelConf[i].width;

        pCaptureOutPrm->scOutHeight         = chainsCfg->channelConf[i].height;

        pCaptureOutPrm->outQueId            = i;

    }

 

    capturePrm.outQueParams[0].nextLink     = displayId[0];

 

    System_linkCreate(captureId, &capturePrm, sizeof(capturePrm));

    chainsCfg->displayRes[0] = capturePrm.vipInst[0].standard;

 

    for (i=0; i<1; i++) {

        displayPrm[i].displayRes                   = chainsCfg->displayRes[i];

        displayPrm[i].numInputQueues               = 1;

        displayPrm[i].activeQueue                  = 0;

        displayPrm[i].inQueParams[0].prevLinkId    = captureId;

        displayPrm[i].inQueParams[0].prevLinkQueId = i;

        displayPrm[i].forceFieldSeparatedInputMode = FALSE;

    }

 

    Chains_displayCtrlInit(chainsCfg->displayRes);

    System_linkCreate(displayId[0], &displayPrm[0], sizeof(displayPrm[0]));

 

    Chains_memPrintHeapStatus();

/*********************************************************************************/

 

}

  • 你好

    Amob 说:
    在Cap+Dis的link 链中,Capture的输出格式pCaptureOutPrm->dataFormat只能是SYSTEM_DF_YUV422I_YUYV 么?

    不是,可以支持yuv420_sp和其他的格式

    Amob 说:
    我需要输出的422SP的格式,DSP方便处理,然后Display出来。

    我刚才查了hdvpss手册,里面是可以支持yuv422sp的格式的(yuv422sp输出,本人没有亲测,手册中支持)

    Amob 说:
    我修改为SYSTEM_DF_YUV422SP_UV系列,都是报错如下:

    这个错误,你可以到DVRRDK_04.00.00.03/dvr_rdk/mcfw/src_bios6/links_m3vpss/capture,调试一下代码,查一下报错的原因

     

    请问,你现在是在什么版本的SDk中开发?

     

  • Ternence,非常感谢您对问题的关注,

    1.

    Capture的输出格式pCaptureOutPrm->dataFormat是可以支持yuv420_sp和其他的格式,但前提是不需要display。因为我们做的视频存储就是capture输出yuv422SP的

    格式存储的。

    2.只要是有display的link,我看了例程,所有的capture都是输出SYSTEM_DF_YUV422I_YUYV格式,其余格式我基本都试过,不行。

    YUV这样的交替存储,对于我后续的DSP人脸识别处理很麻烦,我还需要重新排序,如果单纯的存储不用display也是没有问题的。

    3.我用的dvrrdk3.0版本。 再次感谢您的帮助!!

  • 你好;

           1、display link 是可以支持 除yuv422I_yuyv之外的其他格式的,需要修改一下display的 displayInstId 路径;

               (在rdk3.0 中需要到mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c中修改,如果在rdk4.0 中已经把接口留到外面了,可以在Usecase中直接配置)

            default:
            case SYSTEM_LINK_ID_DISPLAY_0:
                pObj->displayInstId = VPS_DISP_INST_BP0;
                pFormat->scanFormat = FVID2_SF_PROGRESSIVE;
                break;
            case SYSTEM_LINK_ID_DISPLAY_1:
                pObj->displayInstId = VPS_DISP_INST_BP1;
                pFormat->scanFormat = FVID2_SF_PROGRESSIVE;
                break;
            case SYSTEM_LINK_ID_DISPLAY_2:
                pObj->displayInstId = VPS_DISP_INST_SEC1;
                pFormat->scanFormat = FVID2_SF_INTERLACED;
                break;

     

              2、如果是因为display的问题,你可以通过link来做格式转换,输出yuv422I给display(sc5,或者swms link);

     

  • 在rdk3.0   mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c中

    找到了

    default:
            case SYSTEM_LINK_ID_DISPLAY_0:
                pObj->displayInstId = VPS_DISP_INST_BP0;
                pFormat->scanFormat = FVID2_SF_PROGRESSIVE;
                break;
            case SYSTEM_LINK_ID_DISPLAY_1:
                pObj->displayInstId = VPS_DISP_INST_BP1;
                pFormat->scanFormat = FVID2_SF_PROGRESSIVE;
                break;
            case SYSTEM_LINK_ID_DISPLAY_2:
                pObj->displayInstId = VPS_DISP_INST_SEC1;
                pFormat->scanFormat = FVID2_SF_INTERLACED;
                break;
    
    
    如何修改呢?
    
    
    2.如果是想采集到的图像,让DSP来处理Y,UV部分,然后再display出来,您有什么样的建议?
       我目前是想在OSD的例程上去改,准备加一个Display link,然后之前加上swms link来转化为yuv422I格式,您觉得如何?
    caps link -- nsf link-- vpssout -- swms link---vpssin link -- display link
     |
     processlink-- DspIn link -- osd link 
  • 非常感谢,我已经解决了格式的问题,您的建议很管用,谢谢~