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.

OMX DEI component concatenation

Hello TI experts,

I am trying to create an OMX chain that will include capture->DEI(scale down)->DEI(scale up)->display.
Capture is done in 420 format, DEI(scale down) input and outputs are in 420 format, scaling down is in x1/4 in both width and height.
DEI (scale up) input is in 420 format and scale out outputs are in 422 format, scaling up is in x4, display is in 422 in original size.
Both second output ports of the two DEI's are not connected and i know how to use DEI with second output port not connected see http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/t/153532.aspx#556116
The OMX chain arrive to execute state, but it stuck, i am printing every component ConnInConnOut state for debugging and i see that there is only 1 CbEmptyBufferDone from the display and 1 ProcessPipeCmdFTB for the DEI(scale up) all other ConnInConnOut states of the other components were OK untill the OMX chain stuck, so i guess there is some kind of blocking in the display or in the DEI(scale up).

My questions are as follows:

1. is it possible to concatenate 2 OMX DEI components(or more)? 
2. if it is possible why is my program stuck? 

Can anyone please answer?

Thanks,
Gabi 

 

 

 

  • This issue is important for me too, can anybody answer this question please? 

  • Gabi / Alla,

    How many buffers you have allocated for display ? You can try using SC5 instead fo DEI->DEI to isolate the issue. On DM8168 there are two DEIs DEIH and DEIM, so you can try using these as well.

    Regards

    Vimal

  • Hi VImal,

    Thanks for your reply, i am using DEIH because i am working with HD input, i have used 5 buffers for the display.
    I am using DEI because i intend to use capture in 422 format and DEI can scale up/down in 422 format and SC5 can't.

    Is it possible at all to use 2 DEIH in concatenation?

    Gabi 

  • Gabi,

    I assume you have created two handle for DEIH. DEI driver support max 4 instances, so It should be possible to use them in tandem. Also DEIH and DEIM both can handle HD 420 inputs. So you can use DEIM as well. SC5 can take 422 or 420  input, o/p is however always 422.

    Regards

    Vimal

  • Hi Vimal,

    Now that we know that it is possible to connect two DEIH in tandem, and we know that it should be possible to create the following OMX chain:

    capture(420)->DEI(out in 420)->DEI(out in 422)->display,

    We also know that i have used 5 buffers for display.
    Why is my OMX example stuck?

    Can you please help me debug this example?

    Thanks,
    Gabi 

  • Gabi,

    Probably we will need to debug one step at a time. Have you tried only one DEIH(scale down) and get it functional in capture-DEI-Display chain ? If that works, we can try same single DEI chain with (scale up) parameters, to make sure parameters are right and it works. Now we can try DEI-H and DEI-M, as these will two difefrent component, to try if chain works, then we can try using same DEI(H or M) in tandem.

    Also please see detail o/p from media controller by running

    ./loggerSMDump.out 0x9e400000 0x100000 video/vpss/all

    Regards

    Vimal

     

  • Hi Vimal,

    I took your advice and replaced one of the DEIH with DEIM and the example is working OK now, i tried to use two DEIM and it is also working OK. 2 DEIH continue to stuck.
    Is there any known problem with DEIH? 

    Gabi

  • Gabi,

    There is no known issue with above configuration (atleast I am not aware of any). OMX component is same for both drivers. I will check internally if any such limitation exists. Meanwhile, It will help if you could pass on DEI-H parameters, to see if there is any limitation.

    Regards

    Vimal

  • Hi Vimal,

    Please see below the parameters for DEI scale down and DEI scale up.

    Gabi

    ////////////////////////////////////////////////////////////////////////////////
    /* ========================================================================== */
    /**
    * IL_ClientSetDeiScDownParams() : Function to fill the port definition
    * structures and call the Set_Parameter function on to the DEI
    * Component
    *
    * @param pAppData : Pointer to the application data
    *
    * @return
    * OMX_ErrorNone = Successful
    *
    * Other_value = Failed (Error code is returned)
    *
    */
    /* ========================================================================== */

    OMX_ERRORTYPE IL_ClientSetDeiScDownParams (IL_Client *pAppData)
    {
    OMX_ERRORTYPE eError = OMX_ErrorNone;
    OMX_PARAM_BUFFER_MEMORYTYPE memTypeCfg;
    OMX_PARAM_PORTDEFINITIONTYPE paramPort;
    OMX_PARAM_VFPC_NUMCHANNELPERHANDLE sNumChPerHandle;
    OMX_CONFIG_ALG_ENABLE algEnable;
    OMX_CONFIG_VIDCHANNEL_RESOLUTION chResolution;
    OMX_CONFIG_SUBSAMPLING_FACTOR sSubSamplinginfo;

    OMX_INIT_PARAM (&memTypeCfg);
    memTypeCfg.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;
    memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
    eError = OMX_SetParameter (pAppData->pDeiScDownHandle, OMX_TI_IndexParamBuffMemType,
    &memTypeCfg);

    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set memory Type at input port\n");
    }

    /* Setting Memory type at output port to Raw Memory */
    OMX_INIT_PARAM (&memTypeCfg);
    memTypeCfg.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
    memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
    eError = OMX_SetParameter (pAppData->pDeiScDownHandle, OMX_TI_IndexParamBuffMemType,
    &memTypeCfg);

    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set memory Type at output port\n");
    }

    OMX_INIT_PARAM (&memTypeCfg);
    memTypeCfg.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
    memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
    eError = OMX_SetParameter (pAppData->pDeiScDownHandle, OMX_TI_IndexParamBuffMemType,
    &memTypeCfg);

    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set memory Type at output port\n");
    }

    /* set input height/width and color format */
    OMX_INIT_PARAM (&paramPort);
    paramPort.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;

    OMX_GetParameter (pAppData->pDeiScDownHandle, OMX_IndexParamPortDefinition,
    &paramPort);
    paramPort.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;
    paramPort.format.video.nFrameWidth = pAppData->nWidth;
    paramPort.format.video.nFrameHeight = pAppData->nHeight;

    paramPort.format.video.nStride = pAppData->nWidth;
    paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
    paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
    paramPort.nBufferSize =
    (paramPort.format.video.nStride * pAppData->nHeight * 3) >> 1;
    paramPort.nBufferAlignment = 0;
    paramPort.bBuffersContiguous = 0;
    paramPort.nBufferCountActual = IL_CLIENT_DEISCDOWN_INPUT_BUFFER_COUNT;
    printf ("set input port params (width = %u, height = %u) \n",
    pAppData->nWidth, pAppData->nHeight);
    OMX_SetParameter (pAppData->pDeiScDownHandle, OMX_IndexParamPortDefinition,
    &paramPort);

    /* set output height/width and color format */
    OMX_INIT_PARAM (&paramPort);
    paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
    OMX_GetParameter (pAppData->pDeiScDownHandle, OMX_IndexParamPortDefinition,
    &paramPort);

    paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
    paramPort.format.video.nFrameWidth = (pAppData->nWidth>>2);
    paramPort.format.video.nFrameHeight = (pAppData->nHeight>>2);
    paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
    // paramPort.format.video.eColorFormat = OMX_COLOR_FormatYCbYCr;
    // paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
    paramPort.format.video.eColorFormat = OMX_COLOR_FormatYCbYCr;
    paramPort.nBufferAlignment = 0;
    paramPort.nBufferCountActual = IL_CLIENT_DEISCDOWN_OUTPUT_BUFFER_COUNT;
    /* This port is connected to display and provides 422 o/p */
    // paramPort.format.video.nStride = pAppData->nWidth * 2;
    // paramPort.format.video.nStride = (pAppData->nWidth>>2);
    paramPort.format.video.nStride = ((2*pAppData->nWidth)>>2);

    // paramPort.nBufferSize = paramPort.format.video.nStride *
    // paramPort.format.video.nFrameHeight;
    // paramPort.nBufferSize =
    // (paramPort.format.video.nStride * (pAppData->nHeight>>2) * 3) >> 1;

    paramPort.nBufferSize =
    (paramPort.format.video.nStride * (pAppData->nHeight>>2) );


    printf ("set output port params (width = %d, height = %d)\n", pAppData->nWidth,
    pAppData->nHeight);

    OMX_SetParameter (pAppData->pDeiScDownHandle, OMX_IndexParamPortDefinition,
    &paramPort);

    OMX_INIT_PARAM (&paramPort);
    paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
    OMX_GetParameter (pAppData->pDeiScDownHandle, OMX_IndexParamPortDefinition,
    &paramPort);

    paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
    paramPort.format.video.nFrameWidth = pAppData->nWidth;
    paramPort.format.video.nFrameHeight = pAppData->nHeight;
    paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
    paramPort.nBufferAlignment = 0;
    paramPort.nBufferCountActual = IL_CLIENT_ENC_INPUT_BUFFER_COUNT;
    paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
    paramPort.format.video.nStride = pAppData->nWidth;

    /* This port is connected to encoder and provides 420 o/p */
    paramPort.nBufferSize =
    (paramPort.format.video.nStride * paramPort.format.video.nFrameHeight *
    3) >> 1;

    printf ("set output port params (width = %d, height = %d)\n", pAppData->nWidth,
    pAppData->nHeight);

    OMX_SetParameter (pAppData->pDeiScDownHandle, OMX_IndexParamPortDefinition,
    &paramPort);

    /* set number of channles */
    printf ("set number of channels\n");

    OMX_INIT_PARAM (&sNumChPerHandle);
    sNumChPerHandle.nNumChannelsPerHandle = 1;
    eError = OMX_SetParameter (pAppData->pDeiScDownHandle,
    (OMX_INDEXTYPE)
    OMX_TI_IndexParamVFPCNumChPerHandle,
    &sNumChPerHandle);
    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set num of channels\n");
    }

    /* set VFPC input and output resolution information */
    printf ("set input resolution\n");

    OMX_INIT_PARAM (&chResolution);
    chResolution.Frm0Width = pAppData->nWidth;
    chResolution.Frm0Height = pAppData->nHeight;
    chResolution.Frm0Pitch = pAppData->nWidth;
    chResolution.Frm1Width = 0;
    chResolution.Frm1Height = 0;
    chResolution.Frm1Pitch = 0;
    chResolution.FrmStartX = 0;
    chResolution.FrmStartY = 0;
    chResolution.FrmCropWidth = pAppData->nWidth;
    chResolution.FrmCropHeight = pAppData->nHeight;
    chResolution.eDir = OMX_DirInput;
    chResolution.nChId = 0;

    eError = OMX_SetConfig (pAppData->pDeiScDownHandle,
    (OMX_INDEXTYPE) OMX_TI_IndexConfigVidChResolution,
    &chResolution);
    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set input channel resolution\n");
    }

    printf ("set output resolution\n");
    OMX_INIT_PARAM (&chResolution);
    /* first output to display */
    chResolution.Frm0Width = (pAppData->nWidth>>2);
    chResolution.Frm0Height = (pAppData->nHeight>>2);
    // chResolution.Frm0Pitch = pAppData->nWidth * 2;
    chResolution.Frm0Pitch = 2*(pAppData->nWidth>>2);
    /* second output to encode */
    chResolution.Frm1Width = pAppData->nWidth;
    chResolution.Frm1Height = pAppData->nHeight;
    chResolution.Frm1Pitch = pAppData->nWidth;
    chResolution.FrmStartX = 0;
    chResolution.FrmStartY = 0;
    chResolution.FrmCropWidth = 0;
    chResolution.FrmCropHeight = 0;
    chResolution.eDir = OMX_DirOutput;
    chResolution.nChId = 0;

    eError = OMX_SetConfig (pAppData->pDeiScDownHandle,
    (OMX_INDEXTYPE) OMX_TI_IndexConfigVidChResolution,
    &chResolution);
    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set output channel resolution\n");
    }

    /* disable algo bypass mode */
    OMX_INIT_PARAM (&algEnable);
    algEnable.nPortIndex = 0;
    algEnable.nChId = 0;
    /* capture providing progressive input, alg is bypassed */
    algEnable.bAlgBypass = 1;

    eError = OMX_SetConfig (pAppData->pDeiScDownHandle,
    (OMX_INDEXTYPE) OMX_TI_IndexConfigAlgEnable,
    &algEnable);
    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to disable algo by pass mode\n");
    }


    OMX_INIT_PARAM(&sSubSamplinginfo);

    sSubSamplinginfo.nSubSamplingFactor = pAppData->deiSubSampleFactor;
    eError = OMX_SetConfig ( pAppData->pDeiScDownHandle, ( OMX_INDEXTYPE )
    ( OMX_TI_IndexConfigSubSamplingFactor ),
    &sSubSamplinginfo );

    fprintf( stderr, "Set DEI subsampling %u\n", sSubSamplinginfo.nSubSamplingFactor );
    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set subsampling\n");
    }
    }
    ////////////////////////////////////////////////////////////////////////////////

    /* ========================================================================== */
    /**
    * IL_ClientSetDeiScUpParams() : Function to fill the port definition
    * structures and call the Set_Parameter function on to the DEI
    * Component
    *
    * @param pAppData : Pointer to the application data
    *
    * @return
    * OMX_ErrorNone = Successful
    *
    * Other_value = Failed (Error code is returned)
    *
    */
    /* ========================================================================== */

    OMX_ERRORTYPE IL_ClientSetDeiScUpParams (IL_Client *pAppData)
    {
    OMX_ERRORTYPE eError = OMX_ErrorNone;
    OMX_PARAM_BUFFER_MEMORYTYPE memTypeCfg;
    OMX_PARAM_PORTDEFINITIONTYPE paramPort;
    OMX_PARAM_VFPC_NUMCHANNELPERHANDLE sNumChPerHandle;
    OMX_CONFIG_ALG_ENABLE algEnable;
    OMX_CONFIG_VIDCHANNEL_RESOLUTION chResolution;
    OMX_CONFIG_SUBSAMPLING_FACTOR sSubSamplinginfo;

    OMX_INIT_PARAM (&memTypeCfg);
    memTypeCfg.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;
    memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
    eError = OMX_SetParameter (pAppData->pDeiScUpHandle, OMX_TI_IndexParamBuffMemType,
    &memTypeCfg);

    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set memory Type at input port\n");
    }

    /* Setting Memory type at output port to Raw Memory */
    OMX_INIT_PARAM (&memTypeCfg);
    memTypeCfg.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
    memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
    eError = OMX_SetParameter (pAppData->pDeiScUpHandle, OMX_TI_IndexParamBuffMemType,
    &memTypeCfg);

    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set memory Type at output port\n");
    }

    OMX_INIT_PARAM (&memTypeCfg);
    memTypeCfg.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
    memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
    eError = OMX_SetParameter (pAppData->pDeiScUpHandle, OMX_TI_IndexParamBuffMemType,
    &memTypeCfg);

    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set memory Type at output port\n");
    }

    /* set input height/width and color format */
    OMX_INIT_PARAM (&paramPort);
    paramPort.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;

    OMX_GetParameter (pAppData->pDeiScUpHandle, OMX_IndexParamPortDefinition,
    &paramPort);
    paramPort.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;
    paramPort.format.video.nFrameWidth = (pAppData->nWidth>>2);
    paramPort.format.video.nFrameHeight = (pAppData->nHeight>>2);

    paramPort.format.video.nStride = 2*(pAppData->nWidth>>2);
    paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
    // paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
    paramPort.format.video.eColorFormat = OMX_COLOR_FormatYCbYCr;
    /* paramPort.nBufferSize =
    (paramPort.format.video.nStride * (pAppData->nHeight>>2) * 3) >> 1;*/

    paramPort.nBufferSize =
    (paramPort.format.video.nStride * (pAppData->nHeight>>2) );


    paramPort.nBufferAlignment = 0;
    paramPort.bBuffersContiguous = 0;
    paramPort.nBufferCountActual = IL_CLIENT_DEISCUP_INPUT_BUFFER_COUNT;
    printf ("set input port params (width = %u, height = %u) \n",
    pAppData->nWidth, pAppData->nHeight);
    OMX_SetParameter (pAppData->pDeiScUpHandle, OMX_IndexParamPortDefinition,
    &paramPort);

    /* set output height/width and color format */
    OMX_INIT_PARAM (&paramPort);
    paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
    OMX_GetParameter (pAppData->pDeiScUpHandle, OMX_IndexParamPortDefinition,
    &paramPort);

    paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
    paramPort.format.video.nFrameWidth = pAppData->nWidth;
    paramPort.format.video.nFrameHeight = pAppData->nHeight;
    paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
    paramPort.format.video.eColorFormat = OMX_COLOR_FormatYCbYCr;
    paramPort.nBufferAlignment = 0;
    paramPort.nBufferCountActual = IL_CLIENT_DEISCUP_OUTPUT_BUFFER_COUNT;
    /* This port is connected to display and provides 422 o/p */
    paramPort.format.video.nStride = pAppData->nWidth * 2;
    paramPort.nBufferSize = paramPort.format.video.nStride *
    paramPort.format.video.nFrameHeight;

    printf ("set output port params (width = %d, height = %d)\n", pAppData->nWidth,
    pAppData->nHeight);

    OMX_SetParameter (pAppData->pDeiScUpHandle, OMX_IndexParamPortDefinition,
    &paramPort);

    OMX_INIT_PARAM (&paramPort);
    paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
    OMX_GetParameter (pAppData->pDeiScUpHandle, OMX_IndexParamPortDefinition,
    &paramPort);

    paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
    paramPort.format.video.nFrameWidth = pAppData->nWidth;
    paramPort.format.video.nFrameHeight = pAppData->nHeight;
    paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
    paramPort.nBufferAlignment = 0;
    paramPort.nBufferCountActual = IL_CLIENT_ENC_INPUT_BUFFER_COUNT;
    paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
    paramPort.format.video.nStride = pAppData->nWidth;

    /* This port is connected to encoder and provides 420 o/p */
    paramPort.nBufferSize =
    (paramPort.format.video.nStride * paramPort.format.video.nFrameHeight *
    3) >> 1;

    printf ("set output port params (width = %d, height = %d)\n", pAppData->nWidth,
    pAppData->nHeight);

    OMX_SetParameter (pAppData->pDeiScUpHandle, OMX_IndexParamPortDefinition,
    &paramPort);

    /* set number of channles */
    printf ("set number of channels\n");

    OMX_INIT_PARAM (&sNumChPerHandle);
    sNumChPerHandle.nNumChannelsPerHandle = 1;
    eError = OMX_SetParameter (pAppData->pDeiScUpHandle,
    (OMX_INDEXTYPE)
    OMX_TI_IndexParamVFPCNumChPerHandle,
    &sNumChPerHandle);
    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set num of channels\n");
    }

    /* set VFPC input and output resolution information */
    printf ("set input resolution\n");

    OMX_INIT_PARAM (&chResolution);
    chResolution.Frm0Width = (pAppData->nWidth>>2);
    chResolution.Frm0Height = (pAppData->nHeight>>2);
    chResolution.Frm0Pitch = 2*(pAppData->nWidth>>2);
    chResolution.Frm1Width = 0;
    chResolution.Frm1Height = 0;
    chResolution.Frm1Pitch = 0;
    chResolution.FrmStartX = 0;
    chResolution.FrmStartY = 0;
    chResolution.FrmCropWidth = (pAppData->nWidth>>2);
    chResolution.FrmCropHeight = (pAppData->nHeight>>2);
    chResolution.eDir = OMX_DirInput;
    chResolution.nChId = 0;

    eError = OMX_SetConfig (pAppData->pDeiScUpHandle,
    (OMX_INDEXTYPE) OMX_TI_IndexConfigVidChResolution,
    &chResolution);
    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set input channel resolution\n");
    }

    printf ("set output resolution\n");
    OMX_INIT_PARAM (&chResolution);
    /* first output to display */
    chResolution.Frm0Width = pAppData->nWidth;
    chResolution.Frm0Height = pAppData->nHeight;
    chResolution.Frm0Pitch = pAppData->nWidth * 2;
    /* second output to encode */
    chResolution.Frm1Width = pAppData->nWidth;
    chResolution.Frm1Height = pAppData->nHeight;
    chResolution.Frm1Pitch = pAppData->nWidth;
    chResolution.FrmStartX = 0;
    chResolution.FrmStartY = 0;
    chResolution.FrmCropWidth = 0;
    chResolution.FrmCropHeight = 0;
    chResolution.eDir = OMX_DirOutput;
    chResolution.nChId = 0;

    eError = OMX_SetConfig (pAppData->pDeiScUpHandle,
    (OMX_INDEXTYPE) OMX_TI_IndexConfigVidChResolution,
    &chResolution);
    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set output channel resolution\n");
    }

    /* disable algo bypass mode */
    OMX_INIT_PARAM (&algEnable);
    algEnable.nPortIndex = 0;
    algEnable.nChId = 0;
    /* capture providing progressive input, alg is bypassed */
    algEnable.bAlgBypass = 1;

    eError = OMX_SetConfig (pAppData->pDeiScUpHandle,
    (OMX_INDEXTYPE) OMX_TI_IndexConfigAlgEnable,
    &algEnable);
    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to disable algo by pass mode\n");
    }


    OMX_INIT_PARAM(&sSubSamplinginfo);

    sSubSamplinginfo.nSubSamplingFactor = pAppData->deiSubSampleFactor;
    eError = OMX_SetConfig ( pAppData->pDeiScUpHandle, ( OMX_INDEXTYPE )
    ( OMX_TI_IndexConfigSubSamplingFactor ),
    &sSubSamplinginfo );

    fprintf( stderr, "Set DEI subsampling %u\n", sSubSamplinginfo.nSubSamplingFactor );
    if (eError != OMX_ErrorNone)
    {
    ERROR ("failed to set subsampling\n");
    }
    }
  • Gabi,

    Is it failing in creation ? DEI-H may use more memory so creation can fails if it runs out  of memory. Since DEIM-DEIM is functional, DEI-H is also expected to be functional.

    Please provide "loggerSMDump.out 0x9e400000 0x100000 vpss" details also.

    Regards

    Vimal

  • Vimal,

    The example fails during running, i can see a few frames and then it stuck. You can build similar example and see for yourself.
    I can't get any data from the loggerSMDump.out, i think it is because i am working with Z3 board and i received the VPSS compiled from them probably in release mode.

    Gabi 

  • Gabi,

    I will try to reproduce that here. We had seen an issue where DEI does not give nFiledLen value properly. That is required to get proper chroma pointer in buffer. Could you please check this for DEI. 420 O/P of DEI should have nFilledLen as wxhx3/2, and offset as zero. I am not sure which version Z3 is using. for older version

    ./loggerSMDump.out 0x9e100000/0x9e400000 vpss  should work.

    Regards

    Vimal

  • Vimal,

    All the parameters for both DEI components are OK because in DEIM it works perfectly. It stuck only with DEIH.

    I am working with EZSDK 5.02 thus logger_sm address is 0x9e400000 as seen in http://processors.wiki.ti.com/index.php/EZSDK_Memory_Map and also can be seen in MemSegmentDefinition.xs, after i have followed carefully the instructions written here http://processors.wiki.ti.com/index.php/OMX_Viewing_Media_Controller_Traces#Version_Information_and_Compatibility i couldn't get this loggerSMDump.out work properly, the log file is created empty. Can this loggerSMDump.out work if the HDVPSS firmware is compiled in release mode?

    Gabi

  • Gabi,

    loggerSM would work in release mode also. In fact EZSDK supplied binaries are not debug mode, but logs can be seen.

    Regards

    Vimal

  • Hi Vimal,

    Thanks for your answer, now that i know for sure that the loggerSM need to work, what is the reason that  logs can't be sean?

    Gabi

  • Hi Gabi:

         I have not see how do you resolve the problem?Are you resolve?

       Thanks !

  • The problem is resolved, i have used DEIM instead of DEIH, TI has probably a bug in DEIH.

  • Gabi,

    For DEI-H to DEI-H connection did you try without any scaling ? does it gets stuck ? I tried DEI-H to DEI-H and it is functional and does not stuck.

    Regards

    Vimal

  • Hi Vimal,

    Thanks for your answer, i can't remember if i have checked it without scaling, but if it is working without scaling and stuck with scaling isn't it also a problem?
    Please check with scale down in the first DEI and scale up in the second DEI, i have sent you the parameters in this thread.

    Thanks,
    Gabi 

  • Gabi,

    I am doing upscaling and downscaling, and It seems to be running fine. I have both DEI inputs as 420SPYUV as you wrote in your first post . However I see the code you are using 420 for one and 422 for another DEI ?  what is exact configuration ? 

    Regards

    Vimal

  • Hi Vimal,

    The first DEI input is 420SPYUV 1080P and the output of first DEI is 422YUV scaled down by 4 horizontally and 4 vertically, the second DEI input is 422YUV in the same size as the first DEI output and the second DEI output is 422YUV original size (sent to the display). 

    Thanks,
    Gabi