文档章节

av_dup_packet(AVPacket *pkt)函数分析

zhangyujsj
 zhangyujsj
发布于 2015/04/24 21:24
字数 237
阅读 50
收藏 0
点赞 0
评论 0

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; // 重新设置pkt->data终于有自己的独立内存了,不用共享别的AVPacket的内存
00106         pkt->destruct = av_destruct_packet; //设置析构函数指针
00107     }
00108     return 0;
00109 }




© 著作权归作者所有

共有 人打赏支持
zhangyujsj
粉丝 23
博文 288
码字总数 224241
作品 0
广州
ffmpeg做h264的GPU加速

硬件选择 -hwaccel_device 0 { "hwacceldevice", OPTVIDEO | OPTSTRING | HASARG |OPT_EXPERT | OPTSPEC |OPTINPUT, { .off = OFFSET(hwaccel_devices) }, "select a device for HW accelera......

evsqiezi ⋅ 04/18 ⋅ 0

「对抗深度强化学习」是如何解决自动驾驶汽车系统中的「安全性」问题的?...

原文来源:arXiv 作者:Aidin Ferdowsi、 Ursula Challita、Walid Saad、Narayan B. Mandayam 「雷克世界」编译:嗯~是阿童木呀、KABUDA 对于自动驾驶汽车(AV)而言,要想在未来的智能交通系...

cf2suds8x8f0v ⋅ 05/08 ⋅ 0

ffmpeg获取源的pix-fmt

深入代码后,发现是从PPS中得到,最外层的是avformatfindstream_info,如下: 主要介绍decodenalunits,getpixelformat,ffh264decodesliceheader。 static int decodenalunits(H264Context ...

evsqiezi ⋅ 04/13 ⋅ 0

ffmpeg多种码率控制方式的实现

ffmpeg是我们进行视频编解码常用的工具,而对于ffmpeg中编码时对码率的控制方式一直没找合适的教程,无意中在stackoverflow上发现了答案,在此进行总结备忘。 视频编码器常用的码率控制方式包...

tifentan ⋅ 04/13 ⋅ 0

ffmpeg 3.2官方版本无法传递flv metadata中的bit_rate

FFmpeg官网: http://www.ffmpeg.org/download.html 现象: 执行如下命令并分析metadata ./ffmpeg -i input.flv -c copy -f flv out.flv 发现out.flv的metadata没有包括input.flv的bitrate信......

andrew810810 ⋅ 2016/11/28 ⋅ 0

FFMPEG函数try_decode_frame()

FFMPEG版本3.2release,文件位于libavformat/utils.c 函数 trydecodeframe(AVFormatContext s, AVStream st, AVPacket avpkt, AVDictionary *options)主要功能分为三部分 函数findprobedeco......

andrew810810 ⋅ 2016/12/20 ⋅ 0

android端采用FFmpeg进行音频混合与拼接剪切

接触FFmpeg有一段时间了,它是音视频开发的开源库,几乎其他所有播放器、直播平台都基于FFmpeg进行二次开发。本篇文章来总结下采用FFmpeg进行音频处理:音频混合、音频剪切、音频拼接与音频转...

mp624183768 ⋅ 05/13 ⋅ 0

FFmpeg函数avformat_find_stream_info()

FFMPEG代码为3.2 release版本, 输入为flv文件。 获取流参数 / If not enough info to get the stream parameters, we decode the first frames to get it. (used in mpeg case for example)......

andrew810810 ⋅ 2016/12/02 ⋅ 0

TypeScript初战Chrome插件:Bilibili弹幕热度

TL;DR 这是一个用来在B站视频进度条上方创建显示弹幕热度的Chrome插件,以弹幕数量-时间的直方图显示,在高能处(定义为短时间内有大量弹幕出现的时间点)有明显的峰值,可以用来直观地看视频...

MegrezZhu ⋅ 06/07 ⋅ 0

让众多宅男心中的女神们下海不再是梦!

西雅图IT圈:seattleit 【今日作者】宇直 宇宙第一直男 盆友们 你们看毛片吗? 我反正是不看的。 但是最近我听几个朋友说,看自己喜欢的女明星演毛片已经不再是梦了。 我开始是不信的,但是听...

m68futkmurmtj ⋅ 2017/12/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)

之前没接触过证书加密的话,对证书相关的这些概念真是感觉挺棘手的,因为一下子来了一大堆新名词,看起来像是另一个领域的东西,而不是我们所熟悉的编程领域的那些东西,起码我个人感觉如此,且很长...

颖辉小居 ⋅ 21分钟前 ⋅ 0

利用有限制通配符提升API灵活性(28)

1、参数化类型是不可变的 List<String> 不是List<Object>的子类,但是二者是有联系的 利用有限制的通配符类型处理类似情况 List<? extends Object>(生产者) Collection<? super E>(消费者......

职业搬砖20年 ⋅ 27分钟前 ⋅ 0

ssm框架 +bootstrap分页

这里有两种方式 方式一:自己写分页 方式二:使用插件PageHelper 1.自己写分页 1.1 效果 1.2 实现过程 1.2.1 创建分页公共类 //---------------------------1.属性-------------------------...

Lucky_Me ⋅ 34分钟前 ⋅ 0

Istio

helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml after $ kubectl create namespace istio-system$ kubectl create -f $HOME/ist......

openthings ⋅ 34分钟前 ⋅ 0

内核线程、轻量级进程、用户线程

线程与进程概念 在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; 线程是程序执行的最小单元。 即线程作为调度和分配的基本单位,进程作为资源分配的基本单位 一个进程的组成...

117 ⋅ 39分钟前 ⋅ 0

elasticsearch2.4.6升级为elasticsearch-5.5.0的经历

将elasticsearch-5.5.0 中的配置 path.data 指向原来的数据路径 即 path.data: /usr/local/src/elasticsearch-2.4.6/data 注意: elasticsearch-5.5.0 需要将jdk版本升级到1.8...

晨猫 ⋅ 40分钟前 ⋅ 1

lvm讲解 磁盘故障小案例

1

oschina130111 ⋅ 44分钟前 ⋅ 0

那些提升开发人员工作效率的在线工具

本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中要经常使用到的。 Hollis偏爱使用...

时刻在奔跑 ⋅ 56分钟前 ⋅ 0

restful风格 实现DELETE PUT请求 的web.xml的配置

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframe......

泉天下 ⋅ 今天 ⋅ 0

Shell数组

Shell数组 Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数...

蜗牛奔跑 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部