Browse Source

avconv: split checking for active outputs out of transcode().

tags/n1.0
Anton Khirnov 13 years ago
parent
commit
2f51ec2b94
1 changed files with 33 additions and 18 deletions
  1. +33
    -18
      avconv.c

+ 33
- 18
avconv.c View File

@@ -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 */


Loading…
Cancel
Save