mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
mpeg2dec: post QoS messages when dropping a frame due to QoS
https://bugzilla.gnome.org/show_bug.cgi?id=658241
This commit is contained in:
parent
dc3013f925
commit
2cb398d20d
2 changed files with 28 additions and 1 deletions
|
@ -284,6 +284,8 @@ gst_mpeg2dec_qos_reset (GstMpeg2dec * mpeg2dec)
|
||||||
GST_OBJECT_LOCK (mpeg2dec);
|
GST_OBJECT_LOCK (mpeg2dec);
|
||||||
mpeg2dec->proportion = 1.0;
|
mpeg2dec->proportion = 1.0;
|
||||||
mpeg2dec->earliest_time = -1;
|
mpeg2dec->earliest_time = -1;
|
||||||
|
mpeg2dec->dropped = 0;
|
||||||
|
mpeg2dec->processed = 0;
|
||||||
GST_OBJECT_UNLOCK (mpeg2dec);
|
GST_OBJECT_UNLOCK (mpeg2dec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -918,10 +920,33 @@ handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
|
||||||
&& qostime <= mpeg2dec->earliest_time;
|
&& qostime <= mpeg2dec->earliest_time;
|
||||||
GST_OBJECT_UNLOCK (mpeg2dec);
|
GST_OBJECT_UNLOCK (mpeg2dec);
|
||||||
|
|
||||||
if (need_skip)
|
if (need_skip) {
|
||||||
|
GstMessage *qos_msg;
|
||||||
|
guint64 stream_time;
|
||||||
|
gint64 jitter;
|
||||||
|
|
||||||
|
mpeg2dec->dropped++;
|
||||||
|
|
||||||
|
stream_time =
|
||||||
|
gst_segment_to_stream_time (&mpeg2dec->segment, GST_FORMAT_TIME,
|
||||||
|
time);
|
||||||
|
jitter = GST_CLOCK_DIFF (qostime, mpeg2dec->earliest_time);
|
||||||
|
|
||||||
|
qos_msg =
|
||||||
|
gst_message_new_qos (GST_OBJECT_CAST (mpeg2dec), FALSE, qostime,
|
||||||
|
stream_time, time, GST_BUFFER_DURATION (outbuf));
|
||||||
|
gst_message_set_qos_values (qos_msg, jitter, mpeg2dec->proportion,
|
||||||
|
1000000);
|
||||||
|
gst_message_set_qos_stats (qos_msg, GST_FORMAT_BUFFERS,
|
||||||
|
mpeg2dec->processed, mpeg2dec->dropped);
|
||||||
|
gst_element_post_message (GST_ELEMENT_CAST (mpeg2dec), qos_msg);
|
||||||
|
|
||||||
goto dropping_qos;
|
goto dropping_qos;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mpeg2dec->processed++;
|
||||||
|
|
||||||
/* ref before pushing it out, so we still have the ref in our
|
/* ref before pushing it out, so we still have the ref in our
|
||||||
* array of buffers */
|
* array of buffers */
|
||||||
gst_buffer_ref (outbuf);
|
gst_buffer_ref (outbuf);
|
||||||
|
|
|
@ -110,6 +110,8 @@ struct _GstMpeg2dec {
|
||||||
/* QoS stuff */ /* with LOCK*/
|
/* QoS stuff */ /* with LOCK*/
|
||||||
gdouble proportion;
|
gdouble proportion;
|
||||||
GstClockTime earliest_time;
|
GstClockTime earliest_time;
|
||||||
|
guint64 processed;
|
||||||
|
guint64 dropped;
|
||||||
|
|
||||||
/* gather/decode queues for reverse playback */
|
/* gather/decode queues for reverse playback */
|
||||||
GList *gather;
|
GList *gather;
|
||||||
|
|
Loading…
Reference in a new issue