diff options
author | Anton Khirnov <anton@khirnov.net> | 2012-06-01 10:44:11 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2012-06-04 14:17:52 +0200 |
commit | 2f51ec2b9438e211f5b8abb2fcf5d8be678e7e8c (patch) | |
tree | 77493daf9ea951898151e964382bff675b74c02c /avconv.c | |
parent | 8eb9bf093381efdeeaaab4ebe73ca3c255325961 (diff) | |
download | ffmpeg-2f51ec2b9438e211f5b8abb2fcf5d8be678e7e8c.tar.gz |
avconv: split checking for active outputs out of transcode().
Diffstat (limited to 'avconv.c')
-rw-r--r-- | avconv.c | 51 |
1 files changed, 33 insertions, 18 deletions
@@ -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 */ |