AW: Add sink pad to compositor while playing

Nicolas Dufresne nicolas at ndufresne.ca
Thu Apr 19 20:42:12 UTC 2018


Le jeudi 19 avril 2018 à 08:12 +0000, Weber, Holger a écrit :
> It turned out, that adding a deinterlace element in front of the
> mixer solved the issue.
> I don’t know if that is a bug, because elements that are added before
> the pipline switches to PLAY are handled without 
> a deinterlace element. Only if I add a stream some time later  (while
> pipeline is running) I need this element.
> Should I report this as a bug?

Maybe it's worth a bug yes. Mainly, the problem is that some element
will fail negotiation, other will just ignore that it's interlaced, and
finally others really handle interlacing.

In general, discussions have lead us to think that we should just fail
negotiation when interlacing is not support, but then if we apply that
to displays sink, some applications will start failing. I believe it's
this way because deinterlacing in software is slow, and then some
people preferred to watch a smooth video with visual issues, then a
slide show.

>  
> There is another thing I don’t know how to handle. If I add a new
> stream, the whole mixer is waiting till the
> new stream has the same time than the old ones. I “solved” this by
> setting an offset to the new created pad with
> gst_pad_set_offset. As offset I use the running time of the first
> added element. That seems to work more or less..
>  
> Is there an option for the mixer that it just mixes the sources as
> they arrive and don’t try to keep them in sync?
> Or is that the right way to do that?
>  
> Von: gstreamer-devel <gstreamer-devel-bounces at lists.freedesktop.org>
> Im Auftrag von Weber, Holger
> Gesendet: Dienstag, 17. April 2018 11:49
> An: Discussion of the development of and with GStreamer <gstreamer-de
> vel at lists.freedesktop.org>
> Betreff: AW: Add sink pad to compositor while playing
>  
> Can you give me an hint what you mean with raw?
> As far as I know I have to change different things:
> -          Video format
> -          Pixel-aspect-ratio
> -          Framerate
> Is there an element which can do all of that stuff or do I need
> multiple elements?
>  
> Also in the output I can only see that the pixel-aspect-ratio is
> different. Is it possible to “ignore” this cap?
>  
> Von: gstreamer-devel <gstreamer-devel-bounces at lists.freedesktop.org>
> Im Auftrag von Shishir Pokharel
> Gesendet: Dienstag, 17. April 2018 05:23
> An: Discussion of the development of and with GStreamer <gstreamer-de
> vel at lists.freedesktop.org>
> Betreff: RE: Add sink pad to compositor while playing
>  
> I am not an expert of compositor element – but If I would have to try
> , I would have converted incoming videos to raw -> composite it to
> single video (picture in picture) and convert it to required format.
>  
> /Shishir
>  
> From: gstreamer-devel <gstreamer-devel-bounces at lists.freedesktop.org>
> On Behalf Of Weber, Holger
> Sent: Thursday, April 12, 2018 12:26 AM
> To: Discussion of the development of and with GStreamer <gstreamer-de
> vel at lists.freedesktop.org>
> Subject: AW: Add sink pad to compositor while playing
>  
> Hi,
>  
> I can’t fix that issue. I have no idea how to solve that. The only
> thing I found was something depending a “problem” with the pixel-
> aspect-ratio.
> 
> http://gstreamer-bugs.narkive.com/OilCXCh8/bug-754291-new-compositor-
> fails-with-reason-not-negotiated-when-changing-the-pixel-aspect-ratio
>  
> One solution seems to be to fix the ratio to 1/1 but I don’t know how
> to do that. Any ideas?
>  
> Von: gstreamer-devel <gstreamer-devel-bounces at lists.freedesktop.org>
> Im Auftrag von Weber, Holger
> Gesendet: Mittwoch, 11. April 2018 14:33
> An: Discussion of the development of and with GStreamer <gstreamer-de
> vel at lists.freedesktop.org>
> Betreff: AW: Add sink pad to compositor while playing
>  
> Hi,
>  
> I did some more testing and the strem I added seems to start, but
> than there is a poroblem with pad negotiation.
> After adding the new pipeline part and connecting it to the
> compositor I get the following errors.
>  
> 0:00:03.953236964  4232    da11480 ERROR        videoaggregator
> gstvideoaggregator.c:882:gst_video_aggregator_pad_sink_setcaps:<mixer
> :sink_2> got input caps video/x-raw, format=(string)I420,
> width=(int)720, height=(int)576, interlace-mode=(string)mixed, pixel-
> aspect-ratio=(fraction)12/11, chroma-site=(string)mpeg2,
> colorimetry=(string)bt601, framerate=(fraction)25/1, but current caps
> are video/x-raw, format=(string)I420, width=(int)785,
> height=(int)576, framerate=(fraction)25/1, chroma-site=(string)mpeg2
> 0:00:03.953341177  4232    da11480 ERROR        videoaggregator
> gstvideoaggregator.c:882:gst_video_aggregator_pad_sink_setcaps:<mixer
> :sink_2> got input caps video/x-raw, format=(string)I420,
> width=(int)720, height=(int)576, interlace-mode=(string)mixed, pixel-
> aspect-ratio=(fraction)12/11, chroma-site=(string)mpeg2,
> colorimetry=(string)bt601, framerate=(fraction)25/1, but current caps
> are video/x-raw, format=(string)I420, width=(int)785,
> height=(int)576, framerate=(fraction)25/1, chroma-site=(string)mpeg2
> 0:00:03.953698368  4232    da11480 ERROR        videoaggregator
> gstvideoaggregator.c:882:gst_video_aggregator_pad_sink_setcaps:<mixer
> :sink_2> got input caps video/x-raw, format=(string)I420,
> width=(int)720, height=(int)576, interlace-mode=(string)mixed, pixel-
> aspect-ratio=(fraction)12/11, chroma-site=(string)mpeg2,
> colorimetry=(string)bt601, framerate=(fraction)25/1, but current caps
> are video/x-raw, format=(string)I420, width=(int)785,
> height=(int)576, framerate=(fraction)25/1, chroma-site=(string)mpeg2
> 0:00:03.953821082  4232    da11480 ERROR        videoaggregator
> gstvideoaggregator.c:882:gst_video_aggregator_pad_sink_setcaps:<mixer
> :sink_2> got input caps video/x-raw, format=(string)I420,
> width=(int)720, height=(int)576, interlace-mode=(string)mixed, pixel-
> aspect-ratio=(fraction)12/11, chroma-site=(string)mpeg2,
> colorimetry=(string)bt601, framerate=(fraction)25/1, but current caps
> are video/x-raw, format=(string)I420, width=(int)785,
> height=(int)576, framerate=(fraction)25/1, chroma-site=(string)mpeg2
> 0:00:03.953939643  4232    da11480 ERROR        videoaggregator
> gstvideoaggregator.c:882:gst_video_aggregator_pad_sink_setcaps:<mixer
> :sink_2> got input caps video/x-raw, format=(string)I420,
> width=(int)720, height=(int)576, interlace-mode=(string)mixed, pixel-
> aspect-ratio=(fraction)12/11, chroma-site=(string)mpeg2,
> colorimetry=(string)bt601, framerate=(fraction)25/1, but current caps
> are video/x-raw, format=(string)I420, width=(int)785,
> height=(int)576, framerate=(fraction)25/1, chroma-site=(string)mpeg2
> 0:00:03.954044610  4232    da11480 ERROR        videoaggregator
> gstvideoaggregator.c:882:gst_video_aggregator_pad_sink_setcaps:<mixer
> :sink_2> got input caps video/x-raw, format=(string)I420,
> width=(int)720, height=(int)576, interlace-mode=(string)mixed, pixel-
> aspect-ratio=(fraction)12/11, chroma-site=(string)mpeg2,
> colorimetry=(string)bt601, framerate=(fraction)25/1, but current caps
> are video/x-raw, format=(string)I420, width=(int)785,
> height=(int)576, framerate=(fraction)25/1, chroma-site=(string)mpeg2
> Error: Internal data stream error.
> Returned, stopping playback
> 0:00:03.954949672  4232    da11480 ERROR        videoaggregator
> gstvideoaggregator.c:882:gst_video_aggregator_pad_sink_setcaps:<mixer
> :sink_2> got input caps video/x-raw, format=(string)I420,
> width=(int)720, height=(int)576, interlace-mode=(string)mixed, pixel-
> aspect-ratio=(fraction)12/11, chroma-site=(string)mpeg2,
> colorimetry=(string)bt601, framerate=(fraction)25/1, but current caps
> are video/x-raw, format=(string)I420, width=(int)785,
> height=(int)576, framerate=(fraction)25/1, chroma-site=(string)mpeg2
>  
> The added stream has the same format than the already running
> streams. I didn’t set any caps or added videoconverter elements – so
> I’m not sure if that’s the issue.
>  
> Kind Regards,
>  
> Von: gstreamer-devel <gstreamer-devel-bounces at lists.freedesktop.org>
> Im Auftrag von Weber, Holger
> Gesendet: Mittwoch, 11. April 2018 09:15
> An: Discussion of the development of and with GStreamer <gstreamer-de
> vel at lists.freedesktop.org>
> Betreff: AW: Add sink pad to compositor while playing
>  
> Hi,
>  
> with “don’t stop the pipeline” I mean, there is a running pipeline
> (Video playback) and from another thread I call
> gst_element_get_request_pad(compositor”,”sink_%u”).
> After that I add a pad_probe for that pad. The cb gets called an I do
> the following things:
> -          Create elements for the stream I want to add (filesrc,
> dmuexers etc.)
> -          Add elements to the pipeline
> -          Link elements
> -          Add callback for a needed “pad-added”
> -          Return GST_PAD_PROBE_REMOVE
>  
> If I activate the debugging output I can see:
> aggregator gstaggregator.c:667:gst_aggregator_wait_and_check:<mixer>
> Waiting for src on thread 0d9e70e
>  
> So I guess it’s the problem you described. I need to get the new
> elements in state play, but I don’t know how to do that.
>  
> Kind Regards,
>  
> Von: gstreamer-devel <gstreamer-devel-bounces at lists.freedesktop.org>
> Im Auftrag von Mathieu Duponchelle
> Gesendet: Dienstag, 10. April 2018 18:41
> An: gstreamer-devel at lists.freedesktop.org
> Betreff: Re: Add sink pad to compositor while playing
>  
> Hi,
> 
> What do you mean exactly by "stop the pipeline"? I assume you mean
> the state doesn't actually change,
> but compositor simply stops producing buffers?
> 
> If you are not using the compositor in "live" mode, ie none of the
> sources you plug in are live, then compositor
> will wait for all pads to have data before mixing the output buffer,
> this might be the problem you are observing,
> either your new source does not push any buffers, or the buffers it
> does push do not have the expected
> timestamps and are simply getting dropped, in which case you might
> want to set an offset on the pad.
> 
> Using GST_DEBUG=*aggregator*:6 should give you more information
> regarding this issue.
> 
> On 04/10/2018 06:23 PM, Weber, Holger wrote:
> > Hi,
> > I want to mix multiple video streams into one picture.
> > Therefore I use the compositor element. I can mix two videos and it
> > seems to work fine (written in C).
> >  
> > One requirement is, to mix only one to up to four (quad view)
> > videos. 
> > Just for a quick test I only added one video source, started the
> > pipeline and later, while the video was running,  I called
> > gst_element_get_request_pad(pData->m_pElMixer, "sink_%u");  which
> > leads to stop the pipeline.
> > Can that be done this way or do I need to add all four sink pads
> > with fake sources to the compositor before starting and replacing
> > them later?
> >  
> > Kind Regards
> >  
> > 
> > _______________________________________________
> > 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 --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: This is a digitally signed message part
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20180419/f85b73ec/attachment-0001.sig>


More information about the gstreamer-devel mailing list