原创 HEVC學習(三十二) —— 去方塊濾波之三

Void TComLoopFilter::xSetEdgefilterPU( TComDataCU* pcCU, UInt uiAbsZorderIdx ) { const UInt uiDepth = pcCU->getDepth(

原创 HEVC學習(二十一) —— 熵編碼之二

本文繼續討論編碼器的初始化過程,即draft 9.3.1.1。 上一篇介紹的是各個context對應到標準相應表格的值,以及相關變量和函數,前面提到initBuffer函數對context進行初始化,但是沒有深入解析這個函數的實現,這就是

原创 HEVC學習(二十七) —— 變換編碼之二

//! 用於significant_coeff_flag的上下文推導過程的模式選擇 draft 9.3.3.1.4 Int TComTrQuant::calcPatternSigCtx( const UInt* sigCoeffGrou

原创 HEVC學習(二十) —— 熵編碼之一

從本篇開始,接下來的若干篇會逐步分析HM 9.1中有關熵編碼的過程。在此以及以後的幾篇,我都默認大家對熵編碼(針對CABAC,因爲HEVC只有這一種編碼方式,而H.264有CAVLC和CABAC兩種)的基本概念和流程有了一定的基礎,同時,

原创 HEVC學習(二十二) —— 熵編碼之三

在繼續介紹CABAC之前,先穿插進另外幾種相對而言較爲簡單的熵編碼方式。下圖是截取自draft 7.3.2.1的關於VPS(Video Parameter Set)的句法元素描述: 關注表格中"Descriptor”這一欄,當中的描述符

原创 HEVC學習(三十一) —— 去方塊濾波之二

這個是維護去方塊濾波參數的結構體: /// parameters for deblocking filter typedef struct _LFCUParam { Bool bInternalEdge;

原创 HEVC學習(十八) —— NAL unit 的解碼過程之二

下面介紹實際完成NAL解析工作的函數: /** * Parse an AVC AnnexB Bytestream bs to extract a single nalUnit * while accumulating bytestre

原创 HEVC學習(二十六) —— 量化之一

先列出HM中與draft對應的幾個表格,隨着研究的深入,本文會慢慢補充。 enum ScalingListSize { SCALING_LIST_4x4 = 0, SCALING_LIST_8x8, SCALING_LIST_

原创 HEVC學習(二十八) —— 量化之二

Void TComTrQuant::transformNxN( TComDataCU* pcCU, Pel* pcResidual, //!< 殘差

原创 HEVC學習(二十五) —— 變換系數的編碼之一

本文首先介紹係數掃描模式的初始化。 直接給出代碼及相應的註釋:   // scanning order table UInt* g_auiSigLastScan[ 3 ][ MAX_CU_DEPTH ]; //!< [pattern][d

原创 HEVC學習(二十四) —— 熵編碼之五

本文介紹EncodeDecision過程,對應的代碼及註釋如下: /** * \brief Encode bin * * \param binValue bin value * \param rcCtxModel contex

原创 HEVC學習(十七) —— NAL unit 的解碼過程之一

下圖爲官方標準中NAL層的句法元素,且以僞代碼的形式給出瞭解碼過程: 在HM中由TAppDecTop::decode()調用byteStreamNALUnit(bytestream, nalUnit, stats)實現如上僞代碼: /*

原创 HEVC學習(十九) —— NAL unit 的解碼過程之三

前面兩篇已經將NAL的解析過程的核心部分介紹完了,本篇主要討論如何將NAL的payload部分轉化爲原始數據,即從EBSP到RBSP的過程。 該過程由TAppDecTop::decode()的子函數read(nalu, nalUnit)調

原创 x264去方塊濾波函數解析(二)

上一篇介紹了實際進行濾波的函數,本篇主要介紹,去方塊濾波這邊的函數調用關係。先看幾個定義: //! 兩個函數指針,第一個是bS=1~3時調用的,第二個是bS=4時調用的。 typedef void (*x264_deblock_inter

原创 x264去方塊濾波函數解析(三)

去方塊濾波查表時需要用到的幾個數組: /* Deblocking filter */ static const uint8_t i_alpha_table[52+12*2] = { 0, 0, 0, 0, 0, 0,