首页 > 解决方案 > 如何计算 linesize 的填充?

问题描述

我是一个学习ffmpeg的新手,我在互联网上发现的更新文档太少。

当我写这个时:

av_image_fill_arrays(frame2->data, frame2->linesize, (const uint8_t *)NULL,
                                         frame->format, screenWidth, screenHeight,
                                         32);
sws_scale(videoScaleCtx, (const uint8_t **) frame->data,
                                      frame->linesize, 0,
                                      frame->height,
                                      dst, frame2->linesize);

它只会在底部显示一个黑屏,顶部同时播放 4 个相同的小屏幕。我理解它的填充让我很困惑,即使我的屏幕宽度为 2280,它不应该使用填充,因为我有 32 位 cpu(frame2->linesize 是 2304)?

无论如何,我在缩放之前拼命使用它:

frame2->linesize[0] *= 4;

而这一次一切看起来都很正常!右边的填充是现在的 4 倍,这是不对的?

虽然 sws_scale 做了两件事:缩放图片并将 YUV420P 转换为 RGBA,但由于输出图片不应该有填充,des stride 应该只是屏幕宽度 * 4 = 9120,但现在是 72 * 4 * 32 = 9216,怎么来的?

标签: ffmpeglibav

解决方案


推荐阅读