zl程序教程

您现在的位置是:首页 >  其他

当前栏目

HEVC代码追踪(十五):解码之decompressSlice

代码 解码 追踪 十五 HEVC
2023-09-14 08:57:58 时间

Void TDecGop::decompressSlice(TComInputBitstream* pcBitstream, TComPic* rpcPic)

 TComSlice* pcSlice = rpcPic- getSlice(rpcPic- getCurrSliceIdx());

 // Table of extracted substreams.

 // These must be deallocated AND their internal fifos, too.

 TComInputBitstream **ppcSubstreams = NULL;

 //-- For time output for each slice

 long iBeforeTime = clock();

 m_pcSbacDecoder- init( (TDecBinIf*)m_pcBinCABAC );

 m_pcEntropyDecoder- setEntropyDecoder (m_pcSbacDecoder);

 UInt uiNumSubstreams = pcSlice- getPPS()- getEntropyCodingSyncEnabledFlag() ? pcSlice- getNumEntryPointOffsets()+1 : pcSlice- getPPS()- getNumSubstreams();

 // init each couple {EntropyDecoder, Substream}

 UInt *puiSubstreamSizes = pcSlice- getSubstreamSizes();

 ppcSubstreams = new TComInputBitstream*[uiNumSubstreams];

 m_pcSbacDecoders = new TDecSbac[uiNumSubstreams];

 m_pcBinCABACs = new TDecBinCABAC[uiNumSubstreams];

 for ( UInt ui = 0 ; ui uiNumSubstreams ; ui++ )

 m_pcSbacDecoders[ui].init( m_pcBinCABACs[ui]);

 ppcSubstreams[ui] = pcBitstream- extractSubstream(ui+1 uiNumSubstreams ? puiSubstreamSizes[ui] : pcBitstream- getNumBitsLeft());

 for ( UInt ui = 0 ; ui+1 uiNumSubstreams; ui++ )

 m_pcEntropyDecoder- setEntropyDecoder ( m_pcSbacDecoders[uiNumSubstreams - 1 - ui] );

 m_pcEntropyDecoder- setBitstream ( ppcSubstreams [uiNumSubstreams - 1 - ui] );

 m_pcEntropyDecoder- resetEntropy (pcSlice);

 m_pcEntropyDecoder- setEntropyDecoder ( m_pcSbacDecoder );

 m_pcEntropyDecoder- setBitstream ( ppcSubstreams[0] );

 m_pcEntropyDecoder- resetEntropy (pcSlice);

 m_pcSbacDecoders[0].load(m_pcSbacDecoder);

 m_pcSliceDecoder- decompressSlice( ppcSubstreams, rpcPic, m_pcSbacDecoder, m_pcSbacDecoders);

 m_pcEntropyDecoder- setBitstream( ppcSubstreams[uiNumSubstreams-1] );

 // deallocate all created substreams, including internal buffers.

 for (UInt ui = 0; ui uiNumSubstreams; ui++)

 ppcSubstreams[ui]- deleteFifo();

 delete ppcSubstreams[ui];

 delete[] ppcSubstreams;

 delete[] m_pcSbacDecoders; m_pcSbacDecoders = NULL;

 delete[] m_pcBinCABACs; m_pcBinCABACs = NULL;

 m_dDecTime += (Double)(clock()-iBeforeTime) / CLOCKS_PER_SEC;





p /p pre name= code "feed-item-img" target="_blank" href="https://developer.aliyun.com/article/31166">
p /p pre name= code "feed-item-img" target="_blank" href="https://developer.aliyun.com/article/31168">
p /p pre code_snippet_id= 539592 snippet_file_name= blog_20141202_1_5458888 name= code "feed-item-img" target="_blank" href="https://developer.aliyun.com/article/31169">
p /p pre code_snippet_id= 539588 snippet_file_name= blog_20141202_1_7201235 name= code "feed-item-img" target="_blank" href="https://developer.aliyun.com/article/31170">
p xTZSearch调用了2个最为主要的函数:xTZ8PointDiamondSearch和xTZ2PointSearch,值得一提的是,HM中还提供了另外一个搜索函数xTZ8PointSquareSearch,但由于实际并没有使用这个函数,且它其实跟钻石搜索只是搜索点的选择略有不同,分析起来基本上也是一样的。 /p p br /p p /p pre code_s
p /p pre name= code "feed-item-img" target="_blank" href="https://developer.aliyun.com/article/31181">
p /p pre code_snippet_id= 537345 snippet_file_name= blog_20141130_1_6232807 name= code "feed-item-img" target="_blank" href="https://developer.aliyun.com/article/31180">
p /p pre name= code "feed-item-img" target="_blank" href="https://developer.aliyun.com/article/31184">
p /p pre name= code "feed-item-img" target="_blank" href="https://developer.aliyun.com/article/31185">
p /p pre code_snippet_id= 537266 snippet_file_name= blog_20141130_1_961923 name= code "author-img" src="https://ucc.alicdn.com/avatar/img_b52c3e366f5980ae86989f8a252e3c5f.jpg?x-oss-process=image/resize,h_150,m_lfit" />