[FFmpeg-cvslog] r11266 - in trunk: ffmpeg.c libavformat/avformat.h libavformat/utils.c
michael
subversion
Wed Dec 19 11:56:17 CET 2007
Author: michael
Date: Wed Dec 19 11:56:17 2007
New Revision: 11266
Log:
Allow overriding codec_ids.
Modified:
trunk/ffmpeg.c
trunk/libavformat/avformat.h
trunk/libavformat/utils.c
Modified: trunk/ffmpeg.c
==============================================================================
--- trunk/ffmpeg.c (original)
+++ trunk/ffmpeg.c Wed Dec 19 11:56:17 2007
@@ -2662,6 +2662,11 @@ static void opt_input_file(const char *f
if(str && (opt->flags & AV_OPT_FLAG_DECODING_PARAM))
av_set_string(ic, opt_names[i], str);
}
+
+ ic->video_codec_id = find_codec_or_die(video_codec_name , CODEC_TYPE_VIDEO , 0);
+ ic->audio_codec_id = find_codec_or_die(audio_codec_name , CODEC_TYPE_AUDIO , 0);
+ ic->subtitle_codec_id= find_codec_or_die(subtitle_codec_name, CODEC_TYPE_SUBTITLE, 0);
+
/* open the input file with generic libav function */
err = av_open_input_file(&ic, filename, file_iformat, 0, ap);
if (err < 0) {
Modified: trunk/libavformat/avformat.h
==============================================================================
--- trunk/libavformat/avformat.h (original)
+++ trunk/libavformat/avformat.h Wed Dec 19 11:56:17 2007
@@ -445,6 +445,22 @@ typedef struct AVFormatContext {
unsigned int nb_programs;
AVProgram **programs;
+
+ /**
+ * Forced video codec_id.
+ * demuxing: set by user
+ */
+ enum CodecID video_codec_id;
+ /**
+ * Forced audio codec_id.
+ * demuxing: set by user
+ */
+ enum CodecID audio_codec_id;
+ /**
+ * Forced subtitle codec_id.
+ * demuxing: set by user
+ */
+ enum CodecID subtitle_codec_id;
} AVFormatContext;
typedef struct AVPacketList {
Modified: trunk/libavformat/utils.c
==============================================================================
--- trunk/libavformat/utils.c (original)
+++ trunk/libavformat/utils.c Wed Dec 19 11:56:17 2007
@@ -493,8 +493,25 @@ int av_open_input_file(AVFormatContext *
int av_read_packet(AVFormatContext *s, AVPacket *pkt)
{
+ int ret;
+ AVStream *st;
av_init_packet(pkt);
- return s->iformat->read_packet(s, pkt);
+ ret= s->iformat->read_packet(s, pkt);
+ st= s->streams[pkt->stream_index];
+
+ switch(st->codec->codec_type){
+ case CODEC_TYPE_VIDEO:
+ if(s->video_codec_id) st->codec->codec_id= s->video_codec_id;
+ break;
+ case CODEC_TYPE_AUDIO:
+ if(s->audio_codec_id) st->codec->codec_id= s->audio_codec_id;
+ break;
+ case CODEC_TYPE_SUBTITLE:
+ if(s->subtitle_codec_id)st->codec->codec_id= s->subtitle_codec_id;
+ break;
+ }
+
+ return ret;
}
/**********************************************************/
More information about the ffmpeg-cvslog
mailing list