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

}

相关推荐
无小道1 分钟前
Qt——事件简单介绍
开发语言·前端·qt
devmoon6 分钟前
在 Paseo 测试网上获取 Coretime:On-demand 与 Bulk 的完整实操指南
开发语言·web3·区块链·测试用例·智能合约·solidity
GR23423412 分钟前
2025年影视仓TV+手机官方版 内置地址源支持高清直播
java·智能手机·软件
kylezhao201923 分钟前
C# 中的 SOLID 五大设计原则
开发语言·c#
程序员清风35 分钟前
北京回长沙了,简单谈谈感受!
java·后端·面试
何中应44 分钟前
请求头设置没有生效
java·后端
凡人叶枫1 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
亓才孓1 小时前
[JDBC]批处理
java
春日见1 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设
锐意无限1 小时前
Swift 扩展归纳--- UIView
开发语言·ios·swift