| @@ -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 | |||||
| smallest output pts */ | |||||
| 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; | |||||
| } | |||||
| } | |||||
| } | |||||
| /* select the stream that we must read now */ | |||||
| file_index = select_input_file(no_packet); | |||||
| /* 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) { | ||||