ffmpeg: Separate initialization from the main transcode loop.

pull/2/head
Alex Converse 14 years ago committed by Michael Niedermayer
parent e5362cecfb
commit 93ed69ad21
  1. 64
      ffmpeg.c

@ -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");

Loading…
Cancel
Save