aboutsummaryrefslogtreecommitdiffstats
path: root/ffmpeg.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2011-08-30 15:53:55 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-08-30 18:08:22 +0200
commit94adca68f87a16da943a8f95d87d948f06d9106b (patch)
treee914ca15b903eedc22a5523dd247053f13c8c664 /ffmpeg.c
parent8b85b9fa42fbbfb7fd9431479988be92eb4a73d9 (diff)
downloadffmpeg-94adca68f87a16da943a8f95d87d948f06d9106b.tar.gz
ffmpeg: factor out initializing input streams.
Diffstat (limited to 'ffmpeg.c')
-rw-r--r--ffmpeg.c69
1 files changed, 35 insertions, 34 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 6cc3cc9840..ad641bbf4f 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -1882,6 +1882,36 @@ static void print_sdp(OutputFile *output_files, int n)
av_freep(&avc);
}
+static int init_input_stream(int ist_index, OutputStream *output_streams, int nb_output_streams,
+ char *error, int error_len)
+{
+ int i;
+ InputStream *ist = &input_streams[ist_index];
+ if (ist->decoding_needed) {
+ AVCodec *codec = ist->dec;
+ if (!codec)
+ codec = avcodec_find_decoder(ist->st->codec->codec_id);
+ if (!codec) {
+ snprintf(error, sizeof(error), "Decoder (codec %s) not found for input stream #%d.%d",
+ avcodec_get_name(ist->st->codec->codec_id), ist->file_index, ist->st->index);
+ return AVERROR(EINVAL);
+ }
+ if (avcodec_open2(ist->st->codec, codec, &ist->opts) < 0) {
+ snprintf(error, sizeof(error), "Error while opening decoder for input stream #%d.%d",
+ ist->file_index, ist->st->index);
+ return AVERROR(EINVAL);
+ }
+ assert_codec_experimental(ist->st->codec, 0);
+ assert_avoptions(ist->opts);
+ }
+
+ ist->pts = ist->st->avg_frame_rate.num ? - ist->st->codec->has_b_frames*AV_TIME_BASE / av_q2d(ist->st->avg_frame_rate) : 0;
+ ist->next_pts = AV_NOPTS_VALUE;
+ ist->is_start = 1;
+
+ return 0;
+}
+
/*
* The following code is the main loop of the file converter
*/
@@ -1890,7 +1920,7 @@ static int transcode(OutputFile *output_files,
InputFile *input_files,
int nb_input_files)
{
- int ret = 0, i, j;
+ int ret = 0, i;
AVFormatContext *is, *os;
AVCodecContext *codec, *icodec;
OutputStream *ost;
@@ -2180,39 +2210,10 @@ static int transcode(OutputFile *output_files,
}
}
- /* open each decoder */
- for (i = 0; i < nb_input_streams; i++) {
- ist = &input_streams[i];
- if (ist->decoding_needed) {
- AVCodec *codec = ist->dec;
- if (!codec)
- codec = avcodec_find_decoder(ist->st->codec->codec_id);
- if (!codec) {
- snprintf(error, sizeof(error), "Decoder (codec %s) not found for input stream #%d.%d",
- avcodec_get_name(ist->st->codec->codec_id), ist->file_index, ist->st->index);
- ret = AVERROR(EINVAL);
- goto dump_format;
- }
- if (avcodec_open2(ist->st->codec, codec, &ist->opts) < 0) {
- snprintf(error, sizeof(error), "Error while opening decoder for input stream #%d.%d",
- ist->file_index, ist->st->index);
- ret = AVERROR(EINVAL);
- goto dump_format;
- }
- assert_codec_experimental(ist->st->codec, 0);
- assert_avoptions(ost->opts);
- }
- }
-
- /* init pts */
- for (i = 0; i < nb_input_streams; i++) {
- AVStream *st;
- ist = &input_streams[i];
- st= ist->st;
- ist->pts = st->avg_frame_rate.num ? - st->codec->has_b_frames*AV_TIME_BASE / av_q2d(st->avg_frame_rate) : 0;
- ist->next_pts = AV_NOPTS_VALUE;
- ist->is_start = 1;
- }
+ /* init input streams */
+ for (i = 0; i < nb_input_streams; i++)
+ if ((ret = init_input_stream(i, output_streams, nb_output_streams, error, sizeof(error)) < 0))
+ goto dump_format;
/* open files and write file headers */
for (i = 0; i < nb_output_files; i++) {