aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2014-06-10 17:41:57 +0200
committerAnton Khirnov <anton@khirnov.net>2014-06-12 08:34:40 +0200
commit6672f672d98cf4887e13321b6f67682cfd1273b4 (patch)
treefd2d0020a5ce032ec988d699d0e1f0bfcc1bbcc1
parent0ec75a04e5fc714bc3cd6e2a6b783e6df834ad01 (diff)
downloadffmpeg-6672f672d98cf4887e13321b6f67682cfd1273b4.tar.gz
avconv: make -shortest work with streamcopy
CC: libav-stable@libav.org (cherry picked from commit 48e50921337984ba4ec2c1cafe45d43787f84498) Signed-off-by: Anton Khirnov <anton@khirnov.net>
-rw-r--r--avconv.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/avconv.c b/avconv.c
index 64e832149c..5a7c4774c9 100644
--- a/avconv.c
+++ b/avconv.c
@@ -687,6 +687,19 @@ static int poll_filter(OutputStream *ost)
return 0;
}
+static void finish_output_stream(OutputStream *ost)
+{
+ OutputFile *of = output_files[ost->file_index];
+ int i;
+
+ ost->finished = 1;
+
+ if (of->shortest) {
+ for (i = 0; i < of->ctx->nb_streams; i++)
+ output_streams[of->ost_index + i]->finished = 1;
+ }
+}
+
/*
* Read as many frames from possible from lavfi and encode them.
*
@@ -697,7 +710,7 @@ static int poll_filter(OutputStream *ost)
*/
static int poll_filters(void)
{
- int i, j, ret = 0;
+ int i, ret = 0;
while (ret >= 0 && !received_sigterm) {
OutputStream *ost = NULL;
@@ -724,15 +737,7 @@ static int poll_filters(void)
ret = poll_filter(ost);
if (ret == AVERROR_EOF) {
- OutputFile *of = output_files[ost->file_index];
-
- ost->finished = 1;
-
- if (of->shortest) {
- for (j = 0; j < of->ctx->nb_streams; j++)
- output_streams[of->ost_index + j]->finished = 1;
- }
-
+ finish_output_stream(ost);
ret = 0;
} else if (ret == AVERROR(EAGAIN))
return 0;
@@ -2205,7 +2210,7 @@ static int process_input(void)
if (ost->source_index == ifile->ist_index + i &&
(ost->stream_copy || ost->enc->type == AVMEDIA_TYPE_SUBTITLE))
- ost->finished= 1;
+ finish_output_stream(ost);
}
}