【问题标题】:AVFrame buf size calculationAVFrame buf 大小计算
【发布时间】:2021-02-19 08:00:08
【问题描述】:

我在将原始视频数据写入 AVFrame 时遇到段错误和/或超出范围的内存写入,因此无法使用 ffmpeg 库对视频进行编码。因此,我只想问一下我的假设是否正确。

我是否正确假设AVFrame.data[i] 的大小总是等于AVFrame.linesize[i]*AVFrame.Height?或者是否存在情况并非如此的情况,如果是这样,我如何可靠地计算AVFrame.data[i] 的大小?

【问题讨论】:

    标签: c++ ffmpeg libav libavcodec


    【解决方案1】:

    这取决于像素格式。例如 YUV 4:4:4,是的,每个平面都是 linesizeheight。但是对于 4:2:2,Y 平面为 linesizeheight,而 U 和 V 平面为 linesize*height/2。

    【讨论】:

      【解决方案2】:

      它适用于大多数情况,但我不会针对所有不同的格式进行中继:-

      AVFrame.linesize[i] = AVFrame.Width * PixelSize(其中 PixelSize 例如 RGBA = 4bytes)

      BufferSize = AVFrame.linesize[i] * AVFrame.Height

      最好的办法,应该是使用FFmpeg的官方av_image_get_buffer_size

      int buffer_size = av_image_get_buffer_size(AVPixelFormat.AV_PIX_FMT_RGBA, codecCtx->width, codecCtx->height, 1);
      

      【讨论】:

        猜你喜欢
        • 2015-09-24
        • 1970-01-01
        • 2010-12-28
        • 2019-05-13
        • 1970-01-01
        • 1970-01-01
        • 2017-10-10
        • 2011-04-09
        • 2011-08-21
        相关资源
        最近更新 更多