diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index a26534a1db..aa4296d786 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2631,6 +2631,10 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); */ void avcodec_get_context_defaults(AVCodecContext *s); +/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API! + * we WILL change its arguments and name a few times! */ +void avcodec_get_context_defaults2(AVCodecContext *s, enum CodecType); + /** * Allocates an AVCodecContext and sets its fields to default values. The * resulting struct can be deallocated by simply calling av_free(). @@ -2640,6 +2644,10 @@ void avcodec_get_context_defaults(AVCodecContext *s); */ AVCodecContext *avcodec_alloc_context(void); +/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API! + * we WILL change its arguments and name a few times! */ +AVCodecContext *avcodec_alloc_context2(enum CodecType); + /** * Sets the fields of the given AVFrame to default values. * diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 50ac861854..0e6efbde6e 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -731,12 +731,19 @@ static const AVOption options[]={ static AVClass av_codec_context_class = { "AVCodecContext", context_to_name, options }; -void avcodec_get_context_defaults(AVCodecContext *s){ +void avcodec_get_context_defaults2(AVCodecContext *s, enum CodecType codec_type){ + int flags=0; memset(s, 0, sizeof(AVCodecContext)); s->av_class= &av_codec_context_class; - av_opt_set_defaults(s); + if(codec_type == CODEC_TYPE_AUDIO) + flags= AV_OPT_FLAG_AUDIO_PARAM; + else if(codec_type == CODEC_TYPE_VIDEO) + flags= AV_OPT_FLAG_VIDEO_PARAM; + else if(codec_type == CODEC_TYPE_SUBTITLE) + flags= AV_OPT_FLAG_SUBTITLE_PARAM; + av_opt_set_defaults2(s, flags, flags); s->rc_eq= "tex^qComp"; s->time_base= (AVRational){0,1}; @@ -752,16 +759,24 @@ void avcodec_get_context_defaults(AVCodecContext *s){ s->reget_buffer= avcodec_default_reget_buffer; } -AVCodecContext *avcodec_alloc_context(void){ +AVCodecContext *avcodec_alloc_context2(enum CodecType codec_type){ AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext)); if(avctx==NULL) return NULL; - avcodec_get_context_defaults(avctx); + avcodec_get_context_defaults2(avctx, codec_type); return avctx; } +void avcodec_get_context_defaults(AVCodecContext *s){ + avcodec_get_context_defaults2(s, CODEC_TYPE_UNKNOWN); +} + +AVCodecContext *avcodec_alloc_context(void){ + return avcodec_alloc_context2(CODEC_TYPE_UNKNOWN); +} + void avcodec_get_frame_defaults(AVFrame *pic){ memset(pic, 0, sizeof(AVFrame));