3D-HEVC解码器一

3D-HEVC的官方标准测试软件解决方案HM_vc10中有11个项目,分别为TAppCommon,TAppDecoder,TAppEncoder,TAppExtractor,TAppRender,TLibCommon,TLibDecoder,TLibEncoder,TLibExtractor,TLibRender和TLibVideoIO。其中,TAppDecoder项目下有decmain.cpp,TAppDecCfg.cpp和TAppDecTop.cpp三个cpp文件,以及TAppDecCfg.h和TAppDecTop.h两个头文件。

下面学习一下decmain.cpp,该文件是解码器应用TAppDecoder的主函数。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "TAppDecTop.h"

bool g_md5_mismatch = false; ///< top level flag that indicates if there has been a decoding mismatch

如上所示,包含四个头文件,并定义一个bool变量g_md5_mismatch,赋值为false,意思是高层标志表明是否存在解码失配。

接下来进入main函数:

int main(int argc, char* argv[])
{
  TAppDecTop  cTAppDecTop;

  // print information
  fprintf( stdout, "\n" );
#if H_MV
  fprintf( stdout, "3D-HTM Software: Decoder Version [%s] based on HM Version [%s]", NV_VERSION, HM_VERSION );
#else
  fprintf( stdout, "HM software: Decoder Version [%s]", NV_VERSION );
#endif
  fprintf( stdout, NVM_ONOS );
  fprintf( stdout, NVM_COMPILEDBY );
  fprintf( stdout, NVM_BITS );
  fprintf( stdout, "\n" );

  // create application decoder class
  cTAppDecTop.create();

  // parse configuration
  if(!cTAppDecTop.parseCfg( argc, argv ))
  {
    cTAppDecTop.destroy();
    return 1;
  }

  // starting time
  double dResult;
  long lBefore = clock();

  // call decoding function
  cTAppDecTop.decode();

  if (g_md5_mismatch)
  {
    printf("\n\n***ERROR*** A decoding mismatch occured: signalled md5sum does not match\n");
  }

  // ending time
  dResult = (double)(clock()-lBefore) / CLOCKS_PER_SEC;
  printf("\n Total Time: %12.3f sec.\n", dResult);

  // destroy application decoder class
  cTAppDecTop.destroy();

  return g_md5_mismatch ? EXIT_FAILURE : EXIT_SUCCESS;
}

在main函数里,首先定义一个名叫cTAppDecTop的TAppDecTop类(定义在TAppDecTop.h中),再使用fprintf输出一些信息到控制台中。其中宏H_MV定义在TLibCommon项目里的TypeDef.h文件中。

接着使用cTAppDecTop.create()创建一个解码器应用类,再用cTAppDecTop.create(argc, argv)进行判断配置解析是否结束,若结束则cTAppDecTop.destroy()解码器应用类。

然后定义一个double变量dResult,并用clock()函数计算起止时间。中间调用在TAppDecTop.cpp文件中的解码函数cTAppDecTop.decode(),并用之前定义的g_md5_mismatch判断解码是否失配。最后要destroy解码器应用类,并返回g_md5_mismatch。

时间: 2024-08-08 22:06:28

3D-HEVC解码器一的相关文章

FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分

上篇文章概述了FFmpeg中HEVC(H.265)解码器的结构:从这篇文章开始,具体研究HEVC解码器的源代码.本文分析HEVC解码器中解析器(Parser)部分的源代码.这部分的代码用于分割HEVC的NALU,并且解析SPS.PPS.SEI等信息.解析HEVC码流(对应AVCodecParser结构体中的函数)和解码HEVC码流(对应AVCodec结构体中的函数)的时候都会调用该部分的代码完成相应的功能. 函数调用关系图 FFmpeg HEVC解析器(Parser)部分在整个HEVC解码器中的

FFmpeg的HEVC解码器源代码简单分析:环路滤波(Loop Filter)

===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg的HEVC解码器源代码简单分析:概述 FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分 FFmpeg的HEVC解码器源代码简单分析:解码器主干部分 FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-PU FFmpeg的HEVC解码器源代码简单

FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-TU

