背景说明

当设置AVCodecContext结构体debug字段为1的时候,将会打印如下的调试信息:1)对每一个分片打印详细记录  2)打印SPS/PPS参数值
这两项参数对于解码来说,相当重要,IDR帧是解码的关键,SPS/PPS记录了解码图像相关参数

代码剖析
1)static int h264_slice_init(H264Context *h, H264SliceContext *sl, const H2645NAL *nal)

if (h->avctx->debug & FF_DEBUG_PICT_INFO) {
        av_log(h->avctx, AV_LOG_DEBUG,
               "slice:%d %s mb:%d %c%s%s frame:%d poc:%d/%d ref:%d/%d qp:%d loop:%d:%d:%d weight:%d%s %s\n",
               sl->slice_num,
               (h->picture_structure == PICT_FRAME ? "F" : h->picture_structure == PICT_TOP_FIELD ? "T" : "B"),
               sl->mb_y * h->mb_width + sl->mb_x,
               av_get_picture_type_char(sl->slice_type),
               sl->slice_type_fixed ? " fix" : "",
               nal->type == H264_NAL_IDR_SLICE ? " IDR" : "",
               h->poc.frame_num,
               h->cur_pic_ptr->field_poc[0],
               h->cur_pic_ptr->field_poc[1],
               sl->ref_count[0], sl->ref_count[1],
               sl->qscale,
               sl->deblocking_filter,
               sl->slice_alpha_c0_offset, sl->slice_beta_offset,
               sl->pwt.use_weight,
               sl->pwt.use_weight == 1 && sl->pwt.use_weight_chroma ? "c" : "",
               sl->slice_type == AV_PICTURE_TYPE_B ? (sl->direct_spatial_mv_pred ? "SPAT" : "TEMP") : "");
    }

打印:
slice:1 F mb:0 I IDR frame:0 poc:65536/65536 ref:0/0 qp:25 loop:1:0:0 weight:0
slice:1 F mb:0 P frame:4 poc:65540/65540 ref:1/1 qp:26 loop:1:0:0 weight:0
/* do all the per-slice initialization needed before we can start decoding the
 * actual MBs */

2)int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avctx, H264ParamSets *ps, int bit_length)

if (avctx->debug & FF_DEBUG_PICT_INFO) {
        av_log(avctx, AV_LOG_DEBUG,
               "pps:%u sps:%u %s slice_groups:%d ref:%u/%u %s qp:%d/%d/%d/%d %s %s %s %s\n",
               pps_id, pps->sps_id,
               pps->cabac ? "CABAC" : "CAVLC",
               pps->slice_group_count,
               pps->ref_count[0], pps->ref_count[1],
               pps->weighted_pred ? "weighted" : "",
               pps->init_qp, pps->init_qs, pps->chroma_qp_index_offset[0], pps->chroma_qp_index_offset[1],
               pps->deblocking_filter_parameters_present ? "LPAR" : "",
               pps->constrained_intra_pred ? "CONSTR" : "",
               pps->redundant_pic_cnt_present ? "REDU" : "",
               pps->transform_8x8_mode ? "8x8DCT" : "");
    }

打印
pps:0 sps:0 CAVLC slice_groups:1 ref:1/1  qp:26/26/0/0 LPAR

3)int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, H264ParamSets *ps, int ignore_truncation)

if (avctx->debug & FF_DEBUG_PICT_INFO) {
        static const char csp[4][5] = { "Gray", "420", "422", "444" };
        av_log(avctx, AV_LOG_DEBUG,
               "sps:%u profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%u/%u/%u/%u %s %s %"PRId32"/%"PRId32" b%d reo:%d\n",
               sps_id, sps->profile_idc, sps->level_idc,
               sps->poc_type,
               sps->ref_frame_count,
               sps->mb_width, sps->mb_height,
               sps->frame_mbs_only_flag ? "FRM" : (sps->mb_aff ? "MB-AFF" : "PIC-AFF"),
               sps->direct_8x8_inference_flag ? "8B8" : "",
               sps->crop_left, sps->crop_right,
               sps->crop_top, sps->crop_bottom,
               sps->vui_parameters_present_flag ? "VUI" : "",
               csp[sps->chroma_format_idc],
               sps->timing_info_present_flag ? sps->num_units_in_tick : 0,
               sps->timing_info_present_flag ? sps->time_scale : 0,
               sps->bit_depth_luma,
               sps->bitstream_restriction_flag ? sps->num_reorder_frames : -1
               );
    }

