刚入学的时候导师安排的是看Hevc,虽然后面转头去做别的东西了,不过还是想着把自己学习的皮毛记录下来叭!

嗯,主要的框架图看到这篇文章写的很好,可以帮助我们进行代码跟踪

化简之后的图为:

代码我们从一层一层的慢慢往下看的,首先当然是看编码函数的main函数了,也就是TAppEncoder中的encmain.cpp文件,main函数也就是编码的入口函数,是最上面一层的编码函数,主要功能是定义TappEncTop函数、打印HM版本信息、创建encode类、解析cfg文件看是否有误、计时和最重要的调用encode编码函数,跳转到下一层函数,代码如下:

#include <time.h>
#include <iostream>
#include "TAppEncTop.h"
#include "TAppCommon/program_options_lite.h"
#include"res.h"
//! \ingroup TAppEncoder
//! \{#include "../Lib/TLibCommon/Debug.h"// ====================================================================================================================
// Main function 主函数
// ====================================================================================================================int main(int argc, char* argv[])
{TAppEncTop  cTAppEncTop; //定义cTAppEncTop// print information 打印信息并输出HM版本信息fprintf( stdout, "\n" );fprintf( stdout, "HM software: Encoder Version [%s] (including RExt)", NV_VERSION );fprintf( stdout, NVM_ONOS );fprintf( stdout, NVM_COMPILEDBY );fprintf( stdout, NVM_BITS );fprintf( stdout, "\n\n" );// create application encoder classcTAppEncTop.create(); //创建encoder类,实际上create是一个空函数,不做任何操作// parse configuration 解析cfg配置文件try{if(!cTAppEncTop.parseCfg( argc, argv ))//如果cfg文件正确会调用xCheckParameter函数,在命令行窗口中输出解析提示,并调用xPrintParameter来回显参数{cTAppEncTop.destroy(); //如果cfg文件错误,调用destroy函数,实际上也是一个空函数,不做任何操作
#if ENVIRONMENT_VARIABLE_DEBUG_AND_TESTEnvVar::printEnvVar();
#endifreturn 1;}}catch (df::program_options_lite::ParseFailure &e) //异常处理,如果cfg文件错误时回显错误提示{std::cerr << "Error parsing option \""<< e.arg <<"\" with argument \""<< e.val <<"\"." << std::endl;return 1;}#if PRINT_MACRO_VALUES //打印宏块值printMacroSettings();
#endif#if ENVIRONMENT_VARIABLE_DEBUG_AND_TESTEnvVar::printEnvVarInUse(); //在cfg配置文件中定义的函数
#endif// starting timeDouble dResult;clock_t lBefore = clock();// call encoding functioncTAppEncTop.encode();// ending timedResult = (Double)(clock()-lBefore) / CLOCKS_PER_SEC; //用dResult变量存储计时结果printf("\n Total Time: %12.3f sec.\n", dResult);//显示计时结果// destroy application encoder classcTAppEncTop.destroy();//调用destroy函数,destroy函数为空函数// cout << "        " << " The TestFlag is :" << TestFlag <<endl;return 0;
}

从上代码可以看出,主要的编码过程是在encode函数中进行的,因此我们跳转到encode函数里进行代码解读跟踪

