gpt4 book ai didi

c++ - 'linesize alignment' 是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 21:40:49 27 4
gpt4 key购买 nike

我正在关注 http://dranger.com/ffmpeg/tutorial01.html 中的 ffmpeg 教程.

我刚刚发现 avpicture_get_size 函数已被弃用。

所以我检查了 ffmpeg 的文档(https://www.ffmpeg.org/doxygen/3.0/group__lavu__picture.html#ga24a67963c3ae0054a2a4bab35930e694)并找到了替代品 av_image_get_buffer_size

但是我看不懂align参数意思是'linesize alignment'......

这是什么意思?

最佳答案

FFmpeg 的某些部分,尤其是 libavcodec,需要对齐的 linesizes[],这意味着它需要:

assert(linesize[0] % 32 == 0);
assert(linesize[1] % 32 == 0);
assert(linesize[2] % 32 == 0);

这允许它使用快速/对齐的 SIMD 例程(例如 SSE2/AVX2 movdqavmovdqa 指令)进行数据访问,而不是使用速度较慢的未对齐对应例程。

这个av_image_get_buffer_size函数的align参数就是这个行对齐,你需要它,因为缓冲区的大小受它的影响。例如,YUV 缓冲区中 Y 平面的大小实际上不是宽度 * 高度,而是 linesize[0] * 高度。您会看到(尤其是对于不是 16 或 32 倍数的图像尺寸),当您将 align 增加到 2 的更高次方时,返回值会缓慢增加。

实际上,如果您打算将此图片用作调用的输出缓冲区,例如avcodec_decode_video2,这个应该是32。对于swscale/avfilter,我相信没有绝对要求,但建议还是32。

关于c++ - 'linesize alignment' 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35678041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com