• AVFrame中data与linesize关系


    AVFrame里面有data[4]和linesize[4]其中data是一个指向指针的指针(二级、二维指针),也就是指向视频数据缓冲区的首地址,而data[0]~data[3]是一级指针,可以用如下的图来表示:

    data -->xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                ^                          ^                        ^
                |                           |                        |
            data[0]                data[1]              data[2]

    比如说,当pix_fmt=AV_PIX_FMT_YUV420P时,data中的数据是按照YUV的格式存储的,也就是:

    data -->YYYYYYYYYYYYYYYYYYYYYYYYUUUUUUUUUUUVVVVVVVVVVVV
                ^                                                     ^                        ^
                |                                                     |                         |
           data[0]                                           data[1]               data[2]

    linesize是指对应于每一行的大小,为什么需要这个变量,是因为在YUV格式和RGB格式时,每行的大小不一定等于图像的宽度。

    linesize = width + padding size(16+16) for YUV
    linesize = width*pixel_size  for RGB
    padding is needed during Motion Estimation and Motion Compensation for Optimizing MV serach and  P/B frame reconstruction

    for RGB only one channel is available
    so RGB24 : data[0] = packet rgbrgbrgbrgb......
               linesize[0] = width*3
    data[1],data[2],data[3],linesize[1],linesize[2],linesize[2] have no any means for RGB

    测试如下:(原始的320×182视频)
    如果pix_fmt=PIX_FMT_RGBA32
    linesize 的只分别为:1280  0    0     0 (此处是32,应该是4个自己4*8,所以是width*4,不知理解对不对)

    如果pix_fmt=PIX_FMT_RGB24
    linesize 的只分别为:960   0    0     0

    如果pix_fmt=PIX_FMT_YUV420P
    linesize 的只分别为:352   176  176   0

  • 相关阅读:
    大数据基础1
    java之MySQL的使用
    java反射
    java多线程
    java异常
    指针综合
    指向函数的指针变量做函数的参数
    指向函数的指针
    字符串指针法赋值
    字符串冒泡排序和折半查找
  • 原文地址:https://www.cnblogs.com/lidabo/p/15897648.html
Copyright © 2020-2023  润新知