本文分析FFmpeg的libavcodec中的HEVC解码器的CTU解码(CTU Decode)部分的源代码.FFmpeg的HEVC解码器调用hls_decode_entry()函数完成了Slice解码工作.hls_decode_entry()则调用了hls_coding_quadtree()完成了CTU解码工作.由于CTU解码部分的内容比较多,因此将这一部分内容拆分成两篇文章:一篇文章记录PU的解码,另一篇文章记录TU解码.本文记录TU的解码过程. 函数调用关系图 FFmpeg HEVC解码器

HEVC解码器的TDecCu部分

我的这篇文章<HEVC解码器流程>给出了HEVC解码器的整体流程图,这里主要针对TDecCu部分进行讲解. TDecCu入口主要有两部分:一部分是decodeCtu,完成的是熵解码和逆扫描:另外一部分是decompressCtu,完成的是预测.反量化.反变换和重构等功能. 具体流程图如下图所示.红色部分表示的是递归函数,对应括号里面完成的是相应的劈分.

FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-PU

本文分析FFmpeg的libavcodec中的HEVC解码器的CTU解码(CTU Decode)部分的源代码.FFmpeg的HEVC解码器调用hls_decode_entry()函数完成了Slice解码工作.hls_decode_entry()则调用了hls_coding_quadtree()完成了CTU解码工作.由于CTU解码部分的内容比较多,因此将这一部分内容拆分成两篇文章:一篇文章记录PU的解码,另一篇文章记录TU解码.本文记录PU的解码过程. 函数调用关系图 FFmpeg HEVC解码器

FFmpeg的HEVC解码器源代码简单分析:解码器主干部分

本文分析FFmpeg的libavcodec中的HEVC解码器的主干部分."主干部分"是相对于"CTU解码". "环路滤波"这些细节部分而言的.它包含了HEVC解码器直到hls_decode_entry()前面的函数调用关系(hls_decode_entry()后面就是HEVC解码器的细节部分,主要包含了"CTU解码". "环路滤波"2个部分). 函数调用关系图 FFmpeg HEVC解码器主干部分在整个HE

FFmpeg的HEVC解码器源代码简单分析:概述

从这篇文章开始,简单分析记录FFmpeg中libavcodec的HEVC(H.265)解码器(HEVC Decoder)的源代码.本文综述整个解码器的框架,后续几篇文章再对解码器的内部模块进行分析. 函数调用关系图 FFmpeg的HEVC(H.265)解码器的函数调用关系图如下所示.   单击查看更清晰的大图 下面解释一下图中关键标记的含义. 作为接口的结构体FFmpeg和HEVC解码器之间作为接口的结构体有2个: ff_hevc_parser:用于解析HEVC码流的AVCodecParser结

openHevc学习笔记:解码器中CTU的TU与PU解码

HEVC解码器的CTU解码(CTU Decoder)部分在整个HEVC解码器中的位置如下图红框所示,在hls_coding_unit()之中.CTU解码(CTU Decoder)部分的函数调用关系如下图右边方框所示.(右键新窗口打开查看大图) hls_decode_entry() hls_decode_entry()是FFmpeg HEVC解码器中Slice解码的入口函数.该函数的定义如下所示. //解码入口函数 static int hls_decode_entry(AVCodecContex

FFMPEG视音频编解码零基础学习方法-b

感谢大神分享,虽然现在还看不懂,留着大家一起看啦 PS:有不少人不清楚“FFmpeg”应该怎么读.它读作“ef ef em peg” 0. 背景知识 本章主要介绍一下FFMPEG都用在了哪里(在这里仅列几个我所知的,其实远比这个多).说白了就是为了说明:FFMPEG是非常重要的. 使用FFMPEG作为内核视频播放器: Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音... 使用FFMPEG作为内核的Directshow Filter: ffdshow,lav fil

github视频录制播放相关功能-参考

lookingstars/JZVideoDemo  视频播放器 Updated on 11 Aug Objective-C 15 10 caoguoqing/VideoEditDemo  iOS video cut ,also can add blackgroundmusic iOS 视频剪辑,视频添加背景音乐 Updated on 13 Jun 2014 Objective-C 139 50 835239104/KrVideoPlayerPlus  根据36Kr开源的KRVideoPlayer