FFmpeg如何计算linesize对齐方式?

问题描述 投票:0回答:1

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

AVCodecContext *context = create_codec_context();
AVFrame *decoded_frame = av_frame_alloc();
avcodec_send_packet(context, encoded_packet);
avcodec_receive_frame(context, decoded_frame);

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

让我觉得奇怪的是解码帧的

linesize
。虽然框架的
width
1620
,但
linesize[0]
1664
。根据这个答案,计算
linesize
时考虑了对齐。为了从
1664
获得
1620
,应该应用
64
作为与初始宽度的对齐。

我的问题是,这个

64
对齐从何而来?搜索 FFmpeg 代码没有给出任何结果。编码帧本身是否已经有这些信息?

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

64
吗?

c++ ffmpeg h.264
1个回答
0
投票

这是 ffmpeg 源代码的一部分,其中解释了对齐的工作原理:

https://ffmpeg.org/doxygen/0.6/mem_8c-source.html#l00064

© www.soinside.com 2019 - 2024. All rights reserved.