gpt4 book ai didi

c++ - 如何强制 avcodec 使用未对齐的帧数据平面?

转载 作者:太空狗 更新时间:2023-10-29 21:43:59 29 4
gpt4 key购买 nike

我一直在到处寻找一个选项来强制 avcodec 为其 AVFrame 数据使用未对齐的内存。

根据像素格式,AVFrame->data 的水平面可能会填充额外的数据以与内存对齐以提高性能。

例如:每个像素 4 字节的 1920 * 1080 视频每个平面将有 1920 * 4 = 7680 字节。

如果您使用 avcodec 解码此视频,它将在每个平面上创建 7808 字节。

这增加了 7808 - 7680 = 128 字节的额外填充。

为了我的目的,我想强制 avcodec 使用未对齐的数据,这样我就可以复制整个连续的帧数据 block ,而不是一次一个地复制和格式化较小的 block 到一个连续的 block 。

在 header 中找到以下标志:

/* encoding support
These flags can be passed in AVCodecContext.flags before initialization.
Note: Not everything is supported yet.
*/

/**
* Allow decoders to produce frames with data planes that are not aligned
* to CPU requirements (e.g. due to cropping).
*/
#define CODEC_FLAG_UNALIGNED 0x0001

将这个 AVCodecContext.flags 设置为 CODEC_FLAG_UNALIGNED,假设是 AVFrame->data 现在未对齐,事实并非如此。

我不确定我是否找对了地方或正确使用了这个标志。

问候,

好奇的乔治

最佳答案

解码后,您可以使用 swrescale 将像素格式化为您提供的内存缓冲区。只需将输入和输出分辨率设置为相同,分配一 block 内存,并将你的行步幅设置为等于帧宽度。

关于c++ - 如何强制 avcodec 使用未对齐的帧数据平面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21404908/

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