作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在到处寻找一个选项来强制 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/
我是一名优秀的程序员,十分优秀!