mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
srtsrc: Prevent delay
from being negative
`delay` should be a GstClockTimeDiff since SRT time is int64_t. All values are in local time so we should never see a srctime that's in the future. If we do, clamp the delay to 0 and warn about it. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1674>
This commit is contained in:
parent
ec11ad9d55
commit
4eeff95f92
1 changed files with 11 additions and 4 deletions
|
@ -124,7 +124,7 @@ gst_srt_src_fill (GstPushSrc * src, GstBuffer * outbuf)
|
||||||
GstClock *clock;
|
GstClock *clock;
|
||||||
GstClockTime base_time;
|
GstClockTime base_time;
|
||||||
GstClockTime capture_time;
|
GstClockTime capture_time;
|
||||||
GstClockTime delay;
|
GstClockTimeDiff delay;
|
||||||
int64_t srt_time;
|
int64_t srt_time;
|
||||||
SRT_MSGCTRL mctrl;
|
SRT_MSGCTRL mctrl;
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ gst_srt_src_fill (GstPushSrc * src, GstBuffer * outbuf)
|
||||||
|
|
||||||
GST_LOG_OBJECT (src,
|
GST_LOG_OBJECT (src,
|
||||||
"recv_len:%" G_GSIZE_FORMAT " pktseq:%d msgno:%d srctime:%"
|
"recv_len:%" G_GSIZE_FORMAT " pktseq:%d msgno:%d srctime:%"
|
||||||
G_GUINT64_FORMAT, recv_len, mctrl.pktseq, mctrl.msgno, mctrl.srctime);
|
G_GINT64_FORMAT, recv_len, mctrl.pktseq, mctrl.msgno, mctrl.srctime);
|
||||||
|
|
||||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||||
ret = GST_FLOW_FLUSHING;
|
ret = GST_FLOW_FLUSHING;
|
||||||
|
@ -198,6 +198,15 @@ gst_srt_src_fill (GstPushSrc * src, GstBuffer * outbuf)
|
||||||
else
|
else
|
||||||
delay = 0;
|
delay = 0;
|
||||||
|
|
||||||
|
GST_LOG_OBJECT (src, "delay: %" GST_STIME_FORMAT, GST_STIME_ARGS (delay));
|
||||||
|
|
||||||
|
if (delay < 0) {
|
||||||
|
GST_WARNING_OBJECT (src,
|
||||||
|
"Calculated SRT delay %" GST_STIME_FORMAT " is negative, clamping to 0",
|
||||||
|
GST_STIME_ARGS (delay));
|
||||||
|
delay = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Subtract the base_time (since the pipeline started) ... */
|
/* Subtract the base_time (since the pipeline started) ... */
|
||||||
if (capture_time > base_time)
|
if (capture_time > base_time)
|
||||||
capture_time -= base_time;
|
capture_time -= base_time;
|
||||||
|
@ -210,8 +219,6 @@ gst_srt_src_fill (GstPushSrc * src, GstBuffer * outbuf)
|
||||||
capture_time = 0;
|
capture_time = 0;
|
||||||
GST_BUFFER_TIMESTAMP (outbuf) = capture_time;
|
GST_BUFFER_TIMESTAMP (outbuf) = capture_time;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "delay:%" GST_TIME_FORMAT, GST_TIME_ARGS (delay));
|
|
||||||
|
|
||||||
gst_buffer_resize (outbuf, 0, recv_len);
|
gst_buffer_resize (outbuf, 0, recv_len);
|
||||||
|
|
||||||
GST_LOG_OBJECT (src,
|
GST_LOG_OBJECT (src,
|
||||||
|
|
Loading…
Reference in a new issue