[FFmpeg-cvslog] ffmpeg: factor out initializing input streams.
Anton Khirnov
git at videolan.org
Tue Aug 30 18:15:05 CEST 2011
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Tue Aug 30 15:53:55 2011 +0200| [94adca68f87a16da943a8f95d87d948f06d9106b] | committer: Michael Niedermayer
ffmpeg: factor out initializing input streams.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=94adca68f87a16da943a8f95d87d948f06d9106b
---
ffmpeg.c | 69 +++++++++++++++++++++++++++++++------------------------------
1 files changed, 35 insertions(+), 34 deletions(-)
diff --git a/ffmpeg.c b/ffmpeg.c
index 6cc3cc9..ad641bb 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++) {
More information about the ffmpeg-cvslog
mailing list