一、AVPacket

  1. /**
  2. * AVPacket 作为解码器的输入 或 编码器的输出。
  3. * 当作为解码器的输入时,它由demuxer生成,然后传递给解码器
  4. * 当作为编码器的输出时,由编码器生成,然后传递给muxer
  5. * 在视频中,AVPacket 只能包含不大于1帧的内容,而视频的1帧可能要包含在多个AVPacket中,AVPacket < AVFrame
  6. *
  7. *
  8. * AVPacket 是ffmpeg中少数的几个公共ABI,它只能被libavcodec和libformat在栈上分配
  9. *
  10. * The side data is always allocated with av_malloc() and is freed in
  11. * av_free_packet().
  12. */
  13. typedef struct AVPacket {
  14. /**
  15. * packet的内存空间来自于一个叫做“引用计数缓冲区”的地方,这个指针就指向一块引用计数缓冲区
  16. */
  17. AVBufferRef *buf;
  18. /**
  19. * 显示时间戳 单位是 AVStream->time_base units
  20. */
  21. int64_t pts;
  22. /**
  23. * 解压时间戳,在这个时刻该包需要被解码
  24. */
  25. int64_t dts;
  26. uint8_t *data;
  27. int   size;
  28. int   stream_index;
  29. /**
  30. * A combination of AV_PKT_FLAG values
  31. */
  32. int   flags;
  33. /**
  34. * 存放额外的包信息
  35. */
  36. struct {
  37. uint8_t *data;
  38. int      size;
  39. enum AVPacketSideDataType type;
  40. } *side_data;
  41. int side_data_elems;
  42. /**
  43. * 这个包的时间长度 in AVStream->time_base units, 设置0 表示未知.
  44. * duration = next_pts - this_pts i.
  45. */
  46. int   duration;
  47. int64_t pos;                            ///< 在数据流中的字节偏移量, -1 if unknown
  48. int64_t convergence_duration;
  49. } AVPacket;

二、AVPicture

  1. typedef struct AVPicture {
  2. uint8_t *data[AV_NUM_DATA_POINTERS];    ///< pointers to the image data planes
  3. int linesize[AV_NUM_DATA_POINTERS];     ///< number of bytes per line
  4. }

