[C/C++][FFmpeg] 增加引用计数和显式释放的接口
1. avcodec_receive_packet
- 描述:从编码器获取
AVPacket,如果编码器内部管理数据,引用计数会增加。
- 显式释放:使用
av_packet_unref(packet) 释放 AVPacket 数据。
2. avcodec_send_packet
- 描述:将
AVPacket 发送到解码器时,AVPacket 的数据引用计数不会自动减少。因此在解码完成后,需要释放。
- 显式释放:使用
av_packet_unref(packet) 释放 AVPacket 数据。
3. av_frame_get_buffer
- 描述:为
AVFrame 分配数据缓冲区并增加引用计数。
- 显式释放:使用
av_frame_unref(frame) 释放 AVFrame 中的数据。
4. av_frame_clone
- 描述:创建
AVFrame 的深拷贝,引用计数会增加。
- 显式释放:使用
av_frame_free(&frame) 释放拷贝的 AVFrame。
5. av_buffer_ref
- 描述:为
AVBufferRef 增加引用计数。
- 显式释放:使用
av_buffer_unref(&buffer) 释放引用。
6. av_packet_ref
- 描述:对一个
AVPacket 创建引用,会增加数据引用计数。
- 显式释放:使用
av_packet_unref(packet) 释放 AVPacket。
7. avformat_alloc_context
- 描述:分配
AVFormatContext,需要显式释放。
- 显式释放:使用
avformat_free_context(format_context) 释放 AVFormatContext。
8. avformat_find_stream_info
- 描述:在解析输入流时,FFmpeg 可能会创建内部引用,比如分配一些流或缓冲区信息,这些需要释放。
- 显式释放:使用
avformat_close_input(&format_context) 关闭输入文件并释放资源。
9. avfilter_graph_alloc / avfilter_graph_alloc_filter
- 描述:为
AVFilterGraph 分配数据,增加引用计数。
- 显式释放:使用
avfilter_graph_free(&filter_graph) 释放滤镜图。
10. av_frame_make_writable
- 描述:如果
AVFrame 的数据缓冲区有多个引用,它会增加引用计数以创建一个新的缓冲区。
- 显式释放:使用
av_frame_unref(frame) 释放 AVFrame。
11. avio_open / avio_open2
- 描述:为
AVIOContext 打开文件或设置输入输出缓冲区。
- 显式释放:使用
avio_closep(&avio_context) 关闭并释放 AVIOContext。
12. sws_getContext
- 描述:创建
SwsContext 用于图像缩放或格式转换。
- 显式释放:使用
sws_freeContext(sws_context) 释放 SwsContext。
13. swr_alloc / swr_alloc_set_opts
- 描述:创建
SwrContext 用于音频重采样。
- 显式释放:使用
swr_free(&swr_context) 释放 SwrContext。
14. avfilter_graph_create_filter
- 描述:创建滤镜并增加滤镜的引用计数。
- 显式释放:使用
avfilter_free(filter) 释放滤镜。
15. av_dict_set / av_dict_copy
- 描述:管理
AVDictionary(键值对)的引用计数。
- 显式释放:使用
av_dict_free(&dictionary) 释放字典。