ffmpeg中AVFrame解码linesize确定

这篇具有很好参考价值的文章主要介绍了ffmpeg中AVFrame解码linesize确定。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 测试环境

机型:Intel(R) Xeon(R) Gold 5218

ffmpeg版本4.3-dev

解码视频分辨率 720x1280 , 解码后 AVFrame linesize 768

解码视频分辨率 480x640, 解码后AVFrame linesize 512

二 linesize计算过程

avcodec_default_get_buffer2

-->update_frame_pool()

-->video_get_buffer()

video_get_buffer()-->

for (i = 0i < 4 && pool->pools[i]; i++) {

pic->linesize[i= pool->linesize[i];

由上面代码可见,AVFrame的linesize源自于 pool的linesize

三 pool 的linesize计算过程

update_frame_pool()

case AVMEDIA_TYPE_VIDEO: {

int linesize[4];

int w = frame->width;

int h = frame->height;

int unaligned;

ptrdiff_t linesize1[4];

size_t size[4];

avcodec_align_dimensions2(avctx&w&hpool->stride_align);

do {

// NOTE: do not align linesizes individually, this breaks e.g. assumptions

// that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2

ret = av_image_fill_linesizes(linesizeavctx->pix_fmtw);

if (ret < 0)

goto fail;

// increase alignment of w for next try (rhs gives the lowest bit set in w)

w += w & ~(w - 1);

unaligned = 0;

for (i = 0i < 4i++)

unaligned |= linesize[i% pool->stride_align[i];

        } while (unaligned);

for (i = 0i < 4i++)

linesize1[i= linesize[i];

ret = av_image_fill_plane_sizes(sizeavctx->pix_fmthlinesize1);

if (ret < 0)

goto fail;

for (i = 0i < 4i++) {

pool->linesize[i= linesize[i]; //这里赋值给pool的linesize

linesize列表 通过 av_image_fill_linesizes获取,基本就是等于 width。

循环中

w += w & ~(w - 1); //每次将最低有效二进制位+1,这样做的目的,比如当前是16的整数倍,调整为32的整数倍。然后64的整数倍。

直到最终对 stride_align[i]取余为0.

avcodec_align_dimensions2(avctx&w&hpool->stride_align);

函数获取 stride_align

for (i = 0i < 4i++)

linesize_align[i= STRIDE_ALIGN;

#if HAVE_SIMD_ALIGN_64

#   define STRIDE_ALIGN 64 /* AVX-512 */

#elif HAVE_SIMD_ALIGN_32

#   define STRIDE_ALIGN 32

#elif HAVE_SIMD_ALIGN_16

#   define STRIDE_ALIGN 16

#else

#   define STRIDE_ALIGN 8

#endif

机器支持avx512, STRIDE_ALIGN 64.

总结:ffmpeg的AVFrame linesize对齐方式和机器支持的simd有关,avx512就是64字节,avx256就是32字节文章来源地址https://www.toymoban.com/news/detail-804017.html

到了这里,关于ffmpeg中AVFrame解码linesize确定的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ffmpeg实现视频解码

    参考100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x) 平台环境:windows VS 2022 以及在 项目-项目属性-链接器-命令行,在右侧其他选项中添加“/SAFESEH:NO”,这样就不会再报错了。 1.初始化FFmpeg库: 在代码中引入相关的FFmpeg头文件,并调用初始化函数。例如: 2.打开输

    2024年01月24日
    浏览(26)
  • ffmpeg的解码过程

    视频解码,是将压缩后的视频(压缩格式如H264)通过对应解码算法还原为YUV视频流的过程;在计算机看来,首先输入一段01串(压缩的视频),然后进行大量的浮点运算,最后再输出更长的一段01串(还原的非压缩视频)。计算机内部可以进行浮点数计算的部件是CPU,目前市

    2024年02月11日
    浏览(17)
  • FFmpeg之视频解码

    第一次写CSDN,先熟悉熟悉FFmpeg 常用结构体 常用方法函数 视频解码的一些基础知识: 视频流是按一定的顺序排列 I 帧, P 帧 和 B 帧的。   因此,重要性:I 帧 P 帧 B 帧。由于不同类型的帧的重要性不同,这意味着我们要按播放连贯的视频,就必须按照一定规定来显示这些帧

    2023年04月08日
    浏览(32)
  • ffmpeg学习之音频解码数据

    音频数据经过解码后会被保存为,pcm数据格式。而对应的处理流程如下所示。 avcodec_find_encoder()  avcodec_find_encoder_by_name()  avcodec_alloc_context3()   设置对应音频编码的数据类型 设置编码的frame的相关参数 整个代码:

    2024年02月16日
    浏览(28)
  • C++使用ffmpeg硬解码

    转载:https://www.pudn.com/news/62bc096d405aad31f717648e.html 使用ffmpeg解码video模块,支持3种解码:cpu解码、amd64平台的cuda解码和NX平台的Nvmpi解码 封装库只依赖ffmpeg,测试程序中用到了OpenCV,可用于将帧送往opencv检测程序 ref: https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/hw_decode.c ref: ht

    2023年04月08日
    浏览(21)
  • FFmpeg中的多线程解码

    互斥锁(mutex-lock)是一种信号量,用来防止两个线程在同一时刻访问相同的共享资源,它有锁定状态和非锁定状态。 在任意时刻,一个线程要想存取共享数据,线程必须首先获得mutex-lock,当此线程释放此共享数据的时候必须对mutex-lock解锁,在一个任意的时间内,只有一个线

    2024年02月14日
    浏览(34)
  • [一]ffmpeg音视频解码

    (1)下载FFmpeg源码(v3.3.6) 下载地址( http://www.ffmpeg.org/download.html#releases ) (2)下载NDK(r14b) 下载地址( https://developer.android.google.cn/ndk/downloads/index.html) (3)编写Android编译脚本 (1)用ftp上传到Ubuntu中 (2)解压Ffmpeg(tar -zxvf ffmpeg-3.3.6.tar.gz) (3)解压NDK(unzip andro

    2024年01月19日
    浏览(41)
  • FFmpeg 开发(14):Android FFmpeg + MediaCodec 实现视频硬解码

    FFmpeg 开发系列连载: FFmpeg 开发(01):FFmpeg 编译和集成 FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放 FFmpeg 开发(03):FFmpeg + OpenSLES 实现音频解码播放 FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放 FFmpeg 开发(05):FFmpeg + OpenGLES 实现视频解码播放和视频滤镜 FFmpeg 开发

    2024年02月09日
    浏览(25)
  • FFmpeg 解码 AAC 格式的音频

    FFmpeg 默认是可以解码 AAC 格式的音频,但是如果需要获取 PCM16 此类数据则需要经过音频转码。首先要打开解码器,然后向解码器发送 AAC 音频帧(不带 ADTS),然后从解码器获取解码后的音频帧,数据是 float 类型的,如果需要则进行转码流程将 float 转成整型。 一、AAC 音频

    2024年02月11日
    浏览(40)
  • rk3588 ffmpeg使用硬件解码

    在https://johnvansickle.com/ffmpeg/下载最新的版本然后解压 将ffmpeg移动到/usr/local/bin文件夹 命令行输入ffmpeg没有报错就安装好了 git下载mpp包 编译安装 解压 –prefix 指定安装目录 –host 当前编译工具链的前缀 ll /usr/bin/gcc*查看 编译指令 –enable-gpl 允许使用GPL代码,生成的库和二进制

    2024年02月04日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包