视频编码SVC --- JSVM代码阅读笔记(一)

本文详细解读了SVC视频编码的JSVM代码,从main()开始,涉及编码器创建、初始化、参数配置、码流及重建文件的读写,以及编码过程的实现。通过对H264AVCEncoderTest类的方法分析,揭示了SVC编码的内部工作机制。
摘要由CSDN通过智能技术生成

main()         // 主函数

  //H264AVCEncoderTest*  pcH264AVCEncoderTest分配空间,后面函数用它调用

  H264AVCEncoderTest::create()

 

  //初始化pcH264AVCEncoderTest的成员,主要是编码器的参数配置

  pcH264AVCEncoderTest->init()

    //EncoderCodingParameter* m_pcEncoderCodingParameter分配空间

//它是H264AVCEncoderTest *pcH264AVCEncoderTest的成员

EncoderCodingParameter::create( m_pcEncoderCodingParameter )    //编码参数

 

//解析输入命令行,并把相应参数写入EncoderCodingParameter的基类CodingParameter的成员中

m_pcEncoderCodingParameter->init()

      //读取配置文件

  xReadFromFile( cFilename, rcBitstreamFile )

fopen( rcFilename.c_str(), "r");              encoder.cfg

//先创建每个参数

m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineXXX

//从配置文件里读一行,重复直到文件末尾

xReadLine( f, acTags )

//查找读到的参数对应的m_pEncoderLines,更新值

fclose( f );

 

//从上面的配置文件读到的参数中得到有几层,和每层配置文件路径

//对每一层

  setDependencyId(ui);     //设置Did

  //读取每一层的配置文件  读到如下类中

//EncoderCodingParameter::LayerParameters m_acLayerParameters[n]

  xReadLayerFromFile( acLayerConfigName[ui], getLayerParameters(ui) )

//打开配置文件         layerX.cfg

 

//分配空间并初始化参数m_pLayerLines[]  ,也是CodingParameter成员

//读取配置文件每行,并更新对应m_pLayerLines的值

 

//初始化ScalingList

xReadScalMat()

 

//设置输入输出文件路径

rcLayer.setInputFilename     ( (Char*)cInputFilename.c_str() );

rcLayer.setOutputFilename    ( (Char*)cOutputFilename.c_str() );

 

//初始化每个LayerParameters::ResizeParameters m_cResizeParameters

 

//读取SliceGroup的配置文件

xReadSliceGroupCfg( rcLayer)

//读取ROI配置文件

xReadROICfg( rcLayer)

//关闭配置文件

  //设置CGS/MGSDependency_IdQuality_id

  //BaseLayer更新当前LayerResizeParameter----------ESS

     

      //对每一层 rcLayer = m_pcEncoderCodingParameter->getLayerParameters( uiLayer );

        //创建并打开重建输出文件

        WriteYuvToFile::create( m_apcWriteYuv[uiLayer] )

        m_apcWriteYuv[uiLayer]->init( rcLayer.getOutputFilename() )

 

        //创建并打开读入的视频文件

        ReadYuvFile   ::create( m_apcReadYuv [uiLayer] )

        m_apcReadYuv[uiLayer]->init()

 

        //创建并打开码流文件

        WriteBitstreamToFile::create   ( m_pcWriteBitstreamToFile )

        m_pcWriteBitstreamToFile->init ( m_cEncoderIoParameter.cBitstreamFilename )

        

注意:

以上三个文件都是H264AVCEncoderTest类的成员

  WriteBitstreamToFile*         m_pcWriteBitstreamToFile;

  WriteYuvToFile*               m_apcWriteYuv           [MAX_LAYERS];

  ReadYuvFile*                  m_apcReadYuv            [MAX_LAYERS];

 

也用到了辅助IO的成员

EncoderIoParameter            m_cEncoderIoParameter; 

 

      //给编码器分配空间:它是H264AVCEncoderTest *pcH264AVCEncoderTest的成员

      h264::CreaterH264AVCEncoder::create( m_pcH264AVCEncoder )

   ParameterSetMng             ::create( m_pcParameterSetMng )

   BitWriteBuffer              ::create( m_pcBitWriteBuffer )

   BitCounter                  ::create( m_pcBitCounter )

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值