05 AVFrame数据模型与API
AVFrame数据模型与API
1. 数据模型
AVFrame与AVPacket类似,同样是通过一个引用指向真正的frame数据。
2. 常用API
函数原型 | 说明 |
---|---|
AVFrame *av_frame_alloc(void); |
分配AVFrame |
void av_frame_free(AVFrame **frame); |
释放AVFrame |
int av_frame_ref(AVFrame *dst, const AVFrame *src); |
增加引用计数 |
void av_frame_unref(AVFrame *frame); |
减少引用计数 |
void av_frame_move_ref(AVFrame *dst, AVFrame *src); |
转移引用计数 |
int av_frame_get_buffer(AVFrame *frame, int align); |
根据AVFrame分配内存 |
AVFrame *av_frame_clone(const AVFrame *src); |
等于 av_frame_alloc() + av_frame_ref() |
3. examples
av_frame_get_buffer
AVFrame* frame = av_frame_alloc(); |
FFmpeg 中定义两种音频声道布局类型,分别代表:
-
AV_CH_LAYOUT_MONO
: 单声道布局,只有一个声道。(size* 1) -
AV_CH_LAYOUT_STEREO
: 立体声布局,有两个声道。(size* 2)
FFmpeg 中定义两种采样格式,其中:
-
AV_SAMPLE_FMT_S16
表示音频样本以16位有符号整型的形式存储,所有声道的样本都存储在同一个连续的缓冲区内-
(即在同一缓冲区交错存储)
-
frame->buf[0]->size; // 4096
- `AV_SAMPLE_FMT_S16P` 表示每个声道的样本存储在不同的缓冲区中,它是一种平面音频格式,每个声道的数据是分开存储的
- (即在两个缓冲区分别存储)
- ```C++
frame->buf[0]->size; // 2048
frame->buf[1]->size; // 2048
-
发布于