GStreamer issueshttps://gitlab.freedesktop.org/groups/gstreamer/-/issues2019-03-21T09:37:10Zhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/366Problem with filesrc do-timestamp=12019-03-21T09:37:10ZMarianna Smidth BuschleProblem with filesrc do-timestamp=1I'm using elements that require live sources.
But sometimes I need to use files, in order to emulate a live source I use the `do-timestamp` property of `filesrc` and
`multifilesrc` plus an `identity sync=1`.
The `multifilesrc` always ...I'm using elements that require live sources.
But sometimes I need to use files, in order to emulate a live source I use the `do-timestamp` property of `filesrc` and
`multifilesrc` plus an `identity sync=1`.
The `multifilesrc` always works perfectly but the `filesrc` gives me bad results off and on (buffers with invalid timestamps == -1).
I'm using gst-shark to be able to trace and print the timestamp information:
Here I got a correct pts: `0:00:00.203193445 5508 0x615b70 TRACE GST_TRACER :0:: buffer, pad=(string)pnmdec0:src, pts=(string)0:00:00.001304907, dts=(string)99:99:99.999999999, duration=(string)99:99:99.999999999, offset=(guint64)18446744073709551615, offset_end=(guint64)18446744073709551615, size=(guint64)6276528, flags=(string)GST_BUFFER_FLAG_DISCONT, refcount=(uint)1;`
```
root@qt5022:~# GST_DEBUG="*:3,GST_TRACER:7" GST_TRACERS="buffer(filter=pnmdec)" gst-launch-1.0 filesrc do-timestamp=1 location=002.ppm ! pnmdec ! identity sync=1 ! videoconvert ! fakesink sync=0 async=0
0:00:00.043287794 5508 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620d80 (cpuusage)
0:00:00.043400473 5508 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620e40 (graphic)
0:00:00.043438270 5508 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620f00 (proctime)
0:00:00.043475497 5508 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65c840 (interlatency)
0:00:00.043525304 5508 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65c900 (scheduletime)
0:00:00.043587376 5508 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65c9c0 (framerate)
0:00:00.043632384 5508 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65ca80 (queuelevel)
0:00:00.043667904 5508 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65cb40 (bitrate)
0:00:00.043703081 5508 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65cc00 (buffer)
0:00:00.044473236 5508 0x64e180 TRACE GST_TRACER gsttracerrecord.c:111:gst_tracer_record_build_format: buffer.class, pad=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"The\\\ pad\\\ which\\\ the\\\ buffer\\\ is\\\ going\\\ through\"\;", pts=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"Presentation\\\ Timestamp\"\;", dts=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"Decoding\\\ Timestamp\"\;", duration=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)Duration\;", offset=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)Offset\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", offset_end=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)\"Offset\\\ End\"\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", size=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)\"Data\\\ Size\"\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", flags=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)Flags\;", refcount=(structure)"value\,\ type\=\(type\)guint\,\ description\=\(string\)\"Ref\\\ Count\"\,\ min\=\(uint\)0\,\ max\=\(uint\)4294967295\;";
0:00:00.044563092 5508 0x64e180 DEBUG GST_TRACER gsttracerrecord.c:125:gst_tracer_record_build_format: new format string: buffer, pad=(string)%s, pts=(string)%s, dts=(string)%s, duration=(string)%s, offset=(guint64)%lu, offset_end=(guint64)%lu, size=(guint64)%lu, flags=(string)%s, refcount=(uint)%u;
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
0:00:00.060434228 5508 0x615b70 FIXME videodecoder gstvideodecoder.c:933:gst_video_decoder_drain_out:<pnmdec0> Sub-class should implement drain()
New clock: GstSystemClock
0:00:00.061536333 5508 0x615b70 FIXME videodecoder gstvideodecoder.c:933:gst_video_decoder_drain_out:<pnmdec0> Sub-class should implement drain()
0:00:00.203193445 5508 0x615b70 TRACE GST_TRACER :0:: buffer, pad=(string)pnmdec0:src, pts=(string)0:00:00.001304907, dts=(string)99:99:99.999999999, duration=(string)99:99:99.999999999, offset=(guint64)18446744073709551615, offset_end=(guint64)18446744073709551615, size=(guint64)6276528, flags=(string)GST_BUFFER_FLAG_DISCONT, refcount=(uint)1;
Got EOS from element "pipeline0".
Execution ended after 0:00:00.143298097
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
```
And then running the exact same pipeline again I get a strange pts: `0:00:00.201213533 5511 0x615b70 TRACE GST_TRACER :0:: buffer, pad=(string)pnmdec0:src, pts=(string)7:44:53.025969752, dts=(string)99:99:99.999999999, duration=(string)99:99:99.999999999, offset=(guint64)18446744073709551615, offset_end=(guint64)18446744073709551615, size=(guint64)6276528, flags=(string)GST_BUFFER_FLAG_DISCONT, refcount=(uint)1;`
```
root@qt5022:~# GST_DEBUG="*:3,GST_TRACER:7" GST_TRACERS="buffer(filter=pnmdec)" gst-launch-1.0 filesrc do-timestamp=1 location=002.ppm ! pnmdec ! identity sync=1 ! videoconvert ! fakesink sync=0 async=0
0:00:00.043163858 5511 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620d80 (cpuusage)
0:00:00.043273857 5511 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620e40 (graphic)
0:00:00.043310779 5511 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620f00 (proctime)
0:00:00.043347283 5511 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65c840 (interlatency)
0:00:00.043387067 5511 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65c900 (scheduletime)
0:00:00.043436940 5511 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65c9c0 (framerate)
0:00:00.043474066 5511 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65ca80 (queuelevel)
0:00:00.043518948 5511 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65cb40 (bitrate)
0:00:00.043554675 5511 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65cc00 (buffer)
0:00:00.044297121 5511 0x64e180 TRACE GST_TRACER gsttracerrecord.c:111:gst_tracer_record_build_format: buffer.class, pad=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"The\\\ pad\\\ which\\\ the\\\ buffer\\\ is\\\ going\\\ through\"\;", pts=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"Presentation\\\ Timestamp\"\;", dts=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"Decoding\\\ Timestamp\"\;", duration=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)Duration\;", offset=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)Offset\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", offset_end=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)\"Offset\\\ End\"\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", size=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)\"Data\\\ Size\"\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", flags=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)Flags\;", refcount=(structure)"value\,\ type\=\(type\)guint\,\ description\=\(string\)\"Ref\\\ Count\"\,\ min\=\(uint\)0\,\ max\=\(uint\)4294967295\;";
0:00:00.044383159 5511 0x64e180 DEBUG GST_TRACER gsttracerrecord.c:125:gst_tracer_record_build_format: new format string: buffer, pad=(string)%s, pts=(string)%s, dts=(string)%s, duration=(string)%s, offset=(guint64)%lu, offset_end=(guint64)%lu, size=(guint64)%lu, flags=(string)%s, refcount=(uint)%u;
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
0:00:00.059445900 5511 0x615b70 FIXME videodecoder gstvideodecoder.c:933:gst_video_decoder_drain_out:<pnmdec0> Sub-class should implement drain()
Setting pipeline to PLAYING ...
New clock: GstSystemClock
0:00:00.061032396 5511 0x615b70 FIXME videodecoder gstvideodecoder.c:933:gst_video_decoder_drain_out:<pnmdec0> Sub-class should implement drain()
0:00:00.201213533 5511 0x615b70 TRACE GST_TRACER :0:: buffer, pad=(string)pnmdec0:src, pts=(string)7:44:53.025969752, dts=(string)99:99:99.999999999, duration=(string)99:99:99.999999999, offset=(guint64)18446744073709551615, offset_end=(guint64)18446744073709551615, size=(guint64)6276528, flags=(string)GST_BUFFER_FLAG_DISCONT, refcount=(uint)1;
^Chandling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:00:04.074898297
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
```
And the again, no pts:`0:00:00.203289646 5498 0x615b70 TRACE GST_TRACER :0:: buffer, pad=(string)pnmdec0:src, pts=(string)99:99:99.999999999, dts=(string)99:99:99.999999999, duration=(string)99:99:99.999999999, offset=(guint64)18446744073709551615, offset_end=(guint64)18446744073709551615, size=(guint64)6276528, flags=(string)GST_BUFFER_FLAG_DISCONT, refcount=(uint)1;`
```
root@qt5022:~# GST_DEBUG="*:3,GST_TRACER:7" GST_TRACERS="buffer(filter=pnmdec)" gst-launch-1.0 filesrc do-timestamp=1 location=002.ppm ! pnmdec ! identity sync=1 ! videoconvert ! fakesink sync=0 async=0
0:00:00.042737979 5498 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620d80 (cpuusage)
0:00:00.042845462 5498 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620e40 (graphic)
0:00:00.042882752 5498 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620f00 (proctime)
0:00:00.042919761 5498 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65c840 (interlatency)
0:00:00.042958778 5498 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65c900 (scheduletime)
0:00:00.043051814 5498 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65c9c0 (framerate)
0:00:00.043112182 5498 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65ca80 (queuelevel)
0:00:00.043168352 5498 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65cb40 (bitrate)
0:00:00.043223235 5498 0x64e180 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65cc00 (buffer)
0:00:00.043973091 5498 0x64e180 TRACE GST_TRACER gsttracerrecord.c:111:gst_tracer_record_build_format: buffer.class, pad=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"The\\\ pad\\\ which\\\ the\\\ buffer\\\ is\\\ going\\\ through\"\;", pts=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"Presentation\\\ Timestamp\"\;", dts=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"Decoding\\\ Timestamp\"\;", duration=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)Duration\;", offset=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)Offset\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", offset_end=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)\"Offset\\\ End\"\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", size=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)\"Data\\\ Size\"\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", flags=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)Flags\;", refcount=(structure)"value\,\ type\=\(type\)guint\,\ description\=\(string\)\"Ref\\\ Count\"\,\ min\=\(uint\)0\,\ max\=\(uint\)4294967295\;";
0:00:00.044052718 5498 0x64e180 DEBUG GST_TRACER gsttracerrecord.c:125:gst_tracer_record_build_format: new format string: buffer, pad=(string)%s, pts=(string)%s, dts=(string)%s, duration=(string)%s, offset=(guint64)%lu, offset_end=(guint64)%lu, size=(guint64)%lu, flags=(string)%s, refcount=(uint)%u;
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
0:00:00.059393979 5498 0x615b70 FIXME videodecoder gstvideodecoder.c:933:gst_video_decoder_drain_out:<pnmdec0> Sub-class should implement drain()
Setting pipeline to PLAYING ...
0:00:00.061049160 5498 0x615b70 FIXME videodecoder gstvideodecoder.c:933:gst_video_decoder_drain_out:<pnmdec0> Sub-class should implement drain()
New clock: GstSystemClock
0:00:00.203289646 5498 0x615b70 TRACE GST_TRACER :0:: buffer, pad=(string)pnmdec0:src, pts=(string)99:99:99.999999999, dts=(string)99:99:99.999999999, duration=(string)99:99:99.999999999, offset=(guint64)18446744073709551615, offset_end=(guint64)18446744073709551615, size=(guint64)6276528, flags=(string)GST_BUFFER_FLAG_DISCONT, refcount=(uint)1;
Got EOS from element "pipeline0".
Execution ended after 0:00:00.142536204
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
```
multifilesrc always returns me a valid pts: `0:00:00.113280317 596 0x623630 TRACE GST_TRACER :0:: buffer, pad=(string)pnmdec0:src, pts=(string)0:00:00.024404403, dts=(string)99:99:99.999999999, duration=(string)99:99:99.999999999, offset=(guint64)18446744073709551615, offset_end=(guint64)18446744073709551615, size=(guint64)6276528, flags=(string)GST_BUFFER_FLAG_DISCONT, refcount=(uint)1;`
```
root@qt5022:~# GST_DEBUG="*:3,GST_TRACER:7" GST_TRACERS="buffer(filter=pnmdec)" gst-launch-1.0 multifilesrc num-buffers=1 do-timestamp=1 location=002.ppm ! pnmdec ! identity sync=1 ! videoconvert ! fakesink sync=0 async=0
0:00:00.039729121 596 0x64d980 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65ac00 (cpuusage)
0:00:00.039876322 596 0x64d980 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65ab40 (graphic)
0:00:00.039915541 596 0x64d980 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65aa80 (proctime)
0:00:00.039954115 596 0x64d980 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65a9c0 (interlatency)
0:00:00.039990671 596 0x64d980 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65a900 (scheduletime)
0:00:00.040313876 596 0x64d980 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x65a840 (framerate)
0:00:00.040352600 596 0x64d980 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620f00 (queuelevel)
0:00:00.040388033 596 0x64d980 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620e40 (bitrate)
0:00:00.040424745 596 0x64d980 DEBUG GST_TRACER gsttracer.c:164:gst_tracer_register:<registry0> update existing feature 0x620d80 (buffer)
0:00:00.041331466 596 0x64d980 TRACE GST_TRACER gsttracerrecord.c:111:gst_tracer_record_build_format: buffer.class, pad=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"The\\\ pad\\\ which\\\ the\\\ buffer\\\ is\\\ going\\\ through\"\;", pts=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"Presentation\\\ Timestamp\"\;", dts=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)\"Decoding\\\ Timestamp\"\;", duration=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)Duration\;", offset=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)Offset\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", offset_end=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)\"Offset\\\ End\"\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", size=(structure)"value\,\ type\=\(type\)guint64\,\ description\=\(string\)\"Data\\\ Size\"\,\ min\=\(guint64\)0\,\ max\=\(guint64\)18446744073709551615\;", flags=(structure)"value\,\ type\=\(type\)gchararray\,\ description\=\(string\)Flags\;", refcount=(structure)"value\,\ type\=\(type\)guint\,\ description\=\(string\)\"Ref\\\ Count\"\,\ min\=\(uint\)0\,\ max\=\(uint\)4294967295\;";
0:00:00.041434660 596 0x64d980 DEBUG GST_TRACER gsttracerrecord.c:125:gst_tracer_record_build_format: new format string: buffer, pad=(string)%s, pts=(string)%s, dts=(string)%s, duration=(string)%s, offset=(guint64)%lu, offset_end=(guint64)%lu, size=(guint64)%lu, flags=(string)%s, refcount=(uint)%u;
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
0:00:00.058401943 596 0x623630 FIXME videodecoder gstvideodecoder.c:933:gst_video_decoder_drain_out:<pnmdec0> Sub-class should implement drain()
Setting pipeline to PLAYING ...
New clock: GstSystemClock
0:00:00.083718900 596 0x623630 FIXME videodecoder gstvideodecoder.c:933:gst_video_decoder_drain_out:<pnmdec0> Sub-class should implement drain()
0:00:00.113280317 596 0x623630 TRACE GST_TRACER :0:: buffer, pad=(string)pnmdec0:src, pts=(string)0:00:00.024404403, dts=(string)99:99:99.999999999, duration=(string)99:99:99.999999999, offset=(guint64)18446744073709551615, offset_end=(guint64)18446744073709551615, size=(guint64)6276528, flags=(string)GST_BUFFER_FLAG_DISCONT, refcount=(uint)1;
Got EOS from element "pipeline0".
Execution ended after 0:00:00.054257974
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
```https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/581rtpulpfec: Not usable as a generic FEC mechanism2024-02-08T05:25:19ZSebastian Drögertpulpfec: Not usable as a generic FEC mechanismThis is a result of how ULPFEC works and how GStreamer works.
The problem here is that ULPFEC uses the same seqnum space for FEC packets as for non-FEC packets, so whenever you lost a packet you don't know if it was a FEC packet (uninte...This is a result of how ULPFEC works and how GStreamer works.
The problem here is that ULPFEC uses the same seqnum space for FEC packets as for non-FEC packets, so whenever you lost a packet you don't know if it was a FEC packet (uninteresting) or a non-FEC packet (problematic, needs to be recovered somehow).
This means that when `rtpjitterbuffer` notices a missing packet (FEC or not), it will send a lost packet event and will also mark the next buffer as a discontinuity. The lost packet event is already ignored in this case by the depayloader (it has a "might be FEC" flag).
The discont flag on the other hand will cause the following depayloader to drop any data it has currently queued up (e.g. to rebuild a fragmented frame from multiple packets), and also causes the next output to have a discont flag so this goes up to the sinks and e.g. baseaudiosink will resync its ringbuffer then (inserting silence or dropping samples as needed).
This means that with a higher FEC percentage (say 100%), you can get a theoretically higher recovery rate but nonetheless bad user experience due to data being dropped and resyncing because of the discont flag. Every lost FEC packet specifically will cause a discont flag, so the more FEC packets you have the more likely it is that one is lost and the more likely you drop data unnecessarily and cause resyncing.
I don't know how the ULPFEC designers envisioned this to be used, but I don't think it is possible to use ULPFEC as a generic FEC mechanism without further mechanisms to mitigate the above problem.
In my application I'm now adding another sequence number in an RTP header extension to distinguish between actually missing packets or only missing FEC packets or otherwise irrelevant packet loss (because recovered for example), and set the discont flag on buffers according to this second layer of sequence numbers.
Pexip (CC @hgr @fludkov) implemented a similar mechanism in the VP8/VP9 depayloaders based on actual bitstream parsing and taking: https://github.com/pexip/gst-plugins-good/commits/master
----
There are multiple things to do here
- Implement a non-stupid FEC mechanism like flexfec or whatever, and discourage usage of ULPFEC
- Document the uselessness of ULPFEC more visible so that people don't just try using it and then are disappointed that it does not improve anything or even worsens the situation
- Merge the Pexip patches in one form or another for making ULPFEC work at least for VP8/VP9
- Check if similar work can also be done for other codecs (or was done already? @hgr @fludkov)https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/580rtpstorage: Keeps duplicate2021-09-24T13:33:24ZNicolas Dufresnertpstorage: Keeps duplicateI notice that rtpstorage keeps duplicate packet for reason I don't know. But some code seems to ensure that duplicates packet are well ordered in the storage.
- https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/blob/master/gst/r...I notice that rtpstorage keeps duplicate packet for reason I don't know. But some code seems to ensure that duplicates packet are well ordered in the storage.
- https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/blob/master/gst/rtp/rtpstoragestream.c#L47
- https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/blob/master/gst/rtp/rtpstoragestream.c#L129
That gives the impression that this might be on purpose. The reason this is of interest is that I'm about to reuse the storage in rtprtxsend, and started looking in the differences. The sender don't really expect duplicates, that would be quite surprising, but it does use a GSequence to speedup the lookup, as RTX storage tends to be much bigger.
Unless there is a good reason, I would drop the duplicates and so keep the storage small. Please complain if that's wrong.
cc @fludkov @mehhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/752tsdemux: choppy playback with PCR updates2021-09-29T10:00:55ZStéphane Cerveauscerveau@igalia.comtsdemux: choppy playback with PCR updatesWith master branch of gst-plugins-bad, the attached files is choppy.
[rgb.ts](/uploads/cb7d33d6960330f13f0d906a1db49f01/rgb.ts)
According to the first investigations, it seems to be related to a wrong pcr_offset calculation.
Changing...With master branch of gst-plugins-bad, the attached files is choppy.
[rgb.ts](/uploads/cb7d33d6960330f13f0d906a1db49f01/rgb.ts)
According to the first investigations, it seems to be related to a wrong pcr_offset calculation.
Changing calculation mpegtspacketizer.c +1853 to by example:
pcr_offset = lastpcr - pcr;
The audio plays smoothly but the video playback is stopped(wrong pts).Jan SchmidtJan Schmidthttps://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/927tsdemux: choppy playback with PCR updates2021-09-29T10:00:58ZStéphane Cerveauscerveau@igalia.comtsdemux: choppy playback with PCR updatesWith master branch of gst-plugins-bad, the attached files is choppy.
[rgb.ts](/uploads/f3bdb98dfabdc519c8386fb8cbdf09f0/rgb.ts)
According to the first investigations, it seems to be related to a wrong pcr_offset calculation.
Changing...With master branch of gst-plugins-bad, the attached files is choppy.
[rgb.ts](/uploads/f3bdb98dfabdc519c8386fb8cbdf09f0/rgb.ts)
According to the first investigations, it seems to be related to a wrong pcr_offset calculation.
Changing calculation mpegtspacketizer.c +1853 to by example:
pcr_offset = lastpcr - pcr;
The audio plays smoothly but the video playback is stopped(wrong pts).Jan SchmidtJan Schmidthttps://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/579gst_segment_do_seek: assertion 'start <= stop' failed2021-09-24T13:33:23ZSebastiengst_segment_do_seek: assertion 'start <= stop' failedThe bug has been reported on https://bugs.launchpad.net/ubuntu/+source/totem/+bug/1820883
Using GNOME 3.32 and gstreamer 1.15.2
* record a video using cheese (webm format)
* open it in totem
* pause the video and try to move frames forw...The bug has been reported on https://bugs.launchpad.net/ubuntu/+source/totem/+bug/1820883
Using GNOME 3.32 and gstreamer 1.15.2
* record a video using cheese (webm format)
* open it in totem
* pause the video and try to move frames forward/backward using . and ,
'press the ',' key once: nothing happens; press again goes forward to end video
after pressing ',' the '.' (dot) key does nothing but i have a message:
(totem:31585): GStreamer-CRITICAL **: 18:15:31.465: gst_segment_do_seek: assertion 'start <= stop' failed
pressing dot again it goes 1 frame forward'
backtrace
```
(gdb) bt
#0 0x00007ffff7e0cda0 in g_log
(log_domain=0x7ffff6fd1990 <g_log_domain_gstreamer> "GStreamer", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7ffff7e5c77c "%s: assertion '%s' failed") at ../../../glib/gmessages.c:1409
#1 0x00007ffff7e0d629 in g_return_if_fail_warning
(log_domain=<optimized out>, pretty_function=pretty_function@entry=0x7ffff6fee980 <__FUNCTION__.24275> "gst_segment_do_seek", expression=expression@entry=0x7ffff6fee60e "start <= stop") at ../../../glib/gmessages.c:2767
#2 0x00007ffff6f95d69 in gst_segment_do_seek
(segment=segment@entry=0x7fffffffa3e0, rate=<optimized out>, format=<optimized out>, flags=3, start_type=<optimized out>, start=<optimized out>, stop_type=<optimized out>, stop=0, update=0x7fffffffa3a4) at gstsegment.c:309
#3 0x00007fffd4028bba in gst_matroska_demux_handle_seek_event
(demux=demux@entry=0x555556471010 [GstMatroskaDemux], pad=pad@entry=0x7fffb017a860 [GstPad], event=event@entry=0x5555564d3d50 [GstEvent])
at matroska-demux.c:2708
#4 0x00007fffd402b5be in gst_matroska_demux_handle_seek_push
(event=<optimized out>, pad=<optimized out>, demux=<optimized out>)
at matroska-demux.c:3007
#5 0x00007fffd402b5be in gst_matroska_demux_handle_src_event
(pad=0x7fffb017a860 [GstPad], parent=<optimized out>, event=0x5555564d3d50 [GstEvent]) at matroska-demux.c:3044
#6 0x00007ffff6f6ea17 in gst_pad_send_event_unchecked
--Type <RET> for more, q to quit, c to continue without paging--
(pad=pad@entry=0x7fffb017a860 [GstPad], event=event@entry=0x5555564d3d50 [GstEvent], type=<optimized out>, type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5765
#7 0x00007ffff6f6ef64 in gst_pad_push_event_unchecked
(pad=pad@entry=0x7fffb017aab0 [GstMultiQueuePad], event=event@entry=0x5555564d3d50 [GstEvent], type=type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5410
#8 0x00007ffff6f782de in gst_pad_push_event
(pad=0x7fffb017aab0 [GstMultiQueuePad], event=0x5555564d3d50 [GstEvent])
at gstpad.c:5547
#9 0x00007ffff6f6ea17 in gst_pad_send_event_unchecked
(pad=pad@entry=0x7fffb017ad00 [GstPad], event=event@entry=0x5555564d3d50 [GstEvent], type=<optimized out>, type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5765
#10 0x00007ffff6f6ef64 in gst_pad_push_event_unchecked
(pad=pad@entry=0x7fffb017af50 [GstPad], event=event@entry=0x5555564d3d50 [GstEvent], type=type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at gstpad.c:5410
#11 0x00007ffff6f782de in gst_pad_push_event
(pad=0x7fffb017af50 [GstPad], event=0x5555564d3d50 [GstEvent])
at gstpad.c:5547
#12 0x00007ffff70857d6 in () at /usr/lib/x86_64-linux-gnu/libgstvideo-1.0.so.0
#13 0x00007ffff6f6ea17 in gst_pad_send_event_unchecked
(pad=pad@entry=0x7fffb017b1a0 [GstPad], event=event@entry=0x5555564d3d50 [Gs--Type <RET> for more, q to quit, c to continue without paging--
tEvent], type=<optimized out>, type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5765
#14 0x00007ffff6f6ef64 in gst_pad_push_event_unchecked
(pad=pad@entry=0x555555d5d3b0 [GstProxyPad], event=event@entry=0x5555564d3d50 [GstEvent], type=type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5410
#15 0x00007ffff6f782de in gst_pad_push_event
(pad=pad@entry=0x555555d5d3b0 [GstProxyPad], event=0x5555564d3d50 [GstEvent]) at gstpad.c:5547
#16 0x00007ffff6f78814 in event_forward_func
(pad=pad@entry=0x555555d5d3b0 [GstProxyPad], data=data@entry=0x7fffffffac70) at ../gst/gstevent.h:438
#17 0x00007ffff6f74b4e in gst_pad_forward
(pad=pad@entry=0x7fffb0024090 [GstDecodePad], forward=forward@entry=0x7ffff6f78750 <event_forward_func>, user_data=user_data@entry=0x7fffffffac70)
at gstpad.c:3008
#18 0x00007ffff6f74c95 in gst_pad_event_default
(pad=0x7fffb0024090 [GstDecodePad], parent=<optimized out>, event=0x5555564d3d50 [GstEvent]) at gstpad.c:3105
#19 0x00007ffff6f6ea17 in gst_pad_send_event_unchecked
(pad=pad@entry=0x7fffb0024090 [GstDecodePad], event=event@entry=0x5555564d3d50 [GstEvent], type=<optimized out>,
type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at gstpad.c:5765
--Type <RET> for more, q to quit, c to continue without paging--
#20 0x00007ffff6f6ef64 in gst_pad_push_event_unchecked
(pad=pad@entry=0x7fff940287e0 [GstProxyPad], event=event@entry=0x5555564d3d50 [GstEvent], type=type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5410
#21 0x00007ffff6f782de in gst_pad_push_event
(pad=pad@entry=0x7fff940287e0 [GstProxyPad], event=0x5555564d3d50 [GstEvent]) at gstpad.c:5547
#22 0x00007ffff6f78814 in event_forward_func
(pad=pad@entry=0x7fff940287e0 [GstProxyPad], data=data@entry=0x7fffffffaf30) at ../gst/gstevent.h:438
#23 0x00007ffff6f74b4e in gst_pad_forward
(pad=pad@entry=0x555555d5ab30 [GstGhostPad], forward=forward@entry=0x7ffff6f78750 <event_forward_func>, user_data=user_data@entry=0x7fffffffaf30)
at gstpad.c:3008
#24 0x00007ffff6f74c95 in gst_pad_event_default
(pad=0x555555d5ab30 [GstGhostPad], parent=<optimized out>, event=0x5555564d3d50 [GstEvent]) at gstpad.c:3105
#25 0x00007ffff6f6ea17 in gst_pad_send_event_unchecked
(pad=pad@entry=0x555555d5ab30 [GstGhostPad], event=event@entry=0x5555564d3d50 [GstEvent], type=<optimized out>,
type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at gstpad.c:5765
#26 0x00007ffff6f6ef64 in gst_pad_push_event_unchecked
(pad=pad@entry=0x7fff900280b0 [GstSelectorPad], event=event@entry=0x5555564d--Type <RET> for more, q to quit, c to continue without paging--
3d50 [GstEvent], type=type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5410
#27 0x00007ffff6f782de in gst_pad_push_event
(pad=pad@entry=0x7fff900280b0 [GstSelectorPad], event=event@entry=0x5555564d3d50 [GstEvent]) at gstpad.c:5547
#28 0x00007fffe9a34373 in gst_input_selector_event
(pad=0x7fff94032600 [GstPad], parent=<optimized out>, event=0x5555564d3d50 [GstEvent]) at gstinputselector.c:1559
#29 0x00007ffff6f6ea17 in gst_pad_send_event_unchecked
(pad=pad@entry=0x7fff94032600 [GstPad], event=event@entry=0x5555564d3d50 [GstEvent], type=<optimized out>, type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5765
#30 0x00007ffff6f6ef64 in gst_pad_push_event_unchecked
(pad=pad@entry=0x555555d5b2b0 [GstGhostPad], event=event@entry=0x5555564d3d50 [GstEvent], type=type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5410
```https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/192examples/glupload: Make use of GLSyncMeta to ensure textures are ready to be ...2019-04-08T19:55:06ZSebastian Drögeexamples/glupload: Make use of GLSyncMeta to ensure textures are ready to be used before using themSee https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/merge_requests/243 and https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/merge_requests/156 (or more specifically https://gitlab.freedesktop.org/gstreamer/gst-plugins-base...See https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/merge_requests/243 and https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/merge_requests/156 (or more specifically https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/b5aa304f201d0805de2b33ab97d293654baa12cd?merge_request_iid=156 )
CC @vjaquezVíctor Manuel Jáquez LealVíctor Manuel Jáquez Lealhttps://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/568macOS gst-plugins-base/gl/cocoa: UI API called on a background thread: -[NSVi...2019-04-30T15:23:35ZRoman ShpuntovmacOS gst-plugins-base/gl/cocoa: UI API called on a background thread: -[NSView removeFromSuperview]I faced with the strange problem on my macbook pro 2018 with macOS 10.14.3 (Mojave), xcode 10.1. I use gstreamer 1.15.2 package downloaded from https://gstreamer.freedesktop.org. I tried to use my self app and test app from gl examples (...I faced with the strange problem on my macbook pro 2018 with macOS 10.14.3 (Mojave), xcode 10.1. I use gstreamer 1.15.2 package downloaded from https://gstreamer.freedesktop.org. I tried to use my self app and test app from gl examples (gst-plugins-bad/tests/examples/gl/cocoa/cocoa-videooverlay.m master branch) and I have the same results. When I run app all fine, but after on close window or end playback by EOS event (please see source code of the test example) I have the next output inside xcode console:
```
2019-03-14 22:36:16.344887+0000 test123[88544:4060512] [default] Unable to load Info.plist exceptions (eGPUOverrides)
app created
2019-03-14 22:36:16.487001+0000 test123[88544:4060510] MessageTracer: Falling back to default whitelist
setting window handle 4311748848d
end of stream
=================================================================
Main Thread Checker: UI API called on a background thread: -[NSView removeFromSuperview]
PID: 88544, TID: 4060531, Thread name: gstglcontext, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4 libgstgl-1.0.0.dylib 0x00000001007b7727 gst_gl_window_cocoa_close + 103
5 libgstgl-1.0.0.dylib 0x000000010079486a gst_gl_context_create_thread + 714
6 libglib-2.0.0.dylib 0x0000000100c5259a g_thread_proxy + 90
7 libsystem_pthread.dylib 0x0000000100df4e35 _pthread_body + 126
8 libsystem_pthread.dylib 0x0000000100df7ec7 _pthread_start + 70
9 libsystem_pthread.dylib 0x0000000100df3e51 thread_start + 13
2019-03-14 22:36:36.524495+0000 test123[88544:4060531] [reports] Main Thread Checker: UI API called on a background thread: -[NSView removeFromSuperview]
PID: 88544, TID: 4060531, Thread name: gstglcontext, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4 libgstgl-1.0.0.dylib 0x00000001007b7727 gst_gl_window_cocoa_close + 103
5 libgstgl-1.0.0.dylib 0x000000010079486a gst_gl_context_create_thread + 714
6 libglib-2.0.0.dylib 0x0000000100c5259a g_thread_proxy + 90
7 libsystem_pthread.dylib 0x0000000100df4e35 _pthread_body + 126
8 libsystem_pthread.dylib 0x0000000100df7ec7 _pthread_start + 70
9 libsystem_pthread.dylib 0x0000000100df3e51 thread_start + 13
```
I copied the source code of cocoa-videooverlay.m to simple new test project. If I run this test app from console everything is fine: I have not this error on output. Log:
app created
setting window handle 140348288476096d
end of stream
As far as I understand this not good to finalize NSview operation inside separate thread.
I know about issue #372 , but I think this is separate issue, because OpenGL and OpenGLES is different.https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/131Download progress on CI is overly verbose2019-03-20T14:16:26ZTim-Philipp Müllertim@centricular.comDownload progress on CI is overly verboseEasily 14,000 lines, example:
```
GET https://gitlab.freedesktop.org/gstreamer/cerbero/-/jobs/artifacts/master/raw/cerbero-build/cerbero-deps.log?job=cerbero+deps+android+universal
Downloading https://gitlab.freedesktop.org/gstreamer/ce...Easily 14,000 lines, example:
```
GET https://gitlab.freedesktop.org/gstreamer/cerbero/-/jobs/artifacts/master/raw/cerbero-build/cerbero-deps.log?job=cerbero+deps+android+universal
Downloading https://gitlab.freedesktop.org/gstreamer/cerbero/-/jobs/175960/artifacts/raw/cerbero-deps.tar.gz
--2019-03-19 13:17:34-- https://gitlab.freedesktop.org/gstreamer/cerbero/-/jobs/175960/artifacts/raw/cerbero-deps.tar.gz
Resolving gitlab.freedesktop.org (gitlab.freedesktop.org)... 35.185.111.185
Connecting to gitlab.freedesktop.org (gitlab.freedesktop.org)|35.185.111.185|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 721442353 (688M) [application/gzip]
Saving to: ‘/builds/gstreamer/gst-plugins-base/cerbero-build/cerbero-deps.tar.gz’
0K .......... .......... .......... .......... .......... 0% 242K 48m27s
50K .......... .......... .......... .......... .......... 0% 485K 36m19s
100K .......... .......... .......... .......... .......... 0% 66.7M 24m16s
< snip 14,000 lines of ouput >
704400K .......... .......... .......... .......... .......... 99% 95.7M 0s
704450K .......... .......... .......... .......... .......... 99% 118M 0s
704500K .......... .......... .......... ... 100% 132M=50s
2019-03-19 13:18:25 (13.8 MB/s) - ‘/builds/gstreamer/gst-plugins-base/cerbero-build/cerbero-deps.tar.gz’ saved [721442353/721442353]
```
Is there a way to make it less spammy?https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/578Custom meta-data "disappears" on omxh264dec from SINK to SRC2020-06-19T21:24:23ZJimmy PetterssonCustom meta-data "disappears" on omxh264dec from SINK to SRCMy meta-data disappears on omxh264dec after attaching it on the SINK. This appears to only happen on elements that change memory types, ex:
from video/x-264 --> video/x-raw
**My use-case**
I have a simple custom meta-data structure th...My meta-data disappears on omxh264dec after attaching it on the SINK. This appears to only happen on elements that change memory types, ex:
from video/x-264 --> video/x-raw
**My use-case**
I have a simple custom meta-data structure that I attach to a GstBuffer for timing purposes:
```cpp
/** Timing meta data to be appended to buffers **/
typedef struct _TimingMeta TimingMeta;
struct _TimingMeta {
GstMeta meta;
GstClockTime timestamp;
GstClockTime captureTime;
};
```
I am able to "inject"/"extract" the meta data for general elements where for example the CAPS are all "video/x-raw", like so:
```cpp
GstBuffer *buffer = GST_PAD_PROBE_INFO_BUFFER (info);
TimingMeta* timingMeta = gst_buffer_get_timing_meta(buffer);
```https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/issues/142vaapipostproc: src output RGBA when specify format=argb2019-04-15T14:01:01ZU. Artie Eoffvaapipostproc: src output RGBA when specify format=argb```
$ gst-launch-1.0 -vf videotestsrc num-buffers=1 \
! video/x-raw,format=NV12,width=720,height=480 \
! vaapipostproc format=argb \
! filesink location=out-vpp-ARGB.rgb
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Go...```
$ gst-launch-1.0 -vf videotestsrc num-buffers=1 \
! video/x-raw,format=NV12,width=720,height=480 \
! vaapipostproc format=argb \
! filesink location=out-vpp-ARGB.rgb
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Got context from element 'vaapipostproc0': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplayX11\)\ gldisplayx11-0";
Got context from element 'vaapipostproc0': gst.vaapi.Display=context, gst.vaapi.Display=(GstVaapiDisplay)"\(GstVaapiDisplayGLX\)\ vaapidisplayglx0";
/GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = video/x-raw, format=(string)NV12, width=(int)720, height=(int)480, framerate=(fraction)30/1, multiview-mode=(string)mono, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw, format=(string)NV12, width=(int)720, height=(int)480, framerate=(fraction)30/1, multiview-mode=(string)mono, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstVaapiPostproc:vaapipostproc0.GstPad:src: caps = video/x-raw, format=(string)RGBA, width=(int)720, height=(int)480, framerate=(fraction)30/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, colorimetry=(string)sRGB
/GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps = video/x-raw, format=(string)RGBA, width=(int)720, height=(int)480, framerate=(fraction)30/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, colorimetry=(string)sRGB
/GstPipeline:pipeline0/GstVaapiPostproc:vaapipostproc0.GstPad:src: caps = video/x-raw, format=(string)RGBA, width=(int)720, height=(int)480, framerate=(fraction)30/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, colorimetry=(string)sRGB
/GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps = video/x-raw, format=(string)RGBA, width=(int)720, height=(int)480, framerate=(fraction)30/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, colorimetry=(string)sRGB
/GstPipeline:pipeline0/GstVaapiPostproc:vaapipostproc0.GstPad:sink: caps = video/x-raw, format=(string)NV12, width=(int)720, height=(int)480, framerate=(fraction)30/1, multiview-mode=(string)mono, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-raw, format=(string)NV12, width=(int)720, height=(int)480, framerate=(fraction)30/1, multiview-mode=(string)mono, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 0:00:00.000477780
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
```
If we use videoconvert instead of vaapipostproc, the output is ARGB as expected.https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/577Fails to build on Mac OS 10.14, where OpenGL and lockFocusIfCanDraw are depre...2019-04-09T01:30:16ZDan KegelFails to build on Mac OS 10.14, where OpenGL and lockFocusIfCanDraw are deprecatedSymptom 1:
```
./cocoawindow.h:35:24: error: 'NSOpenGLView' is deprecated: first deprecated in macOS 10.14 - Please use MTKView instead. [-Werror,-Wdeprecated-declarations]
make[3]: *** [libgstosxvideo_la-osxvideosink.lo] Error 1
```
Us...Symptom 1:
```
./cocoawindow.h:35:24: error: 'NSOpenGLView' is deprecated: first deprecated in macOS 10.14 - Please use MTKView instead. [-Werror,-Wdeprecated-declarations]
make[3]: *** [libgstosxvideo_la-osxvideosink.lo] Error 1
```
Usual workaround is to define GL_SILENCE_DEPRECATION.
Symptom 2:
```
cocoawindow.m:565:13: error: 'lockFocusIfCanDraw' is deprecated: first deprecated in macOS 10.14 - To draw, subclass NSView and implement -drawRect:; AppKit's automatic deferred
display mechanism will call -drawRect: as necessary to display the view. [-Werror,-Wdeprecated-declarations]
if ([self lockFocusIfCanDraw]) {
^
/System/Library/Frameworks/AppKit.framework/Headers/NSView.h:237:1: note: 'lockFocusIfCanDraw' has been explicitly marked deprecated here
```
That's also a deprecation, but doesn't have a nice macro to disable it, so until it's fixed, have to turn them off globally (for mac os 10.14, anyway).https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/926nvdec: Limit supported h264/5 profiles on the sinkpad caps2019-08-21T07:21:19ZSebastian Drögenvdec: Limit supported h264/5 profiles on the sinkpad capsCurrently nvdec claims to support any possible profile. This is not true, at least with the current implementation. Profiles like h264's high10 are not support for example (also simply because we currently only support outputting 8 bit N...Currently nvdec claims to support any possible profile. This is not true, at least with the current implementation. Profiles like h264's high10 are not support for example (also simply because we currently only support outputting 8 bit NV12).
I don't know if there's API for querying from the available card or how to implement this, but the way how it is now the nvdec element is selected by e.g. playbin although the stream is not supported.https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/925simplevideomarkdetect: Segfault setting `pattern-width=2147483647` value2021-09-24T14:37:05ZThibault Sauniertsaunier@igalia.comsimplevideomarkdetect: Segfault setting `pattern-width=2147483647` value**Test name**: `validateelements.launch_pipeline.simplevideomarkdetectpattern-width=2147483647.play_15s`
**Command**:
``` bash
GST_GL_XINITTHREADS='1' GST_VALIDATE_SCENARIO='play_15s' DISPLAY=':0' GST_VALIDATE_SCENARIOS_PATH='/home/thi...**Test name**: `validateelements.launch_pipeline.simplevideomarkdetectpattern-width=2147483647.play_15s`
**Command**:
``` bash
GST_GL_XINITTHREADS='1' GST_VALIDATE_SCENARIO='play_15s' DISPLAY=':0' GST_VALIDATE_SCENARIOS_PATH='/home/thiblahute/devel/gstreamer/gst-build/prefix/share/gstreamer-1.0/validate/scenarios:/home/thiblahute/devel/gstreamer/gst-build/subprojects/gst-devtools/validate/data/scenarios' /home/thiblahute/devel/gstreamer/gst-build/build/subprojects/gst-devtools/validate/tools/gst-validate-1.0 videotestsrc num-buffers=20 '!' simplevideomarkdetect pattern-width=2147483647 '!' videoconvert '!' autovideosink
```
**-> Running scenario play_15s on pipeline pipeline0**
Starting pipeline
Prerolling...
Pipeline started
<Caught SIGNAL: SIGSEGV>
Please run 'gdb <process-name> 5264' to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core.
**Stack trace**:
```
[New LWP 5265]
[New LWP 5268]
[New LWP 5270]
[New LWP 5271]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007f2937051bf9 in __GI___poll (fds=0x555e29aa92e0, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
29 ../sysdeps/unix/sysv/linux/poll.c: No such file or directory.
Thread 5 (Thread 0x7f291f052700 (LWP 5271)):
#0 0x00007f29370219d0 in __GI___nanosleep (requested_time=0x7f291f050df0, remaining=0x7f291f050e00) at ../sysdeps/unix/sysv/linux/nanosleep.c:28
#1 0x00007f29379967df in g_usleep () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007f2937fa7afa in fault_spin () at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-utils.c:865
#3 0x00007f2937fa7afa in fault_handler_sighandler (signum=11) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-utils.c:887
#4 0x00007f2936f7bf20 in <signal handler called> () at /lib/x86_64-linux-gnu/libc.so.6
#5 0x00007f2920f525c0 in gst_video_detect_calc_brightness (simplevideomarkdetect=<optimized out>, pixel_stride=<optimized out>, row_stride=<optimized out>, height=<optimized out>, width=<optimized out>, data=0x7f2938395800 '\020' <repeats 53 times>, '\353' <repeats 53 times>, '\020' <repeats 54 times>) at ../subprojects/gst-plugins-bad/gst/videosignal/gstsimplevideomarkdetect.c:400
#6 0x00007f2920f525c0 in gst_video_detect_yuv (frame=0x7f291f051640, simplevideomarkdetect=0x555e29a66be0) at ../subprojects/gst-plugins-bad/gst/videosignal/gstsimplevideomarkdetect.c:476
#7 0x00007f2920f525c0 in gst_video_detect_transform_frame_ip (filter=<optimized out>, frame=0x7f291f051640) at ../subprojects/gst-plugins-bad/gst/videosignal/gstsimplevideomarkdetect.c:573
#8 0x00007f2934aa32a4 in gst_video_filter_transform_ip (trans=0x555e29a66be0, buf=0x555e29aa85a0) at ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideofilter.c:321
#9 0x00007f2936acd60c in default_generate_output (trans=0x555e29a66be0, outbuf=0x7f291f051950) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2136
#10 0x00007f2936acce94 in gst_base_transform_chain (pad=<optimized out>, parent=0x555e29a66be0, buffer=<optimized out>) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2294
#11 0x00007f2937f95f0a in gst_validate_pad_monitor_chain_func (pad=0x555e29a64300, parent=0x555e29a66be0, buffer=0x555e29aa85a0) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2272
#12 0x00007f2937cb9433 in gst_pad_chain_data_unchecked (data=0x555e29aa85a0, type=4112, pad=0x555e29a64300) at ../subprojects/gstreamer/gst/gstpad.c:4326
#13 0x00007f2937cb9433 in gst_pad_push_data (pad=pad@entry=0x555e29a640b0, type=type@entry=4112, data=data@entry=0x555e29aa85a0) at ../subprojects/gstreamer/gst/gstpad.c:4582
#14 0x00007f2937cc1ac3 in gst_pad_push (pad=pad@entry=0x555e29a640b0, buffer=0x555e29aa85a0) at ../subprojects/gstreamer/gst/gstpad.c:4701
#15 0x00007f2936ac83ed in gst_base_src_loop (pad=0x555e29a640b0) at ../subprojects/gstreamer/libs/gst/base/gstbasesrc.c:2966
#16 0x00007f2937cef019 in gst_task_func (task=0x555e29aa8050) at ../subprojects/gstreamer/gst/gsttask.c:328
#17 0x00007f2937995ad0 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#18 0x00007f2937995105 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#19 0x00007f29360a86db in start_thread (arg=0x7f291f052700) at pthread_create.c:463
#20 0x00007f293705e88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 4 (Thread 0x7f291f853700 (LWP 5270)):
#0 0x00007f29370219d0 in __GI___nanosleep (requested_time=0x7f291f852c30, remaining=0x7f291f852c40) at ../sysdeps/unix/sysv/linux/nanosleep.c:28
#1 0x00007f29379967df in g_usleep () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007f291fa652f3 in gst_xv_image_sink_event_thread (xvimagesink=0x555e29a96000) at ../subprojects/gst-plugins-base/sys/xvimage/xvimagesink.c:586
#3 0x00007f2937995105 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4 0x00007f29360a86db in start_thread (arg=0x7f291f853700) at pthread_create.c:463
#5 0x00007f293705e88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 3 (Thread 0x7f292046c700 (LWP 5268)):
#0 0x00007f2937051bf9 in __GI___poll (fds=0x555e29a89d50, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x00007f293796d539 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007f293796d8d2 in g_main_loop_run () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007f29373fd026 in () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#4 0x00007f2937995105 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#5 0x00007f29360a86db in start_thread (arg=0x7f292046c700) at pthread_create.c:463
#6 0x00007f293705e88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 2 (Thread 0x7f2931eda700 (LWP 5265)):
#0 0x00007f2937051bf9 in __GI___poll (fds=0x555e297d0320, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x00007f293796d539 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007f293796d64c in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007f293796d691 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4 0x00007f2937995105 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#5 0x00007f29360a86db in start_thread (arg=0x7f2931eda700) at pthread_create.c:463
#6 0x00007f293705e88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 1 (Thread 0x7f29383a1880 (LWP 5264)):
#0 0x00007f2937051bf9 in __GI___poll (fds=0x555e29aa92e0, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x00007f293796d539 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007f293796d8d2 in g_main_loop_run () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x0000555e28343ed1 in main (argc=<optimized out>, argv=<optimized out>) at ../subprojects/gst-devtools/validate/tools/gst-validate.c:526
```https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/576v4l2: Incompatible pointer type compiler error on musl2023-07-02T16:40:30ZW. Michael Petullov4l2: Incompatible pointer type compiler error on muslThe musl C library defines ioctl thusly:
int ioctl (int, int, ...);
However, gstv4l2object.h defines GstV4l2Object's ioctl field as:
gint (*ioctl) (gint fd, ioctl_req_t request, ...);
and, except when `__ANDROID__` is defined...The musl C library defines ioctl thusly:
int ioctl (int, int, ...);
However, gstv4l2object.h defines GstV4l2Object's ioctl field as:
gint (*ioctl) (gint fd, ioctl_req_t request, ...);
and, except when `__ANDROID__` is defined, gstv4l2object.h defines ioctl_req_t as a gulong.
This causes a warning when building gst-plugins-good against musl:
CC libgstvideo4linux2_la-gstv4l2object.lo
gstv4l2object.c: In function 'gst_v4l2_object_new':
gstv4l2object.c:532:23: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
v4l2object->ioctl = ioctl;
^
cc1: all warnings being treated as errors
It looks like gstv4l2object.hhttps://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/92332-bit Windows GStreamer 1.15.2 bug in ogg-opus decoding2021-09-24T14:37:04ZAndy Robinson32-bit Windows GStreamer 1.15.2 bug in ogg-opus decodingI'm using Windows 10 and the msi installer for GStreamer, with the following command:
gst-launch-1.0 filesrc location="AfterTheRainJC.ogg" ! decodebin ! audioconvert ! audioresample ! wavenc ! filesink location=out.wav
The attached fil...I'm using Windows 10 and the msi installer for GStreamer, with the following command:
gst-launch-1.0 filesrc location="AfterTheRainJC.ogg" ! decodebin ! audioconvert ! audioresample ! wavenc ! filesink location=out.wav
The attached file "AfterTheRainJC.ogg" decodes fine using GStreamer 64-bit.
But using GStreamer 32-bit, whether on 32-bit Windows or 64-bit Windows, we just get a very short wav file containing silence.
(I did report this before, but here I am giving the report a much more specific title)
[AfterTheRainJC.ogg](/uploads/112dca76185aa4f0d78400e24f1a9cf8/AfterTheRainJC.ogg)https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/922[gstreamer-msdk][vpp][deinterlace]the cmdline will fail when add param "inter...2021-09-24T14:37:04Zwangzhanjun[gstreamer-msdk][vpp][deinterlace]the cmdline will fail when add param "interlaced=true top-field-first=1" in rawvideoparse* System Environment:
* Platform: KBL
* Arch: x86_64
* Kernel: 4.18.0+
* libva commit 0dc70068e49f9538fbd03f2f0aa1e56a91e986e7
* MediaSdk commit d23d66991d10d8c7347e33ef0ab116a7090d6cbb
* gmmlib commit ac68e2cebf9774b17bc8a4057d309...* System Environment:
* Platform: KBL
* Arch: x86_64
* Kernel: 4.18.0+
* libva commit 0dc70068e49f9538fbd03f2f0aa1e56a91e986e7
* MediaSdk commit d23d66991d10d8c7347e33ef0ab116a7090d6cbb
* gmmlib commit ac68e2cebf9774b17bc8a4057d30959117222127
* media_driver commit 7a35908c575306d3764dfb98e8e6b83d185ffea1
* gstreamer master branch e322250fb1d1c31692d1e97e3de19ead6b016d7f
* gst-plugins-base commit b0faf032d20456b3006bf33c79db30ceb96d6ea8
* gst-plugins-bad commit 350187434dd107396f10306051e36fad0849c11d
*
* Bug detailed description:
* the cmdline will fail when add param "interlaced=true top-field-first=1" in rawvideoparse
* this issue can not be duplicated on gst-vaapi
* Reproduce Steps:
1. build env as above
2. gst-launch-1.0 -vf filesrc location=./interlaced_720x480_input_nv12.yuv num-buffers=20 ! rawvideoparse format=nv12 width=720 height=480 interlaced=true top-field-first=1 ! msdkvpp hardware=true ! fakesink
3. error info
0:00:00.018068013 7648 0xae8800 ERROR msdkvpp gstmsdkvpp.c:739:gst_msdkvpp_transform:<msdkvpp0> MSDK Failed to do VPP
(gst-launch-1.0:7648): GStreamer-CRITICAL **: gst_buffer_resize_range: assertion 'bufmax >= bufoffs + offset + size' failed
ERROR: from element /GstPipeline:pipeline0/GstRawVideoParse:rawvideoparse0: Internal data stream error.
Additional debug info:
gstbaseparse.c(3634): gst_base_parse_loop (): /GstPipeline:pipeline0/GstRawVideoParse:rawvideoparse0:
streaming stopped, reason error (-5)https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/130Gstreamer cross compile error on iOS2019-03-14T13:32:26ZGanesh KumarGstreamer cross compile error on iOSHi,
I cross compiling the GStremer for iOS using cerbero. But I struck with following error.
How to resolve it ? Thanks in advance.
**Command =**
./cerbero-uninstalled -c config/cross-ios-arm7.cbc build gstreamer-1.0
**Log=**
...
...Hi,
I cross compiling the GStremer for iOS using cerbero. But I struck with following error.
How to resolve it ? Thanks in advance.
**Command =**
./cerbero-uninstalled -c config/cross-ios-arm7.cbc build gstreamer-1.0
**Log=**
...
Library rt found: NO
Program g-ir-scanner skipped: feature introspection disabled
Using meson's python ['/usr/local/opt/python/bin/python3.7']
Determining dependency 'bash-completion' with pkg-config executable
'/Users/lifestyle/Gstreamer/gstreamer_android/cerbero/build/build-tools/bin/pkg-config'
Called `/Users/Gnash/Gstreamer/gstreamer_android/cerbero/build/build-tools/bin/pkg-config --modversion bash-completion` -> 1
type object 'ExternalProgram' has no attribute 'from_cross_info'
Cross dependency bash-completion found: NO (tried pkgconfig and framework)
Configuring gstconfig.h using configuration
Configuring gstversion.h using configuration
**gst/meson.build:206:0: ERROR: Program(s) ['glib-mkenums', 'mkenums'] not found or not executable**
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/918gstreamer1.x VDPAU h2642019-03-14T08:32:36ZGuXiWeigstreamer1.x VDPAU h264Hi, I want to use vdpau to decoding h264. the gst-launch version is 1.8.1. I can not find vdpauh264dec, only:
![image](/uploads/4da3b027eb7844d0360911f64f49a44a/image.png)
Is 1.x not support vdpau or i need some plugins? Thanks a lot.Hi, I want to use vdpau to decoding h264. the gst-launch version is 1.8.1. I can not find vdpauh264dec, only:
![image](/uploads/4da3b027eb7844d0360911f64f49a44a/image.png)
Is 1.x not support vdpau or i need some plugins? Thanks a lot.https://gitlab.freedesktop.org/gstreamer/orc/-/issues/17Orc compiled code is not friendly to Intel IBT2024-01-26T09:26:17ZPaolo BonziniOrc compiled code is not friendly to Intel IBTIBT (indirect branch tracking) is a new security feature which marks indirect branch targets specially, and causes a SIGSEGV if the target of an indirect branch is not marked properly. In order for IBT to be enabled, all shared librarie...IBT (indirect branch tracking) is a new security feature which marks indirect branch targets specially, and causes a SIGSEGV if the target of an indirect branch is not marked properly. In order for IBT to be enabled, all shared libraries need to be marked as IBT-enabled, and in turn this means that all object files need to be marked as IBT-enabled. For an object file to be IBT-enabled, you should compile it with -fcf-protection. For most packages, distributions can just blindly add the flag, but not for Orc.
The problem in Orc is that any run-time generated code is going to be the target of an indirect branch (and also any extern symbol can potentially be one). Therefore, -fcf-protection support must be placed directly in Orc. If the compiler supports the -fcf-protection option, in order to support IBT Orc should generate an endbr32 or endbr64 instruction (respectively for 32-bit or 64-bit code) at the top of every function it generates.0.4.30