|
|
@ -1914,28 +1914,18 @@ static int init_input_stream(int ist_index, OutputStream *output_streams, int nb |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
static int transcode_init(OutputFile *output_files, |
|
|
|
* The following code is the main loop of the file converter |
|
|
|
int nb_output_files, |
|
|
|
*/ |
|
|
|
InputFile *input_files, |
|
|
|
static int transcode(OutputFile *output_files, |
|
|
|
int nb_input_files) |
|
|
|
int nb_output_files, |
|
|
|
|
|
|
|
InputFile *input_files, |
|
|
|
|
|
|
|
int nb_input_files) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
int ret = 0, i; |
|
|
|
int ret = 0, i; |
|
|
|
AVFormatContext *is, *os; |
|
|
|
AVFormatContext *os; |
|
|
|
AVCodecContext *codec, *icodec; |
|
|
|
AVCodecContext *codec, *icodec; |
|
|
|
OutputStream *ost; |
|
|
|
OutputStream *ost; |
|
|
|
InputStream *ist; |
|
|
|
InputStream *ist; |
|
|
|
char error[1024]; |
|
|
|
char error[1024]; |
|
|
|
int key; |
|
|
|
|
|
|
|
int want_sdp = 1; |
|
|
|
int want_sdp = 1; |
|
|
|
uint8_t *no_packet; |
|
|
|
|
|
|
|
int no_packet_count=0; |
|
|
|
|
|
|
|
int64_t timer_start; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!(no_packet = av_mallocz(nb_input_files))) |
|
|
|
|
|
|
|
exit_program(1); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (rate_emu) |
|
|
|
if (rate_emu) |
|
|
|
for (i = 0; i < nb_input_streams; i++) |
|
|
|
for (i = 0; i < nb_input_streams; i++) |
|
|
@ -1947,8 +1937,7 @@ static int transcode(OutputFile *output_files, |
|
|
|
if (!os->nb_streams && !(os->oformat->flags & AVFMT_NOSTREAMS)) { |
|
|
|
if (!os->nb_streams && !(os->oformat->flags & AVFMT_NOSTREAMS)) { |
|
|
|
av_dump_format(os, i, os->filename, 1); |
|
|
|
av_dump_format(os, i, os->filename, 1); |
|
|
|
fprintf(stderr, "Output file #%d does not contain any stream\n", i); |
|
|
|
fprintf(stderr, "Output file #%d does not contain any stream\n", i); |
|
|
|
ret = AVERROR(EINVAL); |
|
|
|
return AVERROR(EINVAL); |
|
|
|
goto fail; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -1969,8 +1958,7 @@ static int transcode(OutputFile *output_files, |
|
|
|
uint64_t extra_size = (uint64_t)icodec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE; |
|
|
|
uint64_t extra_size = (uint64_t)icodec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE; |
|
|
|
|
|
|
|
|
|
|
|
if (extra_size > INT_MAX) { |
|
|
|
if (extra_size > INT_MAX) { |
|
|
|
ret = AVERROR(EINVAL); |
|
|
|
return AVERROR(EINVAL); |
|
|
|
goto fail; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* if stream_copy is selected, no need to decode or encode */ |
|
|
|
/* if stream_copy is selected, no need to decode or encode */ |
|
|
@ -1989,8 +1977,7 @@ static int transcode(OutputFile *output_files, |
|
|
|
codec->rc_buffer_size = icodec->rc_buffer_size; |
|
|
|
codec->rc_buffer_size = icodec->rc_buffer_size; |
|
|
|
codec->extradata= av_mallocz(extra_size); |
|
|
|
codec->extradata= av_mallocz(extra_size); |
|
|
|
if (!codec->extradata) { |
|
|
|
if (!codec->extradata) { |
|
|
|
ret = AVERROR(ENOMEM); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
goto fail; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
memcpy(codec->extradata, icodec->extradata, icodec->extradata_size); |
|
|
|
memcpy(codec->extradata, icodec->extradata, icodec->extradata_size); |
|
|
|
codec->extradata_size= icodec->extradata_size; |
|
|
|
codec->extradata_size= icodec->extradata_size; |
|
|
@ -2057,8 +2044,7 @@ static int transcode(OutputFile *output_files, |
|
|
|
case AVMEDIA_TYPE_AUDIO: |
|
|
|
case AVMEDIA_TYPE_AUDIO: |
|
|
|
ost->fifo= av_fifo_alloc(1024); |
|
|
|
ost->fifo= av_fifo_alloc(1024); |
|
|
|
if (!ost->fifo) { |
|
|
|
if (!ost->fifo) { |
|
|
|
ret = AVERROR(ENOMEM); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
goto fail; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
ost->reformat_pair = MAKE_SFMT_PAIR(AV_SAMPLE_FMT_NONE,AV_SAMPLE_FMT_NONE); |
|
|
|
ost->reformat_pair = MAKE_SFMT_PAIR(AV_SAMPLE_FMT_NONE,AV_SAMPLE_FMT_NONE); |
|
|
|
if (!codec->sample_rate) { |
|
|
|
if (!codec->sample_rate) { |
|
|
@ -2178,8 +2164,7 @@ static int transcode(OutputFile *output_files, |
|
|
|
if (!bit_buffer) { |
|
|
|
if (!bit_buffer) { |
|
|
|
fprintf(stderr, "Cannot allocate %d bytes output buffer\n", |
|
|
|
fprintf(stderr, "Cannot allocate %d bytes output buffer\n", |
|
|
|
bit_buffer_size); |
|
|
|
bit_buffer_size); |
|
|
|
ret = AVERROR(ENOMEM); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
goto fail; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* open each encoder */ |
|
|
|
/* open each encoder */ |
|
|
@ -2271,13 +2256,40 @@ static int transcode(OutputFile *output_files, |
|
|
|
|
|
|
|
|
|
|
|
if (ret) { |
|
|
|
if (ret) { |
|
|
|
fprintf(stderr, "%s\n", error); |
|
|
|
fprintf(stderr, "%s\n", error); |
|
|
|
goto fail; |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (want_sdp) { |
|
|
|
if (want_sdp) { |
|
|
|
print_sdp(output_files, nb_output_files); |
|
|
|
print_sdp(output_files, nb_output_files); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
* The following code is the main loop of the file converter |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
static int transcode(OutputFile *output_files, |
|
|
|
|
|
|
|
int nb_output_files, |
|
|
|
|
|
|
|
InputFile *input_files, |
|
|
|
|
|
|
|
int nb_input_files) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int ret, i; |
|
|
|
|
|
|
|
AVFormatContext *is, *os; |
|
|
|
|
|
|
|
OutputStream *ost; |
|
|
|
|
|
|
|
InputStream *ist; |
|
|
|
|
|
|
|
uint8_t *no_packet; |
|
|
|
|
|
|
|
int no_packet_count=0; |
|
|
|
|
|
|
|
int64_t timer_start; |
|
|
|
|
|
|
|
int key; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!(no_packet = av_mallocz(nb_input_files))) |
|
|
|
|
|
|
|
exit_program(1); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ret = transcode_init(output_files, nb_output_files, input_files, nb_input_files); |
|
|
|
|
|
|
|
if (ret < 0) |
|
|
|
|
|
|
|
goto fail; |
|
|
|
|
|
|
|
|
|
|
|
if (!using_stdin) { |
|
|
|
if (!using_stdin) { |
|
|
|
if(verbose >= 0) |
|
|
|
if(verbose >= 0) |
|
|
|
fprintf(stderr, "Press [q] to stop, [?] for help\n"); |
|
|
|
fprintf(stderr, "Press [q] to stop, [?] for help\n"); |
|
|
|