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.TI.VPSSM3.VFPC.NF issue with EZSDK decode_display example

HI !

I am using a noise filter to perform YUY2->NV12 conversion with EZSDK 5_05_02.

When using this component, I always get a few jerky frames (2 or 3) on the output of the noise filter. I noticed that this issue also appears with the decode_display example found in component-sources/omx_05_02_00_48/examples/ti/omx/demos/decode_display/ (I get a frame full of grey pixels)

Is this a known bug in your driver or an issue in the configuration? This is rather a blocking issue to me since the output of my application always has those two dirty frames...

Regards.

  • Hi again !

    Ideas anyone?

    Regards.

  • Hello,

    Pierre-Louis Cabelguen said:
    (I get a frame full of grey pixels)

    It seems to me that the noise filter in not the cause of this issue, it is presented in the older EZSDK releases, where  the noise filter is not included in the OMX decode_display demo in EZSDK.

    You could check this topic also :

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/t/265465.aspx

    Best Regards,

    Margarita

  • Hi Margarita !

    Thank you for your reply. I had a look at the other topic and I think it is a different issue indeed.

    Just to make sure you understand what I'm trying to solve, here is a GStreamer pipeline that shows the 'bug'.

    $ GST_DEBUG=*:3 gst-launch -vvvve videotestsrc pattern=18 ! 'video/x-raw-yuv, format=(fourcc)YUY2, width=1280, height=720, framerate=(fraction)30/1' ! omx_noisefilter ! omx_h264enc ! 'video/x-h264, width=1280, height=720, framerate=(fraction)30/1' ! h264parse output-format=0 ! mp4mux ! filesink location=./out_2.mp4

    Any ideas why I get this?

    Best regards,

    Pierre-Louis.

  • Hello,

    I will check it and I will let you know.

    Best Regards,

    Margarita

  • Ok thank you! 

    I can run other tests if you need me to!

    Regards,

    Pierre-Louis.

  • Hello,

    Are you using EVM or it is custom board?

    Best Regards,

    Margarita

  • Hello !

    I'm using a Z3-DM8168-RPS board.

    Regards,

    Pierre-Louis.

  • Hello,

    Could you try:

    encode:

    gst-launch videotestsrc pattern=18 ! 'video/x-raw-yuv,format=(fourcc)YUY2,width=1280,height=720,framerate=(fraction)30/1' !  omx_noisefilter  ! queue  ! omx_h264enc   bitrate=10000000 ! gstperf ! filesink location=sample.264 -v

    decode:


    gst-launch -v filesrc location=sample.264 ! typefind ! h264parse ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf ! v4l2sink device="/dev/video1" show-preroll-frame=false sync=false min-queued-bufs=2

    Let me know the result.

    Best Regards,

    Margarita

  • Hello again!

    1/Encoding pipeline :

    gst-launch videotestsrc pattern=18 ! 'video/x-raw-yuv,format=(fourcc)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! omx_noisefilter ! queue ! omx_h264enc bitrate=10000000 ! gstperf ! filesink location=sample.264 -v
    Setting pipeline to PAUSED ...
    /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)YUY2, color-matrix=(string)sdtv, chroma-site=(string)mpeg2, width=(int)1280, height=(int)720, framerate=(fraction)30/1
    Pipeline is PREROLLING ...
    /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)YUY2, color-matrix=(string)sdtv, chroma-site=(string)mpeg2, width=(int)1280, height=(int)720, framerate=(fraction)30/1
    /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)YUY2, color-matrix=(string)sdtv, chroma-site=(string)mpeg2, width=(int)1280, height=(int)720, framerate=(fraction)30/1
    /GstPipeline:pipeline0/GstOmxNoiseFilter:omxnoisefilter0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)YUY2, color-matrix=(string)sdtv, chroma-site=(string)mpeg2, width=(int)1280, height=(int)720, framerate=(fraction)30/1
    /GstPipeline:pipeline0/GstOmxNoiseFilter:omxnoisefilter0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)YUY2, color-matrix=(string)sdtv, chroma-site=(string)mpeg2, width=(int)1280, height=(int)720, framerate=(fraction)30/1
    /GstPipeline:pipeline0/GstOmxNoiseFilter:omxnoisefilter0.GstPad:src: caps = video/x-raw-yuv, width=(int)1280, height=(int)720, format=(fourcc)NV12, framerate=(fraction)30/1
    /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-raw-yuv, width=(int)1280, height=(int)720, format=(fourcc)NV12, framerate=(fraction)30/1
    /GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = video/x-raw-yuv, width=(int)1280, height=(int)720, format=(fourcc)NV12, framerate=(fraction)30/1
    /GstPipeline:pipeline0/GstOmxH264Enc:omxh264enc0.GstPad:sink: caps = video/x-raw-yuv, width=(int)1280, height=(int)720, format=(fourcc)NV12, framerate=(fraction)30/1
    /GstPipeline:pipeline0/GstOmxH264Enc:omxh264enc0.GstPad:src: caps = video/x-h264, width=(int)1280, height=(int)720, framerate=(fraction)30/1, stream-format=(string)byte-stream, alignment=(string)au
    /GstPipeline:pipeline0/Gstperf:perf0.GstPad:src: caps = video/x-h264, width=(int)1280, height=(int)720, framerate=(fraction)30/1, stream-format=(string)byte-stream, alignment=(string)au
    /GstPipeline:pipeline0/Gstperf:perf0.GstPad:sink: caps = video/x-h264, width=(int)1280, height=(int)720, framerate=(fraction)30/1, stream-format=(string)byte-stream, alignment=(string)au
    /GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps = video/x-h264, width=(int)1280, height=(int)720, framerate=(fraction)30/1, stream-format=(string)byte-stream, alignment=(string)au
    Pipeline is PREROLLED ...
    Setting pipeline to PLAYING ...
    New clock: GstSystemClock
    perf0: frames: 15 current: 14.77 average: 14.77 arm-load: 31
    perf0: frames: 29 current: 13.44 average: 14.10 arm-load: 100
    perf0: frames: 43 current: 13.67 average: 13.96 arm-load: 97
    perf0: frames: 57 current: 13.65 average: 13.88 arm-load: 99
    perf0: frames: 71 current: 13.60 average: 13.82 arm-load: 100
    perf0: frames: 85 current: 13.16 average: 13.71 arm-load: 100
    perf0: frames: 99 current: 13.57 average: 13.69 arm-load: 100
    perf0: frames: 113 current: 13.52 average: 13.67 arm-load: 99
    perf0: frames: 127 current: 13.60 average: 13.66 arm-load: 99
    perf0: frames: 141 current: 13.57 average: 13.65 arm-load: 100
    perf0: frames: 155 current: 13.58 average: 13.64 arm-load: 100
    perf0: frames: 169 current: 13.57 average: 13.64 arm-load: 99
    perf0: frames: 183 current: 13.59 average: 13.63 arm-load: 100
    perf0: frames: 197 current: 13.57 average: 13.63 arm-load: 100
    perf0: frames: 211 current: 13.19 average: 13.60 arm-load: 100
    perf0: frames: 225 current: 13.58 average: 13.60 arm-load: 100
    perf0: frames: 239 current: 13.60 average: 13.60 arm-load: 100
    perf0: frames: 253 current: 13.58 average: 13.60 arm-load: 99
    perf0: frames: 267 current: 13.53 average: 13.59 arm-load: 99
    perf0: frames: 281 current: 13.51 average: 13.59 arm-load: 100
    perf0: frames: 295 current: 13.73 average: 13.60 arm-load: 100
    perf0: frames: 309 current: 13.57 average: 13.60 arm-load: 100
    perf0: frames: 323 current: 13.59 average: 13.60 arm-load: 98
    perf0: frames: 337 current: 13.59 average: 13.60 arm-load: 100
    perf0: frames: 351 current: 13.19 average: 13.58 arm-load: 99
    perf0: frames: 365 current: 13.56 average: 13.58 arm-load: 100
    perf0: frames: 379 current: 13.59 average: 13.58 arm-load: 100
    perf0: frames: 393 current: 13.58 average: 13.58 arm-load: 99
    perf0: frames: 407 current: 13.59 average: 13.58 arm-load: 100
    perf0: frames: 421 current: 13.58 average: 13.58 arm-load: 100
    perf0: frames: 435 current: 13.58 average: 13.58 arm-load: 100
    perf0: frames: 449 current: 13.59 average: 13.58 arm-load: 100
    perf0: frames: 463 current: 13.58 average: 13.58 arm-load: 100
    ^CCaught interrupt -- handling interrupt.
    Interrupt: Stopping pipeline ...
    Execution ended after 34544304148 ns.
    Setting pipeline to PAUSED ...
    Setting pipeline to READY ...
    /GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/Gstperf:perf0.GstPad:src: caps = NULL
    /GstPipeline:pipeline0/Gstperf:perf0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/GstOmxH264Enc:omxh264enc0.GstPad:src: caps = NULL
    /GstPipeline:pipeline0/GstOmxH264Enc:omxh264enc0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = NULL
    /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/GstOmxNoiseFilter:omxnoisefilter0.GstPad:src: caps = NULL
    /GstPipeline:pipeline0/GstOmxNoiseFilter:omxnoisefilter0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = NULL
    /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = NULL
    Setting pipeline to NULL ...
    Freeing pipeline ...

    => This produces a sample.h264 file. So far no issue found.

    2/ Decode

    $ gst-launch -v filesrc location=sample.264 ! typefind ! h264parse ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf ! v4l2sink device="/dev/video1" show-preroll-frame=false sync=false min-queued-bufs=2

    Setting pipeline to PAUSED ...

    ** (gst-launch-0.10:829): CRITICAL **: gst_v4l2sink_sync_rotation: assertion `v4l2_ioctl (fd, VIDIOC_S_CTRL, &control) >= 0' failed

    ** (gst-launch-0.10:829): CRITICAL **: gst_v4l2sink_sync_rotation: assertion `v4l2_ioctl (fd, VIDIOC_S_CTRL, &control) >= 0' failed

    ** (gst-launch-0.10:829): CRITICAL **: gst_v4l2sink_sync_flip: assertion `v4l2_ioctl (fd, VIDIOC_S_CTRL, &control) >= 0' failed
    /GstPipeline:pipeline0/GstTypeFindElement:typefindelement0.GstPad:src: caps = video/x-h264, stream-format=(string)byte-stream
    Pipeline is PREROLLING ...
    /GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:sink: caps = video/x-h264, stream-format=(string)byte-stream
    /GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:src: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1280, height=(int)720
    /GstPipeline:pipeline0/GstOmxH264Dec:omxh264dec0.GstPad:sink: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1280, height=(int)720
    /GstPipeline:pipeline0/GstOmxH264Dec:omxh264dec0.GstPad:sink: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1280, height=(int)720
    /GstPipeline:pipeline0/GstOmxH264Dec:omxh264dec0.GstPad:src: caps = video/x-raw-yuv-strided, width=(int)1280, height=(int)720, format=(fourcc)NV12, rowstride=(int)1408, interlaced=(boolean)false, framerate=(fraction)0/1

    (gst-launch-0.10:829): GStreamer-CRITICAL **: _gst_util_uint64_scale_int: assertion `denom > 0' failed
    /GstPipeline:pipeline0/GstOmxScaler:omxscaler0.GstPad:sink: caps = video/x-raw-yuv-strided, width=(int)1280, height=(int)720, format=(fourcc)NV12, rowstride=(int)1408, interlaced=(boolean)false, framerate=(fraction)0/1
    /GstPipeline:pipeline0/GstOmxScaler:omxscaler0.GstPad:sink: caps = video/x-raw-yuv-strided, width=(int)1280, height=(int)720, format=(fourcc)NV12, rowstride=(int)1408, interlaced=(boolean)false, framerate=(fraction)0/1
    /GstPipeline:pipeline0/GstOmxScaler:omxscaler0.GstPad:src: caps = video/x-raw-yuv, width=(int)1280, height=(int)720, format=(fourcc)YUY2, framerate=(fraction)0/1, interlaced=(boolean)false
    /GstPipeline:pipeline0/GstOmxBaseCtrl:omxbasectrl0.GstPad:src: caps = video/x-raw-yuv, width=(int)1280, height=(int)720, format=(fourcc)YUY2, framerate=(fraction)0/1, interlaced=(boolean)false
    /GstPipeline:pipeline0/GstOmxBaseCtrl:omxbasectrl0.GstPad:sink: caps = video/x-raw-yuv, width=(int)1280, height=(int)720, format=(fourcc)YUY2, framerate=(fraction)0/1, interlaced=(boolean)false
    /GstPipeline:pipeline0/Gstperf:perf0.GstPad:src: caps = video/x-raw-yuv, width=(int)1280, height=(int)720, format=(fourcc)YUY2, framerate=(fraction)0/1, interlaced=(boolean)false
    /GstPipeline:pipeline0/Gstperf:perf0.GstPad:sink: caps = video/x-raw-yuv, width=(int)1280, height=(int)720, format=(fourcc)YUY2, framerate=(fraction)0/1, interlaced=(boolean)false
    /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0.GstPad:sink: caps = video/x-raw-yuv, width=(int)1280, height=(int)720, format=(fourcc)YUY2, framerate=(fraction)0/1, interlaced=(boolean)false
    Pipeline is PREROLLED ...
    Setting pipeline to PLAYING ...
    New clock: GstSystemClock
    perf0: frames: 59 current: 58.84 average: 58.84 arm-load: 25
    perf0: frames: 119 current: 60.00 average: 59.42 arm-load: 0
    perf0: frames: 180 current: 60.00 average: 59.62 arm-load: 0
    perf0: frames: 240 current: 60.00 average: 59.71 arm-load: 0
    perf0: frames: 301 current: 60.00 average: 59.77 arm-load: 0
    perf0: frames: 362 current: 60.00 average: 59.81 arm-load: 0
    perf0: frames: 423 current: 60.00 average: 59.84 arm-load: 0
    Got EOS from element "pipeline0".
    Execution ended after 7682734852 ns.
    Setting pipeline to PAUSED ...
    Setting pipeline to READY ...

    !!!!!!!!!unreference all the remaining buffers!!!!!!!!!/GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/Gstperf:perf0.GstPad:src: caps = NULL
    /GstPipeline:pipeline0/Gstperf:perf0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/GstOmxBaseCtrl:omxbasectrl0.GstPad:src: caps = NULL
    /GstPipeline:pipeline0/GstOmxBaseCtrl:omxbasectrl0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/GstOmxScaler:omxscaler0.GstPad:src: caps = NULL
    /GstPipeline:pipeline0/GstOmxScaler:omxscaler0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/GstOmxH264Dec:omxh264dec0.GstPad:src: caps = NULL
    /GstPipeline:pipeline0/GstOmxH264Dec:omxh264dec0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:src: caps = NULL
    /GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:sink: caps = NULL
    /GstPipeline:pipeline0/GstTypeFindElement:typefindelement0.GstPad:src: caps = NULL
    Setting pipeline to NULL ...
    Freeing pipeline ...

    => Typefind does not find the proper framerate hence the message "_gst_util_uint64_scale_int: assertion `denom > 0' failed". This is fixed by using the following pipeline :

    $ gst-launch -v filesrc location=sample.264 ! 'video/x-h264,width=1280,height=720,framerate=(fraction)30/1' ! h264parse ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf ! v4l2sink device="/dev/video1" show-preroll-frame=false sync=false min-queued-bufs=2

    In both cases, I still get jerky frames (grey and green) when playback starts.

    Regards,

    Pierre-Louis.

  • Hello,

    It is normal  to see last lines green. If you change height=720 in the encoding pipeline to be multiple of 32 you will not see it. For example set it to 800.

    encode:

    gst-launch videotestsrc pattern=18 ! 'video/x-raw-yuv,format=(fourcc)YUY2,width=1280,height=800,framerate=(fraction)30/1' ! omx_noisefilter ! omx_h264enc force-idr-period=300 i-period=100 bitrate=12000000 !  gstperf  ! filesink location=test.264

    decode:

    gst-launch filesrc location=test.264 ! 'video/x-h264' ! h264parse access-unit=true ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf ! omx_videosink sync=true

    When you are using omx_noisefilter: Width/pitch/height should be multiple of 32 pixels.

    Best Regards,

    Margarita

  • Hello!

    I knew about grey lines at the bottom of the frames and the limitation with omx_noisefilter sizes.

    So, this is what I do to show you the issue:

    • Encoding:

    gst-launch videotestsrc pattern=18 ! 'video/x-raw-yuv,format=(fourcc)YUY2,width=1280,height=800,framerate=(fraction)30/1' ! omx_noisefilter ! omx_h264enc force-idr-period=300 i-period=100 bitrate=12000000 !  gstperf  ! filesink location=test_800.264

    • Decoding:

    $ gst-launch -v filesrc location=test_800.264 ! typefind ! h264parse ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf ! v4l2sink device="/dev/video1" show-preroll-frame=false sync=false min-queued-bufs=2

    I did extract all the frames with the following pipeline:

    $ gst-launch -vvve filesrc location=test_800.264 ! 'video/x-h264' ! h264parse access-unit=true ! omx_h264dec ! omx_scaler ! jpegenc ! multifilesink location=./output_%05d.jpg

    And this is what I get for the first three frames :

    1/

    2/

    3/ Frame is correct:

    There is clearly something with a wrong initialization or reset procedure. What do you think?

    Here is a pipeline that shows the issue of omx_noisefilter :

    $ GST_DEBUG=*:3 gst-launch videotestsrc pattern=18 ! 'video/x-raw-yuv,format=(fourcc)YUY2,width=1280,height=800,framerate=(fraction)30/1' ! tee name=before ! queue ! jpegenc ! multifilesink location=before_nf_%05d.jpg before. ! queue ! omx_noisefilter ! 'video/x-raw-yuv,format=(fourcc)NV12,width=1280,height=800,framerate=(fraction)30/1' ! swcsc ! 'video/x-raw-yuv,format=(fourcc)I420,width=1280,height=800,framerate=(fraction)30/1' ! jpegenc ! multifilesink location=./after_nf_%05d.jpg -vvve

    You'll see that the input is correct while the output has two dirty frames. Hope this helps.

    Best regards,

    Pierre-Louis.

  • Hello,

    Let me check. I will let you know the result.

    Best Regards,

    Margarita

  • Hello !

    Do you have any updates regarding the issue ?

    Regards,

    Pierre-Louis.

  • Hello,

    Pierre-Louis Cabelguen said:
    Do you have any updates regarding the issue ?

    Are you observing this when you are using OMX?

    or you are observed this problem only when gstreamer is used?

    Best Regards,

    Margarita

  • Hello !

    As I wrote earlier, I noticed that this issue appears in both cases :

    - With the decode_display example (OMX)

    - With a GStreamer pipeline when I use an omx_noisefilter element.

    Are you able to reproduce the issue?

    Regards,

    Pierre-Louis.

  • Hello !

    Any progress on this issue? Do you have a fix or a workaround to suggest?

    Regards,

    Pierre-Louis.

  • Hello,

    I am busy with other tasks. I will get back to the issue as soon as possible.

    Sorry for the inconvenience.

    Best Regards,

    Margarita

  • Hello Margarita,

    Any news about this issue ? How can we help you in order to solve this issue ? It seems that the VPSS often uses several frames of context, and does not give correct output (or even blank output) until it is prime. A workaround is to drop the first frames, but this is not a nice solution.

    Any idea ?

    Best Regards,
    Jean-Michel

  • Hello,

    When you are using OMX not gstreamer with NF component are you observing the same behaviour ?

    Best Regards,

    Margarita

  • Hello,

    As previously described, this issue appears :

    - With the decode_display example (OMX)

    - With a GStreamer pipeline when I use an omx_noisefilter element.

    Best Regards,

    Jean-Michel

  • Hello,

    jean-michel hautbois said:
    - With the decode_display example (OMX)

    Are you pointing the "grey" flash before the video start?

    BR

    Margarita

  • Margarita Gashova said:

    Hello,

    - With the decode_display example (OMX)

    Are you pointing the "grey" flash before the video start?

    [/quote]

    Yes, the green/gray flash :-).

    BR

    JM

  • Hello,

    In the omx decode_display demo I am seeing only grey flash but this is normal in this case if you have the overlay package which is under NDA you could change it. Also in this demo the  Noise filter is used to convert 422 o/p to 420 for SD display only option -d 2.

    Regarding the gstreamer when the videotestsrc, NF and encoding or display is used I  observed it. I will continue to investigating the issue, when I am not busy with other tasks.

    Best Regards,

    Margarita