ffmpeg 基本数据结构和对象(一): AVPacket、AVPicture、AVFrame
来源:http://blog.csdn.net/chance_yin/article/details/16817957
一、AVPacket
- /**
- * AVPacket 作为解码器的输入 或 编码器的输出。
- * 当作为解码器的输入时,它由demuxer生成,然后传递给解码器
- * 当作为编码器的输出时,由编码器生成,然后传递给muxer
- * 在视频中,AVPacket 只能包含不大于1帧的内容,而视频的1帧可能要包含在多个AVPacket中,AVPacket < AVFrame
- *
- *
- * AVPacket 是ffmpeg中少数的几个公共ABI,它只能被libavcodec和libformat在栈上分配
- *
- * The side data is always allocated with av_malloc() and is freed in
- * av_free_packet().
- */
- typedef struct AVPacket {
- /**
- * packet的内存空间来自于一个叫做“引用计数缓冲区”的地方,这个指针就指向一块引用计数缓冲区
- */
- AVBufferRef *buf;
- /**
- * 显示时间戳 单位是 AVStream->time_base units
- */
- int64_t pts;
- /**
- * 解压时间戳,在这个时刻该包需要被解码
- */
- int64_t dts;
- uint8_t *data;
- int size;
- int stream_index;
- /**
- * A combination of AV_PKT_FLAG values
- */
- int flags;
- /**
- * 存放额外的包信息
- */
- struct {
- uint8_t *data;
- int size;
- enum AVPacketSideDataType type;
- } *side_data;
- int side_data_elems;
- /**
- * 这个包的时间长度 in AVStream->time_base units, 设置0 表示未知.
- * duration = next_pts - this_pts i.
- */
- int duration;
- int64_t pos; ///< 在数据流中的字节偏移量, -1 if unknown
- int64_t convergence_duration;
- } AVPacket;
二、AVPicture
- typedef struct AVPicture {
- uint8_t *data[AV_NUM_DATA_POINTERS]; ///< pointers to the image data planes
- int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line
- }
三、AVFrame
- /**
- * AVFrame表示解码过后的一个数据帧
- *
- * AVFrame 通过使用 av_frame_alloc()来创建. 这个函数只是创建了AVFrame结构本身,在结构
- * 中定义的指向其他内存块的缓冲区指针要用其他方法来分配
- * 使用 av_frame_free()来释放AVFrame.
- *
- */
- typedef struct AVFrame {
- #define AV_NUM_DATA_POINTERS 8
- /**
- * pointer to the picture/channel planes.
- */
- uint8_t *data[AV_NUM_DATA_POINTERS];
- /**
- * For video, size in bytes of each picture line.
- * For audio, size in bytes of each plane.
- */
- int linesize[AV_NUM_DATA_POINTERS];
- /**
- * pointers to the data planes/channels.
- */
- uint8_t **extended_data;
- /**
- * width and height of the video frame
- */
- int width, height;
- /**
- * number of audio samples (per channel) described by this frame
- */
- int nb_samples;
- /**
- * format of the frame, -1 if unknown or unset
- */
- int format;
- /**
- * 1 -> keyframe, 0-> not
- */
- int key_frame;
- /**
- * Picture type of the frame.
- */
- enum AVPictureType pict_type;
- /**
- * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
- */
- AVRational sample_aspect_ratio;
- /**
- * Presentation timestamp in time_base units (time when frame should be shown to user).
- */
- int64_t pts;
- /**
- * PTS copied from the AVPacket that was decoded to produce this frame.
- */
- int64_t pkt_pts;
- /**
- * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isnt used)
- * This is also the Presentation time of this AVFrame calculated from
- * only AVPacket.dts values without pts values.
- */
- int64_t pkt_dts;
- /**
- * picture number in bitstream order
- */
- int coded_picture_number;
- /**
- * picture number in display order
- */
- int display_picture_number;
- /**
- * quality (between 1 (good) and FF_LAMBDA_MAX (bad))
- */
- int quality;
- /**
- * for some private data of the user
- */
- void *opaque;
- /**
- * error
- */
- uint64_t error[AV_NUM_DATA_POINTERS];
- /**
- * When decoding, this signals how much the picture must be delayed.
- * extra_delay = repeat_pict / (2*fps)
- */
- int repeat_pict;
- /**
- * The content of the picture is interlaced.
- */
- int interlaced_frame;
- /**
- * If the content is interlaced, is top field displayed first.
- */
- int top_field_first;
- /**
- * Tell user application that palette has changed from previous frame.
- */
- int palette_has_changed;
- /**
- * Sample rate of the audio data.
- */
- int sample_rate;
- /**
- * Channel layout of the audio data.
- */
- uint64_t channel_layout;
- /**
- * 指向这个帧要用到的AVBuffer中的数据缓冲区.
- *
- * 一般每个图像位面(就时data[0],data[1] data[2])只有一个指向AVBuffer的缓冲区, so for video this array
- * always contains all the references. For planar audio with more than
- * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in
- * this array. Then the extra AVBufferRef pointers are stored in the
- * extended_buf array.
- */
- AVBufferRef *buf[AV_NUM_DATA_POINTERS];
- /**
- * For planar audio which requires more than AV_NUM_DATA_POINTERS
- * AVBufferRef pointers, this array will hold all the references which
- * cannot fit into AVFrame.buf.
- */
- AVBufferRef **extended_buf;
- /**
- * Number of elements in extended_buf.
- */
- int nb_extended_buf;
- AVFrameSideData **side_data;
- int nb_side_data;
- /**
- * 可能因为解码错误,数据帧Frame会成为无效的帧,下面的结构就是当数据帧无效时使用的
- */
- #define AV_FRAME_FLAG_CORRUPT (1 << 0)
- /**
- * Frame flags, a combination of AV_FRAME_FLAG_*
- */
- int flags;
- int64_t best_effort_timestamp;
- int64_t pkt_pos;
- int64_t pkt_duration;
- AVDictionary *metadata;
- int decode_error_flags;
- #define FF_DECODE_ERROR_INVALID_BITSTREAM 1
- #define FF_DECODE_ERROR_MISSING_REFERENCE 2
- int channels;
- int pkt_size;
- enum AVColorSpace colorspace;
- enum AVColorRange color_range;
- /**
- * Not to be accessed directly from outside libavutil
- */
- AVBufferRef *qp_table_buf;
- } AVFrame;
ffmpeg 基本数据结构和对象(一): AVPacket、AVPicture、AVFrame的更多相关文章
- ffmpeg 基本数据结构和对象: AVPacket、AVPicture、AVFrame
一.AVPacket /** * AVPacket 作为解码器的输入 或 编码器的输出. * 当作为解码器的输入时,它由demuxer生成,然后传递给解码器 * 当作为编码器的输出时,由编码器生成,然 ...
- [转载] ffmpeg 基本数据结构和对象: AVPacket、AVPicture、AVFrame
一.AVPacket /** * AVPacket 作为解码器的输入 或 编码器的输出. * 当作为解码器的输入时,它由demuxer生成,然后传递给解码器 * 当作为编码器的输出时,由编码器生成,然 ...
- Redis学习笔记一:数据结构与对象
1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...
- ES6 set和map数据结构对对象数组去重简单实现
自从有了es6的set数据结构,数组的去重可以简单用一行代码实现,比如下面的方式 let arr = [1, 2, 2, 3, 4] function unique (arr) { return [. ...
- [redis读书笔记] 第一部分 数据结构与对象 对象类型
- 从前面redis的基本数据结构来看,可以看出,redis都是在基本结构(string)的基础上,封装了一层统计的结构(SDS),这样让对基本结构的访问能够更快更准确,提高可控制度. - redis ...
- Redis数据结构和对象三
1.Redis 对象系统 Redis用到的所有主要数据结构,简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合.跳跃表. Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些 ...
- Redis | 第一部分:数据结构与对象 上篇《Redis设计与实现》
目录 前言 1. 简单动态字符串 1.1 SDS的定义 1.2 空间预分配与惰性空间释放 1.3 SDS的API 2. 链表 2.1 链表与节点的定义 2.2 链表的API 3. 字典 3.1 哈希表 ...
- Redis | 第一部分:数据结构与对象 下篇《Redis设计与实现》
目录 前言 1. Redis对象概述 1.1 对象的定义 2. 字符串对象 3. 列表对象 3.1 quicklist 快速链表 4. 哈希对象 5. 集合对象 6. 有序集合对象 7. Redis对 ...
- Redis | 第一部分:数据结构与对象 中篇《Redis设计与实现》
目录 前言 1. 跳跃表 1.1 跳跃表与其节点的定义 1.2 跳跃表的API 2. 整数集合 2.1 整数集合的实现 2.2 整数集合的类型升级 2.3 整数集合的API 3. 压缩列表 3.1 压 ...
随机推荐
- 201871010135 张玉晶《面向对象程序设计(java)》第十四周学习总结
项目 内容 这个作业属于哪个过程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/zyja/p/11963 ...
- CF1234A Equalize Prices
洛谷 CF1234A Equalize Prices Again 洛谷传送门 题目描述 You are both a shop keeper and a shop assistant at a sma ...
- Tiling Terrace CodeForces - 1252J(dp、贪心)
Tiling Terrace \[ Time Limit: 1000 ms\quad Memory Limit: 262144 kB \] 题意 给出一个字符串 \(s\),每次可以选择三种类型来获得 ...
- Linux性能优化实战学习笔记:第十七讲
一.缓存命中率 1.引子 1.我们想利用缓存来提升程序的运行效率,应该怎么评估这个效果呢? 用衡量缓存好坏的指标 2.有没有哪个指标可以衡量缓存使用的好坏呢? 缓存命中率 3.什么是缓存命中率? 所谓 ...
- 遍历 combobox 中的各个选项
For ii = 0 To cboTCAT.Items.Count - 1 MessageBox.Show(CType(cboTCAT.DataSource, DataTable).Rows(ii). ...
- X509证书 指定了无效的提供程序类型 System.Security.Cryptography.CryptographicException 错误解决方法
第一种解决办法: IIS 应用程序池--选中你网站的所配置的应用程序池--右键 选择 “高级配置” --将“加载用户配置文件” 设置为True 第二种解决办法: 在加载证书方法时使用以下方法,请注意第 ...
- 解决win10下IIS下"对路径...的访问被拒绝
解决方案如下: 1.右击文件夹,安全,添加IUSR和IIS_IUSRS安全控制权限. 2.右击文件夹,常规,查看是否只读.将只读属性去掉.
- uwsgi异常服务器内存cpu爆满
记录线上服务器通过linux性能检测工具glances检测到 cpu.内存爆满,且是uwsgi进程占用,对于服务器内核,以及uwsgi配置优化 参考文章 https://blog.csdn.net/o ...
- 使用logstash同步mysql数据库信息到ElasticSearch
本文介绍如何使用logstash同步mysql数据库信息到ElasticSearch. 1.准备工作 1.1 安装JDK 网上文章比较多,可以参考:https://www.dalaoyang.cn/a ...
- oracle--10.2.0.3升级到11.2.0.4
一,环境 01,待升级的系统 升级仅支持10.2.0.2版本之后的系统,如果不是,请把10G升级至高版本! 本次实验环境10.2.0.3 02,挂载11G系统 03,升级须知 1) 做好备份 二,DB ...