打印
sps:0 profile:66/42 poc:0 ref:1 120x68 FRM 8B8 crop:0/0/0/8 VUI 420 1800/90000 b8 reo:-1

转载于:https://blog.51cto.com/fengyuzaitu/2058590

FFmpeg AVCodecContext结构体debug变量剖析相关推荐

  1. 【FFmpeg】结构体详解(二):AVStream、AVPacket、AVOutputFormat

    FFmpeg结构体详解 7.AVStream 8.AVPacket 9.AVOutputFormat 7.AVStream AVStream 是存储每一个视频/音频流信息的结构体. 重要的变量如下所示 ...

  2. FFMPEG关键结构体

    // FFMPEG关键结构体: // 转载 http://blog.csdn.net/leixiaohua1020/article/details/14214577 // 2016.2.26 AVFr ...

  3. FFmpeg重要结构体(转自雷神)

    首发地址,会更错 本文主要整合FFMPEG中最关键的结构体之间的关系 系列文章,以便于后面学习以及资料的查阅. 结构体间联系 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(im ...

  4. 06FFMPEG的AVCodecContext结构体分析

    06FFMPEG的AVCodecContext结构体分析 概述: 该结构体位于libavcodec库中的avcodec.h中. 1 AVCodecContext编解码上下文结构体 位于libavcod ...

  5. 获取结构体中变量的偏移量

    C/C++获取结构体中变量的偏移量 1.某些特殊需求下,我们需要知道某个变量在其结构体中的偏移位置. 通常的做法就是定义一个宏变量,如下: #define OFFSET(structure, memb ...

  6. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  7. go结构体初始化_go语言基础之结构体普通变量初始化

    1.结构体 1.1.结构体类型 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性.显然单独定义以上变量比较繁琐,数据不便于管理. 结构体是一种聚合的数 ...

  8. MDK keil中在定义一个结构体的时候加点后面不出现结构体当中变量的提示

    MDK keil中在定义一个结构体的时候加点后面不出现结构体当中变量的提示 解决办法: 1.确保已经将顶层头文件stm32f10x.h添加至当前你所写的文件内: 2.检查你自己写的文件是否已经加载到工 ...

  9. 结构体指针和结构体指针变量的区别

    文章目录 前言 一.普通结构体变量 二.结构体指针变量 三.结构体指针 完整代码如下: 前言 结构体变量主要有三种应用场景:1.普通结构体变量:2.结构体指针变量:3.结构体指针. 一.普通结构体变量 ...

最新文章

  1. 配置 php-fpm 监听的socket
  2. class function,delphi静态函数的对象基址分析static
  3. Python 字符串方法详解
  4. Oracle VM Virtual Box的安装
  5. python 字符串 变量_检查变量是否为字符串的Python程序
  6. html tab切换jquery,jQuery版Tab标签切换
  7. 作者:贺田田(1985-),男,香港理工大学电子计算学系博士生
  8. [IE编程] IE的Killbit 技术详解
  9. php取整数余数,js取整数、取余数的方法
  10. zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的UART
  11. 计算机知识演讲稿,乔布斯的演讲稿 我们的IT梦想
  12. mcc、mbuild和mex命令详解
  13. 使用 Task.Wait()?立刻死锁(deadlock)
  14. 立方体在三维坐标中的旋转(3D,Spining)
  15. qbo web接口分析
  16. 达到什么标准就可以上线了?
  17. 云数据库UDB的三重境界「下」
  18. matlab可以实现从阻抗圆到导纳圆,阻抗匹配与史密斯(Smith)圆图,这是我见过最详尽的版本...
  19. oracle dbsat数据库安全评估工具的使用
  20. Arduino读取CCS811+HDC1080模块

热门文章

  1. boost::graph模块实现一个只读隐式加权图的简单示例的测试程序
  2. boost::geometry模块实现自定义点示例
  3. Boost:bind绑定的==,!=,<,<=,>,> =运算符的测试程序
  4. VTK:可视化之CurvatureBandsWithGlyphs
  5. VTK:PolyData之DataSetSurfaceFilter
  6. OpenCV的随机生成器和输出显示文本
  7. C++实现circular queue循环队列(使用数组)(附完整源码)
  8. C语言煎饼排序Pancake sort算法(附完整源码)
  9. c++ 树的先序、中序和后序的非递归实现(附完整源码)
  10. QT的QDrag类的使用