繁体   English   中英

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

[英]How to force avcodec to use unaligned frame data planes?

我一直在搜索高低,以强制avcodec为其AVFrame数据使用未对齐的内存。

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

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

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

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

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

标题中包含以下标志:

/* 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->数据现在是未对齐的,情况并非如此。

我不确定我是否正确地看着正确的地方或使用这个标志。

问候,

好奇的乔治

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

ffmpeg一个重要事情是始终检查任何实际上关心已定义选项的内容。 看起来好像很多编解码器实际上都使用这个标志:

~/sources/ffmpeg-2.1.1> find libavcodec/ -name \*.c | xargs grep CODEC_FLAG_UNALIGNED
libavcodec/hevc_ps.c:        !(s->avctx->flags & CODEC_FLAG_UNALIGNED)) {
libavcodec/h264_ps.c:                !(h->avctx->flags & CODEC_FLAG_UNALIGNED)) {
~/sources/ffmpeg-2.1.1>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM