首页 > 解决方案 > FFmpeg 如何计算 linesize 对齐方式?

问题描述

我是视频编码的新手。我正在使用 FFmpeg 库来解码H.264 帧。我有以下 C++ 代码(完整代码在这里):

AVCodecContext *context = create_codec_context();
AVFrame *decoded_frame = av_frame_alloc();
int got_frame;
avcodec_decode_video2(context, decoded_frame, &got_frame, &encoded_frame);

std::cout << decoded_frame->width << std::endl; // prints 1620, as expected
std::cout << decoded_frame->linesize[0] << std::endl; // prints 1664!

对我来说看起来很奇怪的是linesize解码帧的。虽然width框架的 是1620,但linesize[0]1664。根据这个答案linesize计算时会考虑对齐。为了1664从中获取1620,应该将64其作为与初始宽度的对齐方式。

我的问题是,这种64对齐从何而来?搜索 FFmpeg 代码没有给出任何结果。编码帧本身是否已经具有此信息?

如果之后我决定使用av_image_copy_to_buffer()将解码帧“展平”为一维数组,我应该使用什么对齐方式?也应该这样64吗?

标签: c++ffmpegh.264

解决方案


推荐阅读