summaryrefslogtreecommitdiff
path: root/avconv.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2012-06-01 10:44:11 +0200
committerAnton Khirnov <anton@khirnov.net>2012-06-04 14:17:52 +0200
commit2f51ec2b9438e211f5b8abb2fcf5d8be678e7e8c (patch)
tree77493daf9ea951898151e964382bff675b74c02c /avconv.c
parent8eb9bf093381efdeeaaab4ebe73ca3c255325961 (diff)
avconv: split checking for active outputs out of transcode().
Diffstat (limited to 'avconv.c')
-rw-r--r--avconv.c51
1 files changed, 33 insertions, 18 deletions
diff --git a/avconv.c b/avconv.c
index cbf66c44eb..1ecd62ffe1 100644
--- a/avconv.c
+++ b/avconv.c
@@ -2855,6 +2855,35 @@ static int transcode_init(void)
return 0;
}
+/**
+ * @return 1 if there are still streams where more output is wanted,
+ * 0 otherwise
+ */
+static int need_output(void)
+{
+ int i;
+
+ for (i = 0; i < nb_output_streams; i++) {
+ OutputStream *ost = output_streams[i];
+ OutputFile *of = output_files[ost->file_index];
+ AVFormatContext *os = output_files[ost->file_index]->ctx;
+
+ if (ost->is_past_recording_time ||
+ (os->pb && avio_tell(os->pb) >= of->limit_filesize))
+ continue;
+ if (ost->frame_number > ost->max_frames) {
+ int j;
+ for (j = 0; j < of->ctx->nb_streams; j++)
+ output_streams[of->ost_index + j]->is_past_recording_time = 1;
+ continue;
+ }
+
+ return 1;
+ }
+
+ return 0;
+}
+
/*
* The following code is the main loop of the file converter
*/
@@ -2881,31 +2910,17 @@ static int transcode(void)
timer_start = av_gettime();
for (; received_sigterm == 0;) {
- int file_index, ist_index, past_recording_time = 1;
+ int file_index, ist_index;
AVPacket pkt;
int64_t ipts_min;
ipts_min = INT64_MAX;
/* check if there's any stream where output is still needed */
- for (i = 0; i < nb_output_streams; i++) {
- OutputFile *of;
- ost = output_streams[i];
- of = output_files[ost->file_index];
- os = output_files[ost->file_index]->ctx;
- if (ost->is_past_recording_time ||
- (os->pb && avio_tell(os->pb) >= of->limit_filesize))
- continue;
- if (ost->frame_number > ost->max_frames) {
- int j;
- for (j = 0; j < of->ctx->nb_streams; j++)
- output_streams[of->ost_index + j]->is_past_recording_time = 1;
- continue;
- }
- past_recording_time = 0;
- }
- if (past_recording_time)
+ if (!need_output()) {
+ av_log(NULL, AV_LOG_VERBOSE, "No more output streams to write to, finishing.\n");
break;
+ }
/* select the stream that we must read now by looking at the
smallest output pts */