在AVFrame中计算音视频数据大小

AVFrame* frame;
视频:
如果是packet模式
frame->linesize[0] x frame->width
如果是planner模式
(frame->linesize[0] + frame->linesize[1] + frame->linesize[2]) x frame->width

音频:
如果是packet模式
frame->linesize[0] x frame->channels
如果是planner模式
(frame->linesize[0] + frame->linesize[1]) x frame->channels
值得注意的是,frame->linesize[0]并不是代表frame->data[0]实际的字节数,只要用av_frame_get_buffer给frame->data分配好内存后,frame->linesize[0]已经被赋于一个确切的值。

注意以上两种算法都可能有字节补齐,这部分之前的文章有提到过,下面提供另外一种用格式的计算方式:
视频:
yuv444格式
frame->width x frame->height x 3
yuv422
frame->width x frame->height x 2
yuv420
frame->widht x frame->height x 1.5

音频:
16位的位深
frame->nb_samples x frame->channels x 16 / 2
32位的位深
frame->nb_samples x frame->channels x 32 / 2

相关文章:YUV的plannar,packet及semi-planar格式及RGB

猜你喜欢

转载自blog.csdn.net/weixin_43466192/article/details/121649019