Deinterlace plugin working backwards ?

Rob Heig robhhh6 at gmail.com
Thu Oct 29 07:16:39 UTC 2020


Thanks a lot Nicolas for your detailed analysis !!
Unfortunately moving to Gst 1.18+ is not an option for me (custom
NVIDIA-based board with the usual lot of NVIDIA-proprietary stuff),
therefore I guess I have to give up and move to something else :(
Thanks again and have a nice day!
Rob

On Wed, 28 Oct 2020 at 15:50, Nicolas Dufresne <nicolas at ndufresne.ca> wrote:

> Le mercredi 28 octobre 2020 à 12:54 +0100, Rob Heig a écrit :
> > Yes, sure, the same as above but it says that the input file is at 25
> > Hz and the output of deinterlace is at 50 Hz :(
> > On Wed, 28 Oct 2020 at 12:51, Tony Houghton <h at realh.co.uk> wrote:
> > > Have you also tried framerate=25/1?
> > >
> > > On Wed, 28 Oct 2020 at 11:37, Rob Heig <robhhh6 at gmail.com> wrote:
> > > > Thanks for your reply! Yes I've did that, what I get is that
> > > > window that gets displayed has two frames one on top of the
> > > > other, still doubling the frame rate:
> > > >
> > > > gst-launch-1.0 -v filesrc location=vvvv.raw ! videoparse
> > > > width=768 height=576 format=4 framerate=50/1 interlaced=true !
> > > > videoconvert ! deinterlace ! autovideosink
>
> Appparently videoparse (same for rawvideoparse, it's replacement), only
> gives you a boolean for interlacing. While in practice, GStreamer caps
> uses an enum, interlace-mode={progressive, interleaved, alternate}.
>
> The last is only supported in 1.18+ and that method seems to be what
> you have in your raw video data according to the field height hack you
> have done.
>
> Progressive content is not interlaved. The most common way to store
> interlaced content is "interleaved", what is being assumed by
> rawvideoparse. In this mode, top and bottom fields are stored in the
> same buffer with full height, you'd have top fields line on even lines,
> and bottom field lines on odds lines (you have to set the field-order=
> in the caps if you have bottom field first).
>
> What you seem to have instead of alternate interlaced. In this case,
> each fields is passed as an half height image, alternating between
> images. This was added recently in gstreamer under a caps setter.
> Perhaps the author forgot to update and test with rawvideoparse, but I
> would try using upstream caps filter to communicate the settings
> properly to the parser (by enabling use-sink-caps property).
>
>   ... !
> video/x-raw\(format:Interlaced\),interlace-mode=alternate,format=YUY2,width=768,height=576
> ! rawvideoparse use-sink-caps=1 ! ...
>
> Ideally we could deprecate the bookean property and add a new property
> "interlace-mode" with the enum inside rawvideoparse. I'm not totally
> sure that this caps filter method will actually work. If not, please
> open an issue against gst-plugins-good.
>
> > > >
> > > > Setting pipeline to PAUSED ...
> > > > Pipeline is PREROLLING ...
> > > > /GstPipeline:pipeline0/GstVideoParse:videoparse0/GstRawVideoParse
> > > > :inner_rawvideoparse.GstPad:src: caps = video/x-raw,
> > > > format=(string)YUY2, width=(int)768, height=(int)576, interlace-
> > > > mode=(string)interleaved, pixel-aspect-ratio=(fraction)1/1,
> > > > chroma-site=(string)jpeg, colorimetry=(string)bt601,
> > > > framerate=(fraction)50/1
> > > > /GstPipeline:pipeline0/GstVideoParse:videoparse0.GstGhostPad:src:
> > > > caps = video/x-raw, format=(string)YUY2, width=(int)768,
> > > > height=(int)576, interlace-mode=(string)interleaved, pixel-
> > > > aspect-ratio=(fraction)1/1, chroma-site=(string)jpeg,
> > > > colorimetry=(string)bt601, framerate=(fraction)50/1
> > > > /GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src:
> > > > caps = video/x-raw, width=(int)768, height=(int)576, interlace-
> > > > mode=(string)interleaved, pixel-aspect-ratio=(fraction)1/1,
> > > > framerate=(fraction)50/1, format=(string)YV12
> > > > /GstPipeline:pipeline0/GstDeinterlace:deinterlace0.GstPad:src:
> > > > caps = video/x-raw, width=(int)768, height=(int)576, interlace-
> > > > mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1,
> > > > framerate=(fraction)100/1, format=(string)YV12
> > > > /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0.GstGhostPa
> > > > d:sink.GstProxyPad:proxypad2: caps = video/x-raw, width=(int)768,
> > > > height=(int)576, interlace-mode=(string)progressive, pixel-
> > > > aspect-ratio=(fraction)1/1, framerate=(fraction)100/1,
> > > > format=(string)YV12
> > > > /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstXvImage
> > > > Sink:autovideosink0-actual-sink-xvimage.GstPad:sink: caps =
> > > > video/x-raw, width=(int)768, height=(int)576, interlace-
> > > > mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1,
> > > > framerate=(fraction)100/1, format=(string)YV12
> > > > /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0.GstGhostPa
> > > > d:sink: caps = video/x-raw, width=(int)768, height=(int)576,
> > > > interlace-mode=(string)progressive, pixel-aspect-
> > > > ratio=(fraction)1/1, framerate=(fraction)100/1,
> > > > format=(string)YV12
> > > > /GstPipeline:pipeline0/GstDeinterlace:deinterlace0.GstPad:sink:
> > > > caps = video/x-raw, width=(int)768, height=(int)576, interlace-
> > > > mode=(string)interleaved, pixel-aspect-ratio=(fraction)1/1,
> > > > framerate=(fraction)50/1, format=(string)YV12
> > > > /GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:sink:
> > > > caps = video/x-raw, format=(string)YUY2, width=(int)768,
> > > > height=(int)576, interlace-mode=(string)interleaved, pixel-
> > > > aspect-ratio=(fraction)1/1, chroma-site=(string)jpeg,
> > > > colorimetry=(string)bt601, framerate=(fraction)50/1
> > > > /GstPipeline:pipeline0/GstVideoParse:videoparse0.GstGhostPad:src.
> > > > GstProxyPad:proxypad1: caps = video/x-raw, format=(string)YUY2,
> > > > width=(int)768, height=(int)576, interlace-
> > > > mode=(string)interleaved, pixel-aspect-ratio=(fraction)1/1,
> > > > chroma-site=(string)jpeg, colorimetry=(string)bt601,
> > > > framerate=(fraction)50/1
> > > > Pipeline is PREROLLED ...
> > > > Setting pipeline to PLAYING ...
> > > > New clock: GstSystemClock
> > > > Got EOS from element "pipeline0".
> > > > Execution ended after 0:00:03.000241651
> > > > Setting pipeline to PAUSED ...
> > > > Setting pipeline to READY ...
> > > > Setting pipeline to NULL ...
> > > > Freeing pipeline ...
> > > >
> > > > On Wed, 28 Oct 2020 at 12:11, Tony Houghton <h at realh.co.uk>
> > > > wrote:
> > > > > It seems more conventional to refer to the total frame height
> > > > > rather than the height of each field, so have you tried using
> > > > > "height=576" instead?
> > > > >
> > > > > On Wed, 28 Oct 2020 at 11:00, Rob Heig <robhhh6 at gmail.com>
> > > > > wrote:
> > > > > > Hello,
> > > > > > I'm trying to deinterlace an interlaced raw video, but
> > > > > > despite having spent 2 days on this I am still stuck. The
> > > > > > interesting thing is that, by looking at the output of gst-
> > > > > > launch, I see weird results:
> > > > > >
> > > > > > gst-launch-1.0 -v filesrc location=vvvv.raw ! videoparse
> > > > > > width=768 height=288 format=4 framerate=50/1 interlaced=true
> > > > > > ! videoconvert ! deinterlace ! autovideosink
> > > > > >
> > > > > > Setting pipeline to PAUSED ...
> > > > > > Pipeline is PREROLLING ...
> > > > > > /GstPipeline:pipeline0/GstVideoParse:videoparse0/GstRawVideoP
> > > > > > arse:inner_rawvideoparse.GstPad:src: caps = video/x-raw,
> > > > > > format=(string)YUY2, width=(int)768, height=(int)288,
> > > > > > interlace-mode=(string)interleaved, pixel-aspect-
> > > > > > ratio=(fraction)1/1, chroma-site=(string)jpeg,
> > > > > > colorimetry=(string)bt601, framerate=(fraction)50/1
> > > > > > /GstPipeline:pipeline0/GstVideoParse:videoparse0.GstGhostPad:
> > > > > > src: caps = video/x-raw, format=(string)YUY2, width=(int)768,
> > > > > > height=(int)288, interlace-mode=(string)interleaved, pixel-
> > > > > > aspect-ratio=(fraction)1/1, chroma-site=(string)jpeg,
> > > > > > colorimetry=(string)bt601, framerate=(fraction)50/1
> > > > > > /GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:s
> > > > > > rc: caps = video/x-raw, width=(int)768, height=(int)288,
> > > > > > interlace-mode=(string)interleaved, pixel-aspect-
> > > > > > ratio=(fraction)1/1, framerate=(fraction)50/1,
> > > > > > format=(string)YV12
> > > > > > /GstPipeline:pipeline0/GstDeinterlace:deinterlace0.GstPad:src
> > > > > > : caps = video/x-raw, width=(int)768, height=(int)288,
> > > > > > interlace-mode=(string)progressive, pixel-aspect-
> > > > > > ratio=(fraction)1/1, framerate=(fraction)100/1,
> > > > > > format=(string)YV12
> > > > > > /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0.GstGho
> > > > > > stPad:sink.GstProxyPad:proxypad2: caps = video/x-raw,
> > > > > > width=(int)768, height=(int)288, interlace-
> > > > > > mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1,
> > > > > > framerate=(fraction)100/1, format=(string)YV12
> > > > > > /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstXvI
> > > > > > mageSink:autovideosink0-actual-sink-xvimage.GstPad:sink: caps
> > > > > > = video/x-raw, width=(int)768, height=(int)288, interlace-
> > > > > > mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1,
> > > > > > framerate=(fraction)100/1, format=(string)YV12
> > > > > > /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0.GstGho
> > > > > > stPad:sink: caps = video/x-raw, width=(int)768,
> > > > > > height=(int)288, interlace-mode=(string)progressive, pixel-
> > > > > > aspect-ratio=(fraction)1/1, framerate=(fraction)100/1,
> > > > > > format=(string)YV12
> > > > > > /GstPipeline:pipeline0/GstDeinterlace:deinterlace0.GstPad:sin
> > > > > > k: caps = video/x-raw, width=(int)768, height=(int)288,
> > > > > > interlace-mode=(string)interleaved, pixel-aspect-
> > > > > > ratio=(fraction)1/1, framerate=(fraction)50/1,
> > > > > > format=(string)YV12
> > > > > > /GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:s
> > > > > > ink: caps = video/x-raw, format=(string)YUY2, width=(int)768,
> > > > > > height=(int)288, interlace-mode=(string)interleaved, pixel-
> > > > > > aspect-ratio=(fraction)1/1, chroma-site=(string)jpeg,
> > > > > > colorimetry=(string)bt601, framerate=(fraction)50/1
> > > > > > /GstPipeline:pipeline0/GstVideoParse:videoparse0.GstGhostPad:
> > > > > > src.GstProxyPad:proxypad1: caps = video/x-raw,
> > > > > > format=(string)YUY2, width=(int)768, height=(int)288,
> > > > > > interlace-mode=(string)interleaved, pixel-aspect-
> > > > > > ratio=(fraction)1/1, chroma-site=(string)jpeg,
> > > > > > colorimetry=(string)bt601, framerate=(fraction)50/1
> > > > > > Pipeline is PREROLLED ...
> > > > > > Setting pipeline to PLAYING ...
> > > > > > New clock: GstSystemClock
> > > > > > ERROR: from element
> > > > > > /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstXvI
> > > > > > mageSink:autovideosink0-actual-sink-xvimage: Output window
> > > > > > was closed
> > > > > > Additional debug info:
> > > > > > xvimagesink.c(555): gst_xv_image_sink_handle_xevents ():
> > > > > > /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstXvI
> > > > > > mageSink:autovideosink0-actual-sink-xvimage
> > > > > > Execution ended after 0:00:02.956028008
> > > > > > Setting pipeline to PAUSED ...
> > > > > > Setting pipeline to READY ...
> > > > > > Setting pipeline to NULL ...
> > > > > > Freeing pipeline ...
> > > > > >
> > > > > > I would naively expect the deinterlace plugin to take a 50
> > > > > > Hz, 720x288 interlaced video and give as output a 25 Hz,
> > > > > > 720x576 one.
> > > > > > Instead, the resolution stays the same, while the frame rate
> > > > > > doubles.... ????
> > > > > > I have tested this on gstreamer 1.45 and gstreamer 1.6.
> > > > > > Am I missing anything?
> > > > > > Thanks in advance for all suggestions!
> > > > > > Best,
> > > > > > Rob
> > > > > >
> > > > > > _______________________________________________
> > > > > > gstreamer-devel mailing list
> > > > > > gstreamer-devel at lists.freedesktop.org
> > > > > >
> > > > > > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
> > > > >
> > > > >
> > > > > --
> > > > > TH
> > > > > _______________________________________________
> > > > > gstreamer-devel mailing list
> > > > > gstreamer-devel at lists.freedesktop.org
> > > > > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
> > > > _______________________________________________
> > > > gstreamer-devel mailing list
> > > > gstreamer-devel at lists.freedesktop.org
> > > > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
> > >
> > >
> > > _______________________________________________
> > > gstreamer-devel mailing list
> > > gstreamer-devel at lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20201029/d4d5042a/attachment-0001.htm>


More information about the gstreamer-devel mailing list