avconv: split selecting input file out of transcode().

pull/59/head
Anton Khirnov 13 years ago
parent 2f51ec2b94
commit a508e7a1ff
  1. 43
      avconv.c

@ -2884,6 +2884,28 @@ static int need_output(void)
return 0; return 0;
} }
static int select_input_file(uint8_t *no_packet)
{
int64_t ipts_min = INT64_MAX;
int i, file_index = -1;
for (i = 0; i < nb_input_streams; i++) {
InputStream *ist = input_streams[i];
int64_t ipts = ist->last_dts;
if (ist->discard || no_packet[ist->file_index])
continue;
if (!input_files[ist->file_index]->eof_reached) {
if (ipts < ipts_min) {
ipts_min = ipts;
file_index = ist->file_index;
}
}
}
return file_index;
}
/* /*
* The following code is the main loop of the file converter * The following code is the main loop of the file converter
*/ */
@ -2912,9 +2934,6 @@ static int transcode(void)
for (; received_sigterm == 0;) { for (; received_sigterm == 0;) {
int file_index, ist_index; int file_index, ist_index;
AVPacket pkt; AVPacket pkt;
int64_t ipts_min;
ipts_min = INT64_MAX;
/* check if there's any stream where output is still needed */ /* check if there's any stream where output is still needed */
if (!need_output()) { if (!need_output()) {
@ -2922,22 +2941,8 @@ static int transcode(void)
break; break;
} }
/* select the stream that we must read now by looking at the /* select the stream that we must read now */
smallest output pts */ file_index = select_input_file(no_packet);
file_index = -1;
for (i = 0; i < nb_input_streams; i++) {
int64_t ipts;
ist = input_streams[i];
ipts = ist->last_dts;
if (ist->discard || no_packet[ist->file_index])
continue;
if (!input_files[ist->file_index]->eof_reached) {
if (ipts < ipts_min) {
ipts_min = ipts;
file_index = ist->file_index;
}
}
}
/* if none, if is finished */ /* if none, if is finished */
if (file_index < 0) { if (file_index < 0) {
if (no_packet_count) { if (no_packet_count) {

Loading…
Cancel
Save