diff options
author | Alex Converse <alex.converse@gmail.com> | 2011-08-30 16:03:51 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-08-30 18:08:23 +0200 |
commit | 93ed69ad2103e0c58ebcaa80dd55742d75f8c461 (patch) | |
tree | 5327c09b76dd0045a0a1720b060a8f591555ee72 | |
parent | e5362cecfbbe221b1695361e9c64b180e08f1667 (diff) | |
download | ffmpeg-93ed69ad2103e0c58ebcaa80dd55742d75f8c461.tar.gz |
ffmpeg: Separate initialization from the main transcode loop.
-rw-r--r-- | ffmpeg.c | 64 |
1 files changed, 38 insertions, 26 deletions
@@ -1914,28 +1914,18 @@ static int init_input_stream(int ist_index, OutputStream *output_streams, int nb 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) +static int transcode_init(OutputFile *output_files, + int nb_output_files, + InputFile *input_files, + int nb_input_files) { int ret = 0, i; - AVFormatContext *is, *os; + AVFormatContext *os; AVCodecContext *codec, *icodec; OutputStream *ost; InputStream *ist; char error[1024]; - int key; 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) 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)) { av_dump_format(os, i, os->filename, 1); fprintf(stderr, "Output file #%d does not contain any stream\n", i); - ret = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } } @@ -1969,8 +1958,7 @@ static int transcode(OutputFile *output_files, uint64_t extra_size = (uint64_t)icodec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE; if (extra_size > INT_MAX) { - ret = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } /* 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->extradata= av_mallocz(extra_size); if (!codec->extradata) { - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } memcpy(codec->extradata, icodec->extradata, icodec->extradata_size); codec->extradata_size= icodec->extradata_size; @@ -2057,8 +2044,7 @@ static int transcode(OutputFile *output_files, case AVMEDIA_TYPE_AUDIO: ost->fifo= av_fifo_alloc(1024); if (!ost->fifo) { - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } ost->reformat_pair = MAKE_SFMT_PAIR(AV_SAMPLE_FMT_NONE,AV_SAMPLE_FMT_NONE); if (!codec->sample_rate) { @@ -2178,8 +2164,7 @@ static int transcode(OutputFile *output_files, if (!bit_buffer) { fprintf(stderr, "Cannot allocate %d bytes output buffer\n", bit_buffer_size); - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } /* open each encoder */ @@ -2271,13 +2256,40 @@ static int transcode(OutputFile *output_files, if (ret) { fprintf(stderr, "%s\n", error); - goto fail; + return ret; } if (want_sdp) { 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(verbose >= 0) fprintf(stderr, "Press [q] to stop, [?] for help\n"); |