avconv: split selecting input file out of transcode().
This commit is contained in:
parent
2f51ec2b94
commit
a508e7a1ff
43
avconv.c
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…
x
Reference in New Issue
Block a user