c++ - 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
吗?
解决方案
推荐阅读
- azure - Get-AzDataLakeStoreItem 返回 GETFILESTATUS failed with Unknown Error for valid items
- git - 正确设置文件夹中的 .gitignore 文件
- c# - Visual Studio Mac Intellisense 在按下回车键时生成新行而不是完成文本
- c - 赢得猜字游戏时无法终止 for 循环
- laravel - 在 Laravel 中获取空数据
- aws-lambda - aws sam 发布/部署流程
- swift - 如果 Swift 协议是用类型约束定义的,为什么不能直接访问该类型的属性/方法?
- excel - 通过 FTP 发布 Excel 加载项
- android - 未调用 AndroidManifest 中设置的活动
- java - 如何在环境变量中赋予多个系统变量相同的优先级?