diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2007-12-19 10:56:17 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2007-12-19 10:56:17 +0000 |
commit | 626004690c23c981f67228ea325dde3f35193988 (patch) | |
tree | 4c83eca851de2f715b7dcbd8a11b113d9422c516 | |
parent | 379374ea11ea561729fc0c6dc38a06f9b5b43731 (diff) | |
download | ffmpeg-626004690c23c981f67228ea325dde3f35193988.tar.gz |
Allow overriding codec_ids.
Originally committed as revision 11266 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | ffmpeg.c | 5 | ||||
-rw-r--r-- | libavformat/avformat.h | 16 | ||||
-rw-r--r-- | libavformat/utils.c | 19 |
3 files changed, 39 insertions, 1 deletions
@@ -2662,6 +2662,11 @@ static void opt_input_file(const char *filename) 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) { diff --git a/libavformat/avformat.h b/libavformat/avformat.h index ad8dc7d6aa..27d3c00370 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -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 { diff --git a/libavformat/utils.c b/libavformat/utils.c index 1a34049c21..386fe60718 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -493,8 +493,25 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename, 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; } /**********************************************************/ |