HEVC编码框架和main函数代码跟踪解读相关推荐

  1. compressGOP函数代码跟踪

    之前的学习中对encode函数进行了跟踪解读,在里面调用了compressGOP函数(代码太多了,看完得猴年马月,要人命,对付一下对付一下!),看到这个代码名字就联想到视频的编码过程了吧,视频先分成G ...

  2. compressSlice函数代码跟踪

    西巴,上篇随便对付了一下关于GOP的函数,那接下来当然是对付Slice函数啦! Void TEncSlice::compressSlice( TComPic* pcPic, const Bool bC ...

  3. HEVC算法和体系结构:编码框架

    编码框架 2013年4月13日HEVC/H.265被ITU-T正式接受为国际标准.类似以往的国际标准,HEVC仍旧采用"预测+变换"的混合编码框架,如下图所示,包括变换.量化.熵编 ...

  4. 【浅谈】main函数的三个参数

    [浅谈]main函数的参数 我们平时使用main函数时,在main函数参数这一栏常常省略不写,或者填上(void).实际上main函数是具有参数的,并且它的参数有很大作用.今天我们来看看main函数的 ...

  5. 【Android 逆向】Android 逆向通用工具开发 ( Android 端远程命令工具 | Android 端可执行程序的 main 函数操作 | TCP 协议服务器建立 | 接收客户端数据 )

    文章目录 前言 一.Android 端可执行程序的 main 函数操作 二.Android 端 TCP 协议服务器建立 三.Android 端接收 PC 端传来的数据 四.博客资源 前言 本篇博客重点 ...

  6. HEVC编码技术简介

    HEVC视频编码框架 HEVC编码框架与H.26X标准的编码框架类似,均采用基于块的混合模型. 图1 HEVC编码框架 如上图所示,HEVC编码器的工作过程为: 1.首先,视频编码器将输入视频图像划分 ...

  7. HEVC编码标准介绍

    视频编码标准的发展历程 目前已经有H266.AVS3.AV1等新编码标准. H264的编码劣势 宏块个数的爆发式增长,会导致用于编码宏块的预测模式.运动矢量.参考帧索引.量化等宏块级参数信息所占用的码 ...

  8. H.265/HEVC编码原理及其处理流程的分析

    H.265/HEVC编码原理及其处理流程的分析 H.265/HEVC编码的框架图,查了很多资料都没搞明白,各个模块的处理的分析网上有很多,很少有把这个流程串起来的.本文的主要目的是讲清楚H.265/H ...

  9. Redis源码-BFS方式浏览main函数

    文章目录 前言 看代码的方式 Redis 服务器的 main 函数 main 函数分段解释 函数名及参数 启动测试程序 程序环境初始化 初始化配置信息 存储参数信息 根据参数确定启动方式 处理并加载命 ...

最新文章

  1. 科普丨让机器看见世界,这背后的技术是什么?
  2. android 线程 wait notify
  3. R语言包在linux上的安装等知识
  4. 【Python-ML】SKlearn库决策树(DecisionRegression) 使用
  5. Qt数据库操作(三) -- 使用SQL模型类
  6. Java怎么学?Java的学习步骤分享
  7. 电脑亮度多少对眼睛好_鲁大师性能测试多少分算好电脑?
  8. Stream从Python切换到Go的原因
  9. python3.5怎么打开一个文件,Python3.5入门学习记录-File
  10. 十一章--软件设计与实现
  11. 2021 年 Java 开发者生产力报告
  12. 小米怎么设置语音识别权限 | 手游网游页游攻略大全
  13. 计算机WPS一级教材PDF,2017年计算机一级WPS辅导:金山词霸PDF文档取词攻略
  14. Safari Web Extension 开发(1)
  15. 【问题解决方案】电脑版微信如何使用外接摄像头
  16. Android ROM开发(一)——Windows下Cygwin和Android_Kitchen厨房的安装
  17. 如何进行Sublime Text插件的升级和卸载?
  18. Mac安装Mysql卡在最后一步
  19. 免费自助建站系统源码(开源)
  20. 51单片机NTC热敏电阻温度采集及控制ADC0832 LCD1602

热门文章

  1. java成果_java学习成果1 - chenxiao60的个人空间 - OSCHINA - 中文开源技术交流社区
  2. LeanTween 常用API
  3. Win10修改编辑文件无法保存怎么办(没有权限)
  4. Noip—p1309 瑞士轮
  5. Win10 OneNote 一直卡的登录界面
  6. 任务栏谷歌图标和其他图标重叠(如钉钉)的解决方法
  7. 无法访问网上邻居/网络打印机的解决方法
  8. 操作系统面试题(转载)
  9. 耳朵上的艺术品,飞利浦圈铁真无线耳机JT60无敌了!
  10. java 转byte字符串,Java 字符串与byte之间的相互转换