avcodec_alloc_context3,avcodec_open2,avcodec_free_context,avcodec_close

avcodec_alloc_context3 是创建编解码器上下文,需要使用 avcodec_free_context释放

需要使用avcodec_free_context 释放

/**

* Allocate an AVCodecContext and set its fields to default values. The

* resulting struct should be freed with avcodec_free_context().

*

* @param codec if non-NULL, allocate private data and initialize defaults

* for the given codec. It is illegal to then call avcodec_open2()

* with a different codec.

* If NULL, then the codec-specific defaults won't be initialized,

* which may result in suboptimal default settings (this is

* important mainly for encoders, e.g. libx264).

*

* @return An AVCodecContext filled with default values or NULL on failure.

*/

AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);

/**

* Free the codec context and everything associated with it and write NULL to

* the provided pointer.

*/

void avcodec_free_context(AVCodecContext **avctx);

avcodec_open2 打开编解码器上下文,需要使用 avcodec_free_context 释放

实际上更加合理是说:avcodec_open2 需要使用avcodec_close释放。avcodec_close函数的说明是:只会释放 avcodecContext 内部的元素,但是不会释放 avcodecContext自己。因此也需要使用 avcodec_free_context释放,avcodec_free_context的内部有用的第一句代码就是调用 avcodec_close函数。

/**

* Initialize the AVCodecContext to use the given AVCodec. Prior to using this

* function the context has to be allocated with avcodec_alloc_context3().

*

* The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),

* avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for

* retrieving a codec.

*

* @note Always call this function before using decoding routines (such as

* @ref avcodec_receive_frame()).

*

* @code

* av_dict_set(&opts, "b", "2.5M", 0);

* codec = avcodec_find_decoder(AV_CODEC_ID_H264);

* if (!codec)

* exit(1);

*

* context = avcodec_alloc_context3(codec);

*

* if (avcodec_open2(context, codec, opts) < 0)

* exit(1);

* @endcode

*

* @param avctx The context to initialize.

* @param codec The codec to open this context for. If a non-NULL codec has been

* previously passed to avcodec_alloc_context3() or

* for this context, then this parameter MUST be either NULL or

* equal to the previously passed codec.

* @param options A dictionary filled with AVCodecContext and codec-private options.

* On return this object will be filled with options that were not found.

*

* @return zero on success, a negative value on error

* @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(),

* av_dict_set(), av_opt_find().

*/

int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);

/**

* Close a given AVCodecContext and free all the data associated with it

* (but not the AVCodecContext itself).

*

* Calling this function on an AVCodecContext that hasn't been opened will free

* the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL

* codec. Subsequent calls will do nothing.

*

* @note Do not use this function. Use avcodec_free_context() to destroy a

* codec context (either open or closed). Opening and closing a codec context

* multiple times is not supported anymore -- use multiple codec contexts

* instead.

*/

int avcodec_close(AVCodecContext *avctx);

void avcodec_free_context(AVCodecContext **pavctx)

{

AVCodecContext *avctx = *pavctx;

if (!avctx)

return;

avcodec_close(avctx);

av_freep(&avctx->extradata);

av_freep(&avctx->subtitle_header);

av_freep(&avctx->intra_matrix);

av_freep(&avctx->inter_matrix);

av_freep(&avctx->rc_override);

av_channel_layout_uninit(&avctx->ch_layout);

av_freep(pavctx);

}

相关推荐
老马啸西风5 分钟前
Neo4j APOC-01-图数据库 apoc 插件介绍
java
名字不要太长 像我这样就好8 分钟前
【iOS】《Effective Objective-C 2.0》阅读笔记(一)
开发语言·笔记·学习·macos·ios·objective-c
次次皮18 分钟前
【方案三】JAVA中使用ocr(Umi-OCR)
java·ocr
疯一样的码农24 分钟前
如何使用Apache HttpClient发送带有HTML表单数据的POST请求
java·apache·httpclient
Allen Bright25 分钟前
使用 Apache Commons IO 实现文件读写
java·开发语言·apache
武子康29 分钟前
Java-16 深入浅出 MyBatis - SqlSession Executor StatementHandler 源码分析
java·开发语言·mysql·mybatis·springboot
小萌新~~~~30 分钟前
在Scala中case class 的运用
开发语言·后端·scala
小萌新~~~~31 分钟前
在Scala中Array不可变的学习
开发语言·学习·scala
睎zyl32 分钟前
scala的模式匹配swtich case++
开发语言·后端·scala
{⌐■_■}33 分钟前
【docker】docker build上下文
java·docker·容器