GNOME Bugzilla – Bug 678080
ffviddec regression in interlacing
Last modified: 2012-06-14 13:33:54 UTC
Code from 0.10 GIT: gstreamer 11c8ffb6fbd20081c49708cb41e0ec6e2ed09c27 -base 1f6056eafb6c37f4c78ed22b2796a1dcaeb51ee6 -good 50c85392cd0a8824b917790a12d92f237dbd55ce -bad acf4463f2b9bf7a7cdbac288e50dfb41626fc8b2 -ugly 09284b9862504f73924d88ac00b2c7d08dd7a001 -ffmpeg 9761a6501b518a554fc5e52de8e9acdc4f8ced9a Plus a patch to -ugly mpeg2dec to set its rank to NONE making -ffmpeg MPEG2 decoder used. Test pipelines: gst-launch-0.10 filesrc location=/data/data/media/bbc-news.ts ! decodebin2 ! queue ! deinterlace mode=1 method=5 ! queue ! xvimagesink gst-launch-0.10 filesrc location=/data/data/media/bbc-news.ts ! decodebin2 ! queue ! deinterlace mode=2 method=5 ! queue ! xvimagesink There is no visible difference between the two test cases - scrolling text and moving parts of the image are left interlaced. Test stream available on request.
Possibly a bug in -ffmpeg if by the below output it looks video is not correctly identified as interlaced? But forcing deinterlace should still work,no? # gst-launch-0.10 -v filesrc location=/data/data/media/bbc-news.ts ! decodebin2 ! queue ! deinterlace mode=1 method=3 ! queue ! xvimagesink Setting pipeline to PAUSED ... /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTypeFindElement:typefind.GstPad:src: caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188 Pipeline is PREROLLING ... /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTSDemux:tsdemux0.GstPad:sink: caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188 Missing element: private/teletext decoder /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:sink0: caps = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:src0: caps = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/ffdec_mpeg2video:ffdec_mpeg2video0.GstPad:sink: caps = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false 0:00:00.054578907 32410 0x7fba3c024300 ERROR ffmpeg :0:: mpeg_decode_postinit() failure 0:00:00.054623082 32410 0x7fba3c024300 ERROR ffmpeg :0:: mpeg_decode_postinit() failure 0:00:00.054646660 32410 0x7fba3c024300 ERROR ffmpeg :0:: mpeg_decode_postinit() failure 0:00:00.055388124 32410 0x7fba3c024300 ERROR ffmpeg :0:: mpeg_decode_postinit() failure 0:00:00.055412700 32410 0x7fba3c024300 ERROR ffmpeg :0:: mpeg_decode_postinit() failure Missing element: DVB subtitles decoder /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0: max-size-buffers = 5 /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0: max-size-time = 0 /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0: max-size-bytes = 2097152 /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:sink1: caps = audio/mpeg, mpegversion=(int)1 0:00:00.059156004 32410 0x7fba3c024300 ERROR ffmpeg :0:: mpeg_decode_postinit() failure 0:00:00.059380622 32410 0x7fba3c024300 ERROR ffmpeg :0:: mpeg_decode_postinit() failure 0:00:00.059677385 32410 0x7fba3c024300 ERROR ffmpeg :0:: mpeg_decode_postinit() failure 0:00:00.060012750 32410 0x7fba3c024300 ERROR ffmpeg :0:: mpeg_decode_postinit() failure 0:00:00.063054834 32410 0x7fba3c024300 ERROR ffmpeg :0:: mpeg_decode_postinit() failure 0:00:00.063100668 32410 0x7fba3c024300 ERROR ffmpeg :0:: mpeg_decode_postinit() failure /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/ffdec_mpeg2video:ffdec_mpeg2video0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/ffdec_mpeg2video:ffdec_mpeg2video0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/ffdec_mpeg2video:ffdec_mpeg2video0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMpegAudioParse:mpegaudioparse0.GstPad:src: caps = audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)2, rate=(int)48000, channels=(int)2, parsed=(boolean)true /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMad:mad0.GstPad:sink: caps = audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)2, rate=(int)48000, channels=(int)2, parsed=(boolean)true /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMad:mad0.GstPad:src: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)48000, channels=(int)2 /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0: max-size-buffers = 5 /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0: max-size-time = 0 /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0: max-size-bytes = 2097152 /GstPipeline:pipeline0/GstDecodeBin2:decodebin20.GstDecodePad:src0: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 /GstPipeline:pipeline0/GstDecodeBin2:decodebin20.GstDecodePad:src0.GstProxyPad:proxypad4: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 /GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 /GstPipeline:pipeline0/GstDeinterlace:deinterlace0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 /GstPipeline:pipeline0/GstDeinterlace:deinterlace0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 /GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 /GstPipeline:pipeline0/GstQueue:queue1.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, interlaced=(boolean)false, framerate=(fraction)0/1 Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock Redistribute latency... 0:00:29.617592498 32410 0x7fba240011c0 ERROR ffmpeg :0:: ac-tex damaged at 13 20 0:00:29.619771194 32410 0x7fba3c024300 ERROR ffmpeg :0:: Warning MVs not available Got EOS from element "pipeline0". Execution ended after 39660805566 ns. Setting pipeline to PAUSED ... Setting pipeline to READY ... /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstQueue:queue1.GstPad:src: caps = NULL /GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstDeinterlace:deinterlace0.GstPad:src: caps = NULL /GstPipeline:pipeline0/GstDeinterlace:deinterlace0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = NULL /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20.GstDecodePad:src0: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMad:mad0.GstPad:src: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMad:mad0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMpegAudioParse:mpegaudioparse0.GstPad:src: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMpegAudioParse:mpegaudioparse0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/ffdec_mpeg2video:ffdec_mpeg2video0.GstPad:src: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/ffdec_mpeg2video:ffdec_mpeg2video0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:sink1: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:src1: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:sink0: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:src0: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTSDemux:tsdemux0.GstPad:audio_1389: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTSDemux:tsdemux0.GstPad:private_138d: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTSDemux:tsdemux0.GstPad:video_1388: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTSDemux:tsdemux0.GstPad:private_138b: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTSDemux:tsdemux0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTypeFindElement:typefind.GstPad:src: caps = NULL Setting pipeline to NULL ... Freeing pipeline ...
I think what we have here is bug 656155 being re-introduced by removing the code which fixed it in -ffmpeg commit bdf7ebf411a0aad64c2ba8c4219e97a291bf5a45.
So yes, there was a regression when porting the ffmpeg video decoder to the base classes. That being said, you really shouldn't be using that decoder for mpeg2.
commit ce7f65f752dfff124c672a418bbd1728df2fd137 Author: Edward Hervey <edward.hervey@collabora.co.uk> Date: Thu Jun 14 15:13:31 2012 +0200 ffmpegviddec: Properly update the interlacing Fixes #678080
Fix confirmed. What is wrong with this decoder? It does multi-threading which is a very useful feature and seems to handle all material we threw at it just fine.