ffmpeg之AVPacket笔记
来源:互联网 发布:网络dd是什么意思 编辑:程序博客网 时间:2024/06/05 07:15
每一个包是一个完整的数据帧,来暂存解复用之后、解码之前的媒体数据(一个音/视频帧、一个字幕包等)及附加信息(解码时间戳、显示时间戳、时长等)
//注意保存音视频数据包的内存
是 malloc 出来的,用完后应及时用 free 归还给系统typedef struct AVPacket{ int64_t pts; int64_t dts; int64_t pos; uint8_t *data;//数据首地址 int size; int stream_index; int flags;//flags为标志域,1表示该数据是一个关键帧 void(*destruct)(struct AVPacket*);//释放数据缓冲区的函数指针} AVPacket;AVPacket本身只是个容器,它data成员引用实际的数据缓冲区。这个缓冲区通常是由av_new_packet创建的,但也可能由 FFMPEG的API创建(如av_read_frame)。当某个AVPacket结构的数据缓冲区不再被使用时,要需要通过调用 av_free_packet释放
而av_new_packet实现如下:(也有 av_init_packet)
void av_init_packet(AVPacket *pkt){ pkt->pts = AV_NOPTS_VALUE; pkt->dts = AV_NOPTS_VALUE; pkt->pos = -1; pkt->duration = 0; pkt->convergence_duration = 0; pkt->flags = 0; pkt->stream_index = 0;#if FF_API_DESTRUCT_PACKET pkt->destruct = NULL;#endif pkt->buf = NULL; // 数据域没有, 为空 pkt->side_data = NULL; pkt->side_data_elems = 0;}int av_new_packet(AVPacket *pkt, int size){ AVBufferRef *buf = NULL;//判断size是否正确 if ((unsigned)size >= (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE) return AVERROR(EINVAL);//分配size大小 av_buffer_realloc(&buf, size + FF_INPUT_BUFFER_PADDING_SIZE); if (!buf) return AVERROR(ENOMEM); memset(buf->data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); av_init_packet(pkt); pkt->buf = buf; pkt->data = buf->data; //data域大小 pkt->size = size;#if FF_API_DESTRUCT_PACKET pkt->destruct = dummy_destruct_packet;#endif return 0;}av_free_packet实现:
static inline void av_free_packet(AVPacket *pkt) {if (pkt && pkt->destruct)pkt->destruct(pkt);}
AVPacketList 仅含有一个 AVPacket,和传统的很多很多节点的 list
不同,不要被 list 名字迷惑。
typedef struct AVPacketList{AVPacket pkt;struct AVPacketList *next; // 用于把各个 AVPacketList 串联起来。} AVPacketList;
3 0
- ffmpeg之AVPacket笔记
- FFmpeg之AVPacket
- FFMPEG AVPacket
- FFMPEG AVPacket
- ffmpeg重要结构体之AVPacket
- FFmpeg总结(六)AV系列结构体之AVPacket
- ffmpeg AVPacket & AVFrame
- ffmpeg(3) AVPacket
- ffmpeg 数据结构-AVPacket
- ffmpeg AVPacket & AVFrame
- ffmpeg AVPacket & AVFrame
- FFmpeg数据结构:AVPacket解析
- FFmpeg数据结构:AVPacket解析
- 【FFmpeg】AVPacket相关
- ffmpeg AVPacket & AVFrame
- FFMPEG结构体分析:AVPacket
- FFMPEG结构体分析:AVPacket
- FFMPEG结构体分析:AVPacket
- AJAX方法中提交请求,target="_blank" 不能正确打开新的浏览器窗口
- 读<大数据日知录:架构与算法>有感
- JS获取系统时间、计算两个日期天数、比较日期大小
- 嵌入式 hi3518平台增加路由代码
- linux下安装memcached
- ffmpeg之AVPacket笔记
- SpringMVC+spring+maven整合
- 说说BackgroundWorker组件
- Java LRU的实现
- android 只修改ViewPager调用setCurrentItem时,滑屏的速度,其他正常
- Android锁屏状态下弹出activity,如新版qq的锁屏消息提示
- 把一些常用的颜色值上传一下
- 10款可以替代Photoshop的网络应用
- 使用单链表求解约瑟夫环问题