avconv: check output stream recording time before each frame returned from filters
authorAnton Khirnov <anton@khirnov.net>
Sun, 3 Jun 2012 09:35:38 +0000 (11:35 +0200)
committerAnton Khirnov <anton@khirnov.net>
Mon, 4 Jun 2012 12:18:34 +0000 (14:18 +0200)
There may be multiple frames returned, so with just one check we can
write more than requested to the output.

avconv.c

index c06b497..3cbdfab 100644 (file)
--- a/avconv.c
+++ b/avconv.c
@@ -1668,7 +1668,7 @@ static int poll_filters(void)
         OutputFile    *of = output_files[ost->file_index];
         int ret = 0;
 
-        if (!ost->filter || ost->is_past_recording_time)
+        if (!ost->filter)
             continue;
 
         if (!ost->filtered_frame && !(ost->filtered_frame = avcodec_alloc_frame())) {
@@ -1677,7 +1677,7 @@ static int poll_filters(void)
             avcodec_get_frame_defaults(ost->filtered_frame);
         filtered_frame = ost->filtered_frame;
 
-        while (ret >= 0) {
+        while (ret >= 0 && !ost->is_past_recording_time) {
             if (ost->enc->type == AVMEDIA_TYPE_AUDIO &&
                 !(ost->enc->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE))
                 ret = av_buffersink_read_samples(ost->filter->filter, &picref,