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);

}

相关推荐
FQNmxDG4S7 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
前端老石人7 小时前
HTML 字符引用完全指南
开发语言·前端·html
matlab_xiaowang7 小时前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
虹科网络安全7 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje8 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv78 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫8 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287928 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本8 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
止语Lab8 小时前
从手动到框架:Go DI 演进的三个拐点
开发语言·后端·golang