三、AVFrame

  1. /**
  2. * AVFrame表示解码过后的一个数据帧
  3. *
  4. * AVFrame 通过使用 av_frame_alloc()来创建. 这个函数只是创建了AVFrame结构本身,在结构
  5. * 中定义的指向其他内存块的缓冲区指针要用其他方法来分配
  6. * 使用 av_frame_free()来释放AVFrame.
  7. *
  8. */
  9. typedef struct AVFrame {
  10. #define AV_NUM_DATA_POINTERS 8
  11. /**
  12. * pointer to the picture/channel planes.
  13. */
  14. uint8_t *data[AV_NUM_DATA_POINTERS];
  15. /**
  16. * For video, size in bytes of each picture line.
  17. * For audio, size in bytes of each plane.
  18. */
  19. int linesize[AV_NUM_DATA_POINTERS];
  20. /**
  21. * pointers to the data planes/channels.
  22. */
  23. uint8_t **extended_data;
  24. /**
  25. * width and height of the video frame
  26. */
  27. int width, height;
  28. /**
  29. * number of audio samples (per channel) described by this frame
  30. */
  31. int nb_samples;
  32. /**
  33. * format of the frame, -1 if unknown or unset
  34. */
  35. int format;
  36. /**
  37. * 1 -> keyframe, 0-> not
  38. */
  39. int key_frame;
  40. /**
  41. * Picture type of the frame.
  42. */
  43. enum AVPictureType pict_type;
  44. /**
  45. * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
  46. */
  47. AVRational sample_aspect_ratio;
  48. /**
  49. * Presentation timestamp in time_base units (time when frame should be shown to user).
  50. */
  51. int64_t pts;
  52. /**
  53. * PTS copied from the AVPacket that was decoded to produce this frame.
  54. */
  55. int64_t pkt_pts;
  56. /**
  57. * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isnt used)
  58. * This is also the Presentation time of this AVFrame calculated from
  59. * only AVPacket.dts values without pts values.
  60. */
  61. int64_t pkt_dts;
  62. /**
  63. * picture number in bitstream order
  64. */
  65. int coded_picture_number;
  66. /**
  67. * picture number in display order
  68. */
  69. int display_picture_number;
  70. /**
  71. * quality (between 1 (good) and FF_LAMBDA_MAX (bad))
  72. */
  73. int quality;
  74. /**
  75. * for some private data of the user
  76. */
  77. void *opaque;
  78. /**
  79. * error
  80. */
  81. uint64_t error[AV_NUM_DATA_POINTERS];
  82. /**
  83. * When decoding, this signals how much the picture must be delayed.
  84. * extra_delay = repeat_pict / (2*fps)
  85. */
  86. int repeat_pict;
  87. /**
  88. * The content of the picture is interlaced.
  89. */
  90. int interlaced_frame;
  91. /**
  92. * If the content is interlaced, is top field displayed first.
  93. */
  94. int top_field_first;
  95. /**
  96. * Tell user application that palette has changed from previous frame.
  97. */
  98. int palette_has_changed;
  99. /**
  100. * Sample rate of the audio data.
  101. */
  102. int sample_rate;
  103. /**
  104. * Channel layout of the audio data.
  105. */
  106. uint64_t channel_layout;
  107. /**
  108. * 指向这个帧要用到的AVBuffer中的数据缓冲区.
  109. *
  110. * 一般每个图像位面(就时data[0],data[1] data[2])只有一个指向AVBuffer的缓冲区, so for video this array
  111. * always contains all the references. For planar audio with more than
  112. * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in
  113. * this array. Then the extra AVBufferRef pointers are stored in the
  114. * extended_buf array.
  115. */
  116. AVBufferRef *buf[AV_NUM_DATA_POINTERS];
  117. /**
  118. * For planar audio which requires more than AV_NUM_DATA_POINTERS
  119. * AVBufferRef pointers, this array will hold all the references which
  120. * cannot fit into AVFrame.buf.
  121. */
  122. AVBufferRef **extended_buf;
  123. /**
  124. * Number of elements in extended_buf.
  125. */
  126. int        nb_extended_buf;
  127. AVFrameSideData **side_data;
  128. int            nb_side_data;
  129. /**
  130. * 可能因为解码错误,数据帧Frame会成为无效的帧,下面的结构就是当数据帧无效时使用的
  131. */
  132. #define AV_FRAME_FLAG_CORRUPT       (1 << 0)
  133. /**
  134. * Frame flags, a combination of AV_FRAME_FLAG_*
  135. */
  136. int flags;
  137. int64_t best_effort_timestamp;
  138. int64_t pkt_pos;
  139. int64_t pkt_duration;
  140. AVDictionary *metadata;
  141. int decode_error_flags;
  142. #define FF_DECODE_ERROR_INVALID_BITSTREAM   1
  143. #define FF_DECODE_ERROR_MISSING_REFERENCE   2
  144. int channels;
  145. int pkt_size;
  146. enum AVColorSpace colorspace;
  147. enum AVColorRange color_range;
  148. /**
  149. * Not to be accessed directly from outside libavutil
  150. */
  151. AVBufferRef *qp_table_buf;
  152. } AVFrame;

from:http://blog.csdn.net/chance_yin/article/details/16817957

