int av_dup_packet(AVPacket *pkt)
来源:互联网 发布:php内容管理系统 开源 编辑:程序博客网 时间:2024/05/29 14:55
AVPacket 的data 在内存中buffer有两种情况:
1)由av_malloc申请的独立的buffer(unshared buffer);
2)是其他AVPacket或者其他reuseable 内存的一部分(shared buffer);
av_dup_packet, 通过调用 av_malloc、memcpy、memset等函数, 将shared buffer 的AVPacket duplicate(复制)到独立的buffer中。并且修改AVPacket的析构函数指针av_destruct_pkt。
av_dup_packet源码:
00092 int av_dup_packet(AVPacket *pkt)
00093 {
00094 if (((pkt->destruct == av_destruct_packet_nofree) || (pkt->destruct == NULL)) && pkt->data) {
00095 uint8_t *data;
00096 /* We duplicate the packet and don't forget to add the padding again. */
00097 if((unsigned)pkt->size > (unsigned)pkt->size + FF_INPUT_BUFFER_PADDING_SIZE)
00098 return AVERROR(ENOMEM);
00099 data = av_malloc(pkt->size + FF_INPUT_BUFFER_PADDING_SIZE);
00100 if (!data) {
00101 return AVERROR(ENOMEM);
00102 }
00103 memcpy(data, pkt->data, pkt->size);
00104 memset(data + pkt->size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
00105 pkt->data = data;
00106 pkt->destruct = av_destruct_packet;
00107 }
00108 return 0;
00109 }
- int av_dup_packet(AVPacket *pkt)
- int av_dup_packet(AVPacket *pkt)
- ffmpeg框架阅读笔记一:读取数据帧函数 int av_read_frame(AVFormatContext *s, AVPacket *pkt)
- ffmpeg框架阅读笔记一:读取数据帧函数 int av_read_frame(AVFormatContext *s, AVPacket *pkt)
- int av_packet_ref(AVPacket *dst, const AVPacket *src)源码分析
- int av_packet_ref(AVPacket *dst, const AVPacket *src)源码分析
- int av_packet_ref(AVPacket *dst, const AVPacket *src)源码分析
- AVPacket
- AVPacket
- send pkt
- FFMPEG AVPacket
- AVpacket AVframe
- FFMPEG AVPacket
- AVFrame&AVPacket
- ffmpeg AVPacket & AVFrame
- ffmpeg(3) AVPacket
- ffmpeg之AVPacket笔记
- ffmpeg 数据结构-AVPacket
- fastcgi_param 详解(fastcgi能够获取到的参数)
- Java Map遍历方式的选择
- Adobe/Flash Media Server 5.0 linux 64位系统下的安装
- 基于C++的机器学习工具
- 使用PetShop时遇到的问题:未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。
- int av_dup_packet(AVPacket *pkt)
- JAVA中int与String的类型转换
- 该板块说明
- PHP实际项目中常用函数整理
- 把DataSet的数据导入到Excel的多个sheet
- SGD-SVM Spark并行
- Fibre Channel光纤通道详解
- PDB文件:每个开发人员都必须知道的
- 即刻出发