videorate: Don't fill up the segment with duplicate buffers if drop_only==TRUE

This commit is contained in:
Sebastian Dröge 2016-04-03 11:40:50 +03:00
parent eda44c640e
commit 6788003912

View file

@ -720,10 +720,11 @@ gst_video_rate_sink_event (GstBaseTransform * trans, GstEvent * event)
/* fill up to the end of current segment,
* or only send out the stored buffer if there is no specific stop.
* regardless, prevent going loopy in strange cases */
while (res == GST_FLOW_OK && count <= MAGIC_LIMIT &&
((GST_CLOCK_TIME_IS_VALID (videorate->segment.stop) &&
videorate->next_ts - videorate->segment.base
< videorate->segment.stop)
while (res == GST_FLOW_OK && count <= MAGIC_LIMIT
&& !videorate->drop_only
&& ((GST_CLOCK_TIME_IS_VALID (videorate->segment.stop)
&& videorate->next_ts - videorate->segment.base <
videorate->segment.stop)
|| count < 1)) {
res = gst_video_rate_flush_prev (videorate, count > 0);
count++;
@ -759,14 +760,15 @@ gst_video_rate_sink_event (GstBaseTransform * trans, GstEvent * event)
/* fill up to the end of current segment,
* or only send out the stored buffer if there is no specific stop.
* regardless, prevent going loopy in strange cases */
while (res == GST_FLOW_OK && count <= MAGIC_LIMIT &&
((videorate->next_ts - videorate->segment.base <
while (res == GST_FLOW_OK && count <= MAGIC_LIMIT
&& !videorate->drop_only
&& ((videorate->next_ts - videorate->segment.base <
videorate->segment.stop)
|| count < 1)) {
res = gst_video_rate_flush_prev (videorate, count > 0);
count++;
}
} else if (videorate->prevbuf) {
} else if (!videorate->drop_only && videorate->prevbuf) {
/* Output at least one frame but if the buffer duration is valid, output
* enough frames to use the complete buffer duration */
if (GST_BUFFER_DURATION_IS_VALID (videorate->prevbuf)) {