ffmpeg 基本数据结构和对象: AVPacket、AVPicture、AVFrame的更多相关文章

  1. [转载] ffmpeg 基本数据结构和对象: AVPacket、AVPicture、AVFrame

    一.AVPacket /** * AVPacket 作为解码器的输入 或 编码器的输出. * 当作为解码器的输入时,它由demuxer生成,然后传递给解码器 * 当作为编码器的输出时,由编码器生成,然 ...

  2. ffmpeg 基本数据结构和对象(一): AVPacket、AVPicture、AVFrame

    来源:http://blog.csdn.net/chance_yin/article/details/16817957 一.AVPacket /** * AVPacket 作为解码器的输入 或 编码器 ...

  3. FFMPEG结构体分析:AVPacket

    注:写了一系列的结构体的分析的文章,在这里列一个列表: FFMPEG结构体分析:AVFrame FFMPEG结构体分析:AVFormatContext FFMPEG结构体分析:AVCodecConte ...

  4. Redis学习笔记一:数据结构与对象

    1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...

  5. ES6 set和map数据结构对对象数组去重简单实现

    自从有了es6的set数据结构,数组的去重可以简单用一行代码实现,比如下面的方式 let arr = [1, 2, 2, 3, 4] function unique (arr) { return [. ...

  6. [redis读书笔记] 第一部分 数据结构与对象 对象类型

    - 从前面redis的基本数据结构来看,可以看出,redis都是在基本结构(string)的基础上,封装了一层统计的结构(SDS),这样让对基本结构的访问能够更快更准确,提高可控制度. - redis ...

  7. Redis数据结构和对象三

    1.Redis 对象系统 Redis用到的所有主要数据结构,简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合.跳跃表. Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些 ...

  8. Redis | 第一部分:数据结构与对象 上篇《Redis设计与实现》

    目录 前言 1. 简单动态字符串 1.1 SDS的定义 1.2 空间预分配与惰性空间释放 1.3 SDS的API 2. 链表 2.1 链表与节点的定义 2.2 链表的API 3. 字典 3.1 哈希表 ...

  9. Redis | 第一部分:数据结构与对象 下篇《Redis设计与实现》

    目录 前言 1. Redis对象概述 1.1 对象的定义 2. 字符串对象 3. 列表对象 3.1 quicklist 快速链表 4. 哈希对象 5. 集合对象 6. 有序集合对象 7. Redis对 ...

随机推荐

  1. 2: 使用Prism初始化程序(纯汉语版)

    本篇内容讲解了Prism应用程序启动和运行都发生了什么.一个Pris应用程序在程序启动期间需要注册和配置——这被叫做引导应用程序.Prism引导过程包括创建和配置一个模块目录,创建一个例如Unity的 ...

  2. LeetCode OJ:Reverse Bits(旋转bit位)

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  3. PHP中MySQL、MySQLi和PDO的用法和区别【原创】

    对于一个初学PHP的自己,对数据库的连接有着很大的疑惑,从Java转到PHP.数据库连接变了,以前只知道JDBC连接数据库,或者直接用框架调用,对于的PHP的数据库连接方式,及其应用.不是很了解,于是 ...

  4. HashSet实现原理及源码分析

    HashSet简介 HashSet是Set接口实现,它按照Hash算法来存储集合中的元素 不保证元素顺序 HashSet是非同步的,如果多个线程同时访问一个HashSet,要通过代码来保证其同步 集合 ...

  5. node.js 之爬虫

    1. cheerio 与 request request:模拟客户端行为,对页面进行请求 cheerio:对服务器端返回的页面进行解析: var cheerio = require('cheerio' ...

  6. xshell配置密码公钥登录

    1:生成公钥 2:密钥类型选择为rsa,长度为2048,并点击下一步,如下所示: 这里的密码是给密钥设置了密码,那么在使用这个密钥时也要输入密码,也可以设置为空 3:保存密钥 (1):当你选择了输入密 ...

  7. 【剑指offer】扑克牌的顺子,C++实现

    # 题目 # 思路 顺子满足的条件: 数组长度必须为5 除0外没有重复的牌(0表示大小王) 顺子中最大值和最小值的差值小于5 # 代码 #include <iostream> #inclu ...

  8. json中的dumps和loads

    常用有2个方法,也是最基本的使用方法: 1.dumps:把字典转成json字符串 进行post的请求的时候就要用json.dumps来进行装换,利用get方法就可以不用了. 2.loads:把json ...

  9. Android 实现两屏幕互相滑动

    Android 实现两屏幕互相滑动 下文来自: http://blog.csdn.net/song_shi_chao/article/details/7081664 ----------------- ...

  10. hexo的环境搭建

    今天开始折腾下hexo,安装起来还是有点坑,简单记录下,会不断更新. 网上安装的文章多不胜数,当然首先还是得去看看官方的文档. 按照官方的文档,不知大家是否顺利,本人搭建环境的时候并不顺利. 明确要安 ...