原创 LookaheadTLD::calcAdaptiveQuantFrame()

/* aqMode有如下四種mode: X265_AQ_NONE X265_AQ_VARIANCE X265_AQ_AUTO_VARIANCE

原创 LookaheadTLD::lowresIntraEstimate()

/* 進行低分辨率intra的satd估計 過程: 1.得到intra懲罰和lowres懲罰 2.得到低分辨率的CUsize,並得到該CUsize的satd計算函數 3.遍歷幀的每一行 1.初始化行的satd爲0,

原创 CostEstimateGroup::estimateCUCost()

/* 依賴線程tld來執行幀b中的CU(cuX, cuY)以p0爲前向參考,p1爲後向參考的satd inter_satd = min{intra_satd, inter_satd} 過程: 1.分別取低分辨率前向參考幀p

原创 x265多線程-線程/線程池

//< Simplistic portable thread class. Shutdown signalling left to derived class // 對線程的一層對象化包裝 class Thread { priv

原创 x265多線程-event

x265中的event類模擬生產者消費者模型 生產者生產臨界資源,並通過條件變量通知消費者 消費者消耗臨界資源,若無臨界資源則被阻塞等待生產者生產臨界資源 /* 模擬生產者消費者模型 */ class Event { publi

原创 x265多線程-鎖

Lock類是對互斥量的一層對象化包裝 ScopedLock類是模仿C++ lock_guard自定義的區間鎖,作用同lock_guard一模一樣 lock /* 對互斥量的一層包裝 */ class Lock { publi

原创 x265多線程-線程安全型整型變量

/* This class is intended for use in signaling state changes safely between CPU * cores. One thread should be a wr

原创 x265多線程-jobProvider/workerThread

關係 workerThread和jobProvider是多對一的關係。 workerThread.m_curJobProvider可以索引到workerThread當前所對應的jobProvider jobProvider.m_

原创 x265多線程-BondedTaskGroup

任務組BondedTaskGroup的作用是可以徵用若干sleep線程一起執行某一任務 /* Any worker thread may enlist the help of idle worker threads from th

原创 Search::encodeResAndCalcRd[Skip/Inter]CU()

Search::encodeResAndCalcRdSkipCU() /* Note: this function overwrites the RD cost variables of interMode, but leaves

原创 碼控-predict_size()/predict_row_size() / update_predictor()

x264中通過satd和qscale估計bits的模型爲線性模型: bits * qscale = A * satd + B 其中A即coeff,B即offset,則有 coeff = (bits * qscale - coeff

原创 碼控-x264_ratecontrol_start()

/* Before encoding a frame, choose a QP for it 在一幀編碼之前,進行幀級碼率控制 過程: 1.若使用vbv 1. 2.根據profile和level得到

原创 Deblock::edgeFilterLuma()

/* 進行luma環路濾波 進行濾波開關選擇 => 進行濾波強度決策 => 執行環路濾波 過程: 1.獲取重建幀像素點reconYUV 2.遍歷每個 1.進行濾波開關選擇 1.若block stren

原创 幀類型決策-x264_slicetype_decide()

/* lookahead隊列中的幀類型確定 過程: 1.計算每一幀的時長duration 2.對lookahead裏的每一幀進行幀類型分析 ·x264_ratecontrol_slice_type() ·

原创 Analysis::compressCTU()

x265編碼器在編碼一幀時以行爲單位進行WPP編碼,一行一個線程,每個線程分別對自己的行中每個CTU進行compressCTU壓縮分析 /* 壓縮分析CTU 過程: 1.爲當前CTU加載QP/熵編碼上下文 2.是否有編碼