av_packet_unref

该接口使用了如下调用,该接口主要作用是清理AVPacket中的所有空间数据,清理完毕后进行初始化操作,并且将 data 与 size 置为0,方便下次调用。

void av_packet_unref(AVPacket *pkt)
{av_packet_free_side_data(pkt);av_buffer_unref(&pkt->buf);av_init_packet(pkt);pkt->data = NULL;pkt->size = 0;
}

void av_packet_free_side_data(AVPacket *pkt)

接口解析:根据AVPacket中side_data_elems来使用for循环逐个清理其中的数据,最后将side_data_elems置为0

void av_packet_free_side_data(AVPacket *pkt)
{int i;for (i = 0; i < pkt->side_data_elems; i++)av_freep(&pkt->side_data[i].data);av_freep(&pkt->side_data);pkt->side_data_elems = 0;
}

av_freep

void av_freep(void *arg)
{void *val;memcpy(&val, arg, sizeof(val));memcpy(arg, &(void *){ NULL }, sizeof(val));av_free(val);
}

av_buffer_unref

void av_buffer_unref(AVBufferRef **buf)
{if (!buf || !*buf)return;buffer_replace(buf, NULL);
}

buffer_replace

static void buffer_replace(AVBufferRef **dst, AVBufferRef **src)
{AVBuffer *b;b = (*dst)->buffer;if (src) {**dst = **src;av_freep(src);} elseav_freep(dst);if (atomic_fetch_sub_explicit(&b->refcount, 1, memory_order_acq_rel) == 1) {b->free(b->opaque, b->data);av_freep(&b);}
}

av_free参考av_free

【FFMPEG源码终极解析】void av_packet_unref(AVPacket *pkt)相关推荐

  1. 【FFMPEG源码终极解析】 av_packet_alloc 与 av_packet_free

    关于void *av_malloc(size_t size)可以参考av_malloc av_packet_alloc实际是分配AVPacket以后,调用av_init_packet对AVPacket ...

  2. 【FFMPEG源码终极解析】 avformat_open_input (一)

    avformat_open_input   打开媒体函数,先上全部源码.然后逐语句分析. int avformat_open_input(AVFormatContext **ps, const cha ...

  3. FFmpeg 源码之分配与释放 AVPacket 常用函数

    查看 packet.h 源码,可以看到一系列的 AVPacket 分配与释放函数.熟悉这些 API 有利于方便在不同场景下使用 AVPacket. 一.av_packet_alloc 分配一个 AVP ...

  4. 偏向锁、轻量级锁、重量级锁,Synchronized底层源码终极解析!

    synchronized是掌握Java高并发的关键知识点,底层源码更是面试重灾区.本文从源码学习synchronized的原理,讲解对象头.偏向锁.轻量级锁.重量级锁等概念. 扫码关注<Java ...

  5. ffmpeg源码笔记-AvFrame和AvPacket(四)

    在FFmpeg中,未压缩的图像和压缩的视频码流分别使用AVFrame结构和AVPacket结构保存; 针对视频编码器,其流程为从数据源获取图像格式的输入数据,保存为AVFrame对象并传入编码器,从编 ...

  6. FFMPEG 源码分析

    FFMPEG基本概念: ffmpeg是一个开源的编解码框架,它提供了一个音视频录制,解码和编码库.FFMPEG是在linux下开发的,但也有windows下的编译版本. ffmpeg项目由以下几部分组 ...

  7. ffmpeg源码分析与应用示例(一)——H.264解码与QP提取

    本文包含以下内容 1.H.264解码流程详述与对应ffmpeg源码解析 2.针对一个应用实例介绍通过修改ffmpeg源码解决问题的方案 具有较强的综合性. 先介绍一下在第二部分中将要解决的实际问题:自 ...

  8. FFMPEG源码分析(二)

    ffmpeg源码分析之数据流 本文主要介绍ffmpeg的数据流,在ffmpeg中主要分有三个主要用途用于媒体流的解码播放,媒体流的转换(解码之后再编码)和媒体流录制. 媒体流的解码播放 在ffmpeg ...

  9. 从头用脚分析FFmpeg源码 --- avformat_open_input

    本文所使用的是FFmpeg n4.4的源码,所有分析均来自博主瞎猜,如果有误,欢迎批评指正. 建议边调试源码,边看对应的源码分析.走上一遍就了解个大概了. avformat_open_input 作用 ...

最新文章

  1. 基于Vuejs+ElementUI的答案录入功能的一些总结
  2. 【Python刷题】_2
  3. Java 添加、更新和移除PDF超链接
  4. QT学习笔记(四):Qt5+MSVC编译 中文字符显示乱码问题解决
  5. u8 附件上传后存放路径_织梦DedeCms附件按月份保存的修改方法
  6. (王道408考研数据结构)第七章查找-第二节2:二分查找及其判定树
  7. JEECG 3.6.3版本发布 企业级JAVA快速开发平台
  8. OpenShift 4 - Knative教程 (5) Eventing之Source和Sink
  9. 【BZOJ4200】[Noi2015]小园丁与老司机 DP+最小流
  10. java判断字符串不为空_Java判断字符串是否为空的方法
  11. 2019年春季学期《软件工程》教学总结
  12. Dataformatstring属性设置(详解)
  13. AMS1117手册解析
  14. SAP LSMW 快照批量处理总账科目数据
  15. 我用python实现了一个量化选股程序
  16. 如何生成github上的动态gif图
  17. 学术不端网查重靠谱吗_学术不端网知网查重万方哪一个权威
  18. 购物商场积分卡小程序开发制作
  19. Markdown 你真的懂了吗
  20. 【开源项目】花密(Flower Password)之入门指南

热门文章

  1. 如何以及为什么使用Spoon分析,生成和转换Java代码
  2. perl大骆驼和小骆驼_骆驼路线的主/从故障转移
  3. java对响应数据做封装_1000种对Java的响应没有死
  4. 在Java中处理异常
  5. java jigsaw_是从Java 8启动的Project Jigsaw吗?
  6. java 应用程序 gui_Java GUI应用程序关闭陷阱
  7. AssertJ Fest Hamcrest
  8. 在CloudBees上开发,测试和部署独立应用程序
  9. Java 8 Lambda表达式的函数式编程– Monads
  10. Servlet异常和错误处理示例教程