Move allocation and init to defaults of the private codec contexts to avcodec_get_context_defaults3().

That way the user app can set codec specific parameters in the private context
before opening it.

Originally committed as revision 25257 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Michael Niedermayer
2010-09-29 15:05:47 +00:00
parent cd17285e6c
commit dc51a72ba4
3 changed files with 44 additions and 0 deletions

View File

@@ -467,6 +467,36 @@ void avcodec_get_context_defaults2(AVCodecContext *s, enum AVMediaType codec_typ
s->reordered_opaque= AV_NOPTS_VALUE;
}
int avcodec_get_context_defaults3(AVCodecContext *s, AVCodec *codec){
avcodec_get_context_defaults2(s, codec ? codec->type : AVMEDIA_TYPE_UNKNOWN);
if(codec && codec->priv_data_size){
if(!s->priv_data){
s->priv_data= av_mallocz(codec->priv_data_size);
if (!s->priv_data) {
return AVERROR(ENOMEM);
}
}
if(codec->priv_class){
*(AVClass**)s->priv_data= codec->priv_class;
av_opt_set_defaults(s->priv_data);
}
}
return 0;
}
AVCodecContext *avcodec_alloc_context3(AVCodec *codec){
AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext));
if(avctx==NULL) return NULL;
if(avcodec_get_context_defaults3(avctx, codec) < 0){
av_free(avctx);
return NULL;
}
return avctx;
}
AVCodecContext *avcodec_alloc_context2(enum AVMediaType codec_type){
AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext));