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.

OpenMax incorrect output frames

Hello!

I use OMX to transcode video streams to h264. MPEG2 SD input streams looks ok, but h264 FHD looks like on picture below.

What parameter could be a reason of this?

  • Hello,

    Provide more details about your application like:

    resolutions on the input/output ports of the component;

    the components which are connected in the pipe etc.

    Yaroslav Popov said:
    MPEG2 SD input streams looks ok

    This frame it seems double. Could you check the output of the mpeg2 decoder component or on the input of the h264encoder component?

    Best Regards,

    Margarita

  • Video is interlaced. Pipelines: mpeg2(dec)->h264(enc), h264(dec)->h264(enc)

    Here is gdb output below with port defenitions.  The first pipeline works, but the second doesn't.

    MPEG2->h264 correct:
    decoder input:
    {nSize = 96, nVersion = {s = {nVersionMajor = 1 '\001', nVersionMinor = 1 '\001', nRevision = 2 '\002', 
          nStep = 0 '\0'}, nVersion = 131329}, nPortIndex = 0, eDir = OMX_DirInput, nBufferCountActual = 4, 
      nBufferCountMin = 4, nBufferSize = 1244160, bEnabled = OMX_TRUE, bPopulated = OMX_FALSE, 
      eDomain = OMX_PortDomainVideo, format = {audio = {cMIMEType = 0x9e355280 <Address 0x9e355280 out of bounds>, 
          pNativeRender = 0x0, bFlagErrorConcealment = 720, eEncoding = 576}, video = {
          cMIMEType = 0x9e355280 <Address 0x9e355280 out of bounds>, pNativeRender = 0x0, nFrameWidth = 720, 
          nFrameHeight = 576, nStride = 720, nSliceHeight = 16, nBitrate = 10485760, xFramerate = 1638400, 
          bFlagErrorConcealment = OMX_FALSE, eCompressionFormat = OMX_VIDEO_CodingMPEG2, 
          eColorFormat = OMX_COLOR_FormatUnused, pNativeWindow = 0x0}, image = {
          cMIMEType = 0x9e355280 <Address 0x9e355280 out of bounds>, pNativeRender = 0x0, nFrameWidth = 720, 
          nFrameHeight = 576, nStride = 720, nSliceHeight = 16, bFlagErrorConcealment = 10485760, 
          eCompressionFormat = 1638400, eColorFormat = OMX_COLOR_FormatUnused, pNativeWindow = 0x2}, other = {
          eFormat = 2654294656}}, bBuffersContiguous = OMX_FALSE, nBufferAlignment = 32}
    
    decoder output:
    {nSize = 96, nVersion = {s = {nVersionMajor = 1 '\001', nVersionMinor = 1 '\001', nRevision = 2 '\002', 
          nStep = 0 '\0'}, nVersion = 131329}, nPortIndex = 1, eDir = OMX_DirOutput, nBufferCountActual = 10, 
      nBufferCountMin = 10, nBufferSize = 700416, bEnabled = OMX_TRUE, bPopulated = OMX_FALSE, 
      eDomain = OMX_PortDomainVideo, format = {audio = {cMIMEType = 0x9e355358 <Address 0x9e355358 out of bounds>, 
          pNativeRender = 0x0, bFlagErrorConcealment = 720, eEncoding = 576}, video = {
          cMIMEType = 0x9e355358 <Address 0x9e355358 out of bounds>, pNativeRender = 0x0, nFrameWidth = 720, 
          nFrameHeight = 576, nStride = 720, nSliceHeight = 16, nBitrate = 0, xFramerate = 1638400, 
          bFlagErrorConcealment = OMX_FALSE, eCompressionFormat = OMX_VIDEO_CodingUnused, 
          eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar, pNativeWindow = 0x0}, image = {
          cMIMEType = 0x9e355358 <Address 0x9e355358 out of bounds>, pNativeRender = 0x0, nFrameWidth = 720, 
          nFrameHeight = 576, nStride = 720, nSliceHeight = 16, bFlagErrorConcealment = OMX_FALSE, 
          eCompressionFormat = 1638400, eColorFormat = OMX_COLOR_FormatUnused, pNativeWindow = 0x0}, other = {
          eFormat = 2654294872}}, bBuffersContiguous = OMX_FALSE, nBufferAlignment = 128}
    
    encoder input:
    {nSize = 96, nVersion = {s = {nVersionMajor = 1 '\001', nVersionMinor = 1 '\001', nRevision = 2 '\002', 
          nStep = 0 '\0'}, nVersion = 131329}, nPortIndex = 0, eDir = OMX_DirInput, nBufferCountActual = 10, 
      nBufferCountMin = 1, nBufferSize = 700416, bEnabled = OMX_TRUE, bPopulated = OMX_FALSE, 
      eDomain = OMX_PortDomainVideo, format = {audio = {cMIMEType = 0x0, pNativeRender = 0x0, 
          bFlagErrorConcealment = 720, eEncoding = 288}, video = {cMIMEType = 0x0, pNativeRender = 0x0, 
          nFrameWidth = 720, nFrameHeight = 288, nStride = 720, nSliceHeight = 0, nBitrate = 10000000, 
          xFramerate = 1638400, bFlagErrorConcealment = OMX_FALSE, eCompressionFormat = OMX_VIDEO_CodingUnused, 
          eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar, pNativeWindow = 0x0}, image = {cMIMEType = 0x0, 
          pNativeRender = 0x0, nFrameWidth = 720, nFrameHeight = 288, nStride = 720, nSliceHeight = 0, 
          bFlagErrorConcealment = 10000000, eCompressionFormat = 1638400, eColorFormat = OMX_COLOR_FormatUnused, 
          pNativeWindow = 0x0}, other = {eFormat = OMX_OTHER_FormatTime}}, bBuffersContiguous = OMX_FALSE, 
      nBufferAlignment = 128}
    
    encoder output:
    {nSize = 96, nVersion = {s = {nVersionMajor = 1 '\001', nVersionMinor = 1 '\001', nRevision = 2 '\002', 
          nStep = 0 '\0'}, nVersion = 131329}, nPortIndex = 1, eDir = OMX_DirOutput, nBufferCountActual = 4, 
      nBufferCountMin = 1, nBufferSize = 829440, bEnabled = OMX_TRUE, bPopulated = OMX_FALSE, 
      eDomain = OMX_PortDomainVideo, format = {audio = {cMIMEType = 0x0, pNativeRender = 0x0, 
          bFlagErrorConcealment = 720, eEncoding = 576}, video = {cMIMEType = 0x0, pNativeRender = 0x0, 
          nFrameWidth = 720, nFrameHeight = 576, nStride = 720, nSliceHeight = 288, nBitrate = 5000000, 
          xFramerate = 1638400, bFlagErrorConcealment = OMX_FALSE, eCompressionFormat = OMX_VIDEO_CodingAVC, 
          eColorFormat = OMX_COLOR_FormatUnused, pNativeWindow = 0x0}, image = {cMIMEType = 0x0, pNativeRender = 0x0, 
          nFrameWidth = 720, nFrameHeight = 576, nStride = 720, nSliceHeight = 288, bFlagErrorConcealment = 5000000, 
          eCompressionFormat = 1638400, eColorFormat = OMX_COLOR_FormatUnused, pNativeWindow = 0x7}, other = {
          eFormat = OMX_OTHER_FormatTime}}, bBuffersContiguous = OMX_FALSE, nBufferAlignment = 128}
    ****************************************************************************************************************
    h264->h264 incorrect:
    decoder input: 
    {nSize = 96, nVersion = {s = {nVersionMajor = 1 '\001', nVersionMinor = 1 '\001', nRevision = 2 '\002', 
          nStep = 0 '\0'}, nVersion = 131329}, nPortIndex = 0, eDir = OMX_DirInput, nBufferCountActual = 4, 
      nBufferCountMin = 4, nBufferSize = 6220800, bEnabled = OMX_TRUE, bPopulated = OMX_FALSE, 
      eDomain = OMX_PortDomainVideo, format = {audio = {cMIMEType = 0x9e355280 <Address 0x9e355280 out of bounds>, 
          pNativeRender = 0x0, bFlagErrorConcealment = 1920, eEncoding = 1080}, video = {
          cMIMEType = 0x9e355280 <Address 0x9e355280 out of bounds>, pNativeRender = 0x0, nFrameWidth = 1920, 
          nFrameHeight = 1080, nStride = 1920, nSliceHeight = 16, nBitrate = 10485760, xFramerate = 1638400, 
          bFlagErrorConcealment = OMX_FALSE, eCompressionFormat = OMX_VIDEO_CodingAVC, 
          eColorFormat = OMX_COLOR_FormatUnused, pNativeWindow = 0x0}, image = {
          cMIMEType = 0x9e355280 <Address 0x9e355280 out of bounds>, pNativeRender = 0x0, nFrameWidth = 1920, 
          nFrameHeight = 1080, nStride = 1920, nSliceHeight = 16, bFlagErrorConcealment = 10485760, 
          eCompressionFormat = 1638400, eColorFormat = OMX_COLOR_FormatUnused, pNativeWindow = 0x7}, other = {
          eFormat = 2654294656}}, bBuffersContiguous = OMX_FALSE, nBufferAlignment = 32}
    
    decoder output:
    {nSize = 96, nVersion = {s = {nVersionMajor = 1 '\001', nVersionMinor = 1 '\001', nRevision = 2 '\002', 
          nStep = 0 '\0'}, nVersion = 131329}, nPortIndex = 1, eDir = OMX_DirOutput, nBufferCountActual = 10, 
      nBufferCountMin = 10, nBufferSize = 3637248, bEnabled = OMX_TRUE, bPopulated = OMX_FALSE, 
      eDomain = OMX_PortDomainVideo, format = {audio = {cMIMEType = 0x9e355358 <Address 0x9e355358 out of bounds>, 
          pNativeRender = 0x0, bFlagErrorConcealment = 1920, eEncoding = 1088}, video = {
          cMIMEType = 0x9e355358 <Address 0x9e355358 out of bounds>, pNativeRender = 0x0, nFrameWidth = 1920, 
          nFrameHeight = 1088, nStride = 2048, nSliceHeight = 16, nBitrate = 0, xFramerate = 1638400, 
          bFlagErrorConcealment = OMX_FALSE, eCompressionFormat = OMX_VIDEO_CodingUnused, 
          eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar, pNativeWindow = 0x0}, image = {
          cMIMEType = 0x9e355358 <Address 0x9e355358 out of bounds>, pNativeRender = 0x0, nFrameWidth = 1920, 
          nFrameHeight = 1088, nStride = 2048, nSliceHeight = 16, bFlagErrorConcealment = OMX_FALSE, 
          eCompressionFormat = 1638400, eColorFormat = OMX_COLOR_FormatUnused, pNativeWindow = 0x0}, other = {
          eFormat = 2654294872}}, bBuffersContiguous = OMX_FALSE, nBufferAlignment = 128}
    
    encoder input:
    {nSize = 96, nVersion = {s = {nVersionMajor = 1 '\001', nVersionMinor = 1 '\001', nRevision = 2 '\002', 
          nStep = 0 '\0'}, nVersion = 131329}, nPortIndex = 0, eDir = OMX_DirInput, nBufferCountActual = 10, 
      nBufferCountMin = 1, nBufferSize = 3637248, bEnabled = OMX_TRUE, bPopulated = OMX_FALSE, 
      eDomain = OMX_PortDomainVideo, format = {audio = {cMIMEType = 0x0, pNativeRender = 0x0, 
          bFlagErrorConcealment = 1920, eEncoding = 544}, video = {cMIMEType = 0x0, pNativeRender = 0x0, 
          nFrameWidth = 1920, nFrameHeight = 544, nStride = 2048, nSliceHeight = 0, nBitrate = 10000000, 
          xFramerate = 1638400, bFlagErrorConcealment = OMX_FALSE, eCompressionFormat = OMX_VIDEO_CodingUnused, 
          eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar, pNativeWindow = 0x0}, image = {cMIMEType = 0x0, 
          pNativeRender = 0x0, nFrameWidth = 1920, nFrameHeight = 544, nStride = 2048, nSliceHeight = 0, 
          bFlagErrorConcealment = 10000000, eCompressionFormat = 1638400, eColorFormat = OMX_COLOR_FormatUnused, 
          pNativeWindow = 0x0}, other = {eFormat = OMX_OTHER_FormatTime}}, bBuffersContiguous = OMX_FALSE, 
      nBufferAlignment = 128}
    
    encoder output:
    {nSize = 96, nVersion = {s = {nVersionMajor = 1 '\001', nVersionMinor = 1 '\001', nRevision = 2 '\002', 
          nStep = 0 '\0'}, nVersion = 131329}, nPortIndex = 1, eDir = OMX_DirOutput, nBufferCountActual = 4, 
      nBufferCountMin = 1, nBufferSize = 4423680, bEnabled = OMX_TRUE, bPopulated = OMX_FALSE, 
      eDomain = OMX_PortDomainVideo, format = {audio = {cMIMEType = 0x0, pNativeRender = 0x0, 
          bFlagErrorConcealment = 1920, eEncoding = 1080}, video = {cMIMEType = 0x0, pNativeRender = 0x0, 
          nFrameWidth = 1920, nFrameHeight = 1080, nStride = 2048, nSliceHeight = 544, nBitrate = 5000000, 
          xFramerate = 1638400, bFlagErrorConcealment = OMX_FALSE, eCompressionFormat = OMX_VIDEO_CodingAVC, 
          eColorFormat = OMX_COLOR_FormatUnused, pNativeWindow = 0x0}, image = {cMIMEType = 0x0, pNativeRender = 0x0, 
          nFrameWidth = 1920, nFrameHeight = 1080, nStride = 2048, nSliceHeight = 544, 
          bFlagErrorConcealment = 5000000, eCompressionFormat = 1638400, eColorFormat = OMX_COLOR_FormatUnused, 
          pNativeWindow = 0x7}, other = {eFormat = OMX_OTHER_FormatTime}}, bBuffersContiguous = OMX_FALSE, 
      nBufferAlignment = 128}

  • Hello,

    Are you using DEI?

    I would recommended you to check :

    http://processors.wiki.ti.com/index.php/VENC

    for interlace encoding.

    I meant also to grab the frames between components to check is it correct and between which two elements is broken.

    Best Regards,

    Margarita

  • Margarita,

    I don't use DEI. If input video is mpeg2, encoder output is correct.

    This is decoder output frame.

    This is encoder output frame.

    this is h264 decoder output played with params: nv12 1920x1080

    nv12 2048x1080

    I guess something wrong with decoder output port definition.

  • This is a original frame from the test h264 progressive video.

    This is a transcoded frame. It seems that the picture is shifted in the buffer. Could you please provide the correct ports configuration for h264dec and h264enc components?

  • Stupid mistake. I didn't take into account the buffer offset. So the garbage was written.