提交 62600469 编写于 作者: M Michael Niedermayer

Allow overriding codec_ids.

Originally committed as revision 11266 to svn://svn.ffmpeg.org/ffmpeg/trunk
上级 379374ea
...@@ -2662,6 +2662,11 @@ static void opt_input_file(const char *filename) ...@@ -2662,6 +2662,11 @@ static void opt_input_file(const char *filename)
if(str && (opt->flags & AV_OPT_FLAG_DECODING_PARAM)) if(str && (opt->flags & AV_OPT_FLAG_DECODING_PARAM))
av_set_string(ic, opt_names[i], str); 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 */ /* open the input file with generic libav function */
err = av_open_input_file(&ic, filename, file_iformat, 0, ap); err = av_open_input_file(&ic, filename, file_iformat, 0, ap);
if (err < 0) { if (err < 0) {
......
...@@ -445,6 +445,22 @@ typedef struct AVFormatContext { ...@@ -445,6 +445,22 @@ typedef struct AVFormatContext {
unsigned int nb_programs; unsigned int nb_programs;
AVProgram **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; } AVFormatContext;
typedef struct AVPacketList { typedef struct AVPacketList {
......
...@@ -493,8 +493,25 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename, ...@@ -493,8 +493,25 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
int av_read_packet(AVFormatContext *s, AVPacket *pkt) int av_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
int ret;
AVStream *st;
av_init_packet(pkt); 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;
} }
/**********************************************************/ /**********************************************************/
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册