zoukankan      html  css  js  c++  java
  • AVFrame

    AVFrame结构体一般用于存储原始数据(即非压缩数据,例如对视频来说是YUV,RGB,对音频来说是PCM),此外还包含了一些相关的信息。比如说,解码的时候存储了宏块类型表,QP表,运动矢量表等数据。编码的时候也存储了相关的数据。因此在使用FFMPEG进行码流分析的时候,AVFrame是一个很重要的结构体。

    uint8_t *data[AV_NUM_DATA_POINTERS]:解码后原始数据(对视频来说是YUV,RGB,对音频来说是PCM)

    int linesize[AV_NUM_DATA_POINTERS]:data中“一行”数据的大小。注意:未必等于图像的宽,一般大于图像的宽。

    int width, height:视频帧宽和高(1920x1080,1280x720...)

    int nb_samples:音频的一个AVFrame中可能包含多个音频帧,在此标记包含了几个

    int format:解码后原始数据类型(YUV420,YUV422,RGB24...)

    int key_frame:是否是关键帧

    enum AVPictureType pict_type:帧类型(I,B,P...)

    AVRational sample_aspect_ratio:宽高比(16:9,4:3...)

    int64_t pts:显示时间戳

    int coded_picture_number:编码帧序号

    int display_picture_number:显示帧序号

    int8_t *qscale_table:QP表

    uint8_t *mbskip_table:跳过宏块表

    int16_t (*motion_val[2])[2]:运动矢量表

    uint32_t *mb_type:宏块类型表

    short *dct_coeff:DCT系数,这个没有提取过

    int8_t *ref_index[2]:运动估计参考帧列表(貌似H.264这种比较新的标准才会涉及到多参考帧)

    int interlaced_frame:是否是隔行扫描

    uint8_t motion_subsample_log2:一个宏块中的运动矢量采样个数,取log的

    其他的变量不再一一列举,源代码中都有详细的说明。在这里重点分析一下几个需要一定的理解的变量:

    1.data[]

    对于packed格式的数据(例如RGB24),会存到data[0]里面。

    对于planar格式的数据(例如YUV420P),则会分开成data[0],data[1],data[2]...(YUV420P中data[0]存Y,data[1]存U,data[2]存V)

    具体参见:FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)(https://blog.csdn.net/leixiaohua1020/article/details/14215391)

    提高技能如同提升自信心。
  • 相关阅读:
    C# 操作Orcle数据库
    WinDbg排查CPU高的问题
    NetCore微服务实战体系:日志管理
    NetCore微服务实战体系:Grpc+Consul 服务发现
    解惑求助-关于NetCore2.2中间件响应的问题
    EF Join连接查询的坑
    给DataTable添加行的几种方式
    [C#] 折腾海康威视的人体测温 模组
    [WPF 学习] 15.播放百度合成的语音
    [WPF 学习] 14.PlaceHolder的简单实现
  • 原文地址:https://www.cnblogs.com/chims-liu-touch/p/14493335.html
Copyright © 2011-2022 走看看