原创 Analysis::compressIntraCU()

/* 對當前CU當前深度的四叉樹遞歸進行幀內預測壓縮分析,得到當前CU的最優預測,返回其rdcost 過程: 1.得到當前深度depth,以及當前深度下的modeDepth 2.判斷當前CU是否可以split?是否可

原创 幀類型決策-slicetype_path_cost()

/* 計算一個路徑的cost總和,若超過了閾值則立馬返回 根據path中每一幀的幀類型,計算其幀cost,累加返回 總體上一段一段的計算,即以B幀開始到下一個非B幀爲一段 若允許BREF,則將這一段最中間的B幀按照BRE

原创 碼控-x264_ratecontrol_mb_qp()

/* 得到當前待編碼宏塊的qp 過程: 1.取之前幀級碼控決定的qp 2.計算當前宏塊的qp,若使用adaptive qp ·若是參考幀,則 宏塊qp = 幀級qp + qp_offset[mb_index]

原创 幀類型決策-x264_slicetype_analyse()

/* 對lookahead隊列中的幀分析,確定他們的幀類型 過程: 1. 若第一幀是AUTO/I,檢查其相對於上一個非B幀是否場景切換,若場景切換則將當前幀設置爲I,return 2. 遍歷,將所有的關鍵幀根據ope

原创 幀類型決策-scenecut()

scenecut_internal /* 只判斷p1相對於p0是否進是兩幅不同的場景 若是若是不同的場景就返回1,否則0 分別計算將p1作爲I幀的開銷intra_cost 和 p1作爲P幀以p0爲參考幀時的開銷inter_

原创 碼控-clip_qscale()

// apply VBV constraints and clip qscale to between lmin and lmax /* 對qscale進行VBV檢驗,然後clip到lmin和lmax中 過程: 1.根據

原创 Search::checkIntraInInter()

/* Note that this function does not save the best intra prediction, it must * be generated later. It records the b

原创 幀類型決策-slicetype_frame/slice/mb_cost()

slicetype_frame_cost /* 將幀b以slice爲單位計算其開銷,統計其總開銷 其中p0表示b的前向參考幀,p1表示b的後向參考幀 若p0 = p1 = b,則表示沒有參考幀,即I幀 若p1 = b,則表示只有前

原创 x264參數配置-tune

x264中tune等級有8個,表示應用的場景。 相比preset,tune主要調節環路濾波強度、psy強度、adaptive qp強度等畫質相關因素。 const char * const x264_tune_names[] =

原创 x264參數配置-preset

x264中preset等級有10個,表示編碼速度的快慢。 相比tune,preset主要調節lookahead長度、參考幀列表幀數量、可用宏塊劃分模式、運動搜索方法、運動搜索窗口、下采樣質量、是否使用B幀、是否自適應B幀、連續B幀

原创 Deblock::getBoundaryStrength()

該函數爲step2:計算邊界強度 /* 獲取邊界強度BS,取值[0,2] 策略: BS = 2: (優先級1)P4x4block和Q4x4block存在Intra類型 BS = 1: (優先級2)P4x4block和Q

原创 隊列流程

x264中有幾個隊列 unused queue :相當於內存池,當需要存儲幀時取一個x264_frame_t,編碼完成後釋放回去 lookahead-ifbuff queue:作爲unused queue到lookahead-n

原创 Deblock::deblockCU()

/* Deblocking filter process in CU-based (the same function as conventional's) * param Edge the direction of the e

原创 x264參數配置

x264提供了一些配置模板來適應各種編解碼場合: preset:x264參數配置-preset tune:x264參數配置-tune 默認參數配置 //幀率25fps param->i_fps_num = 2

原创 x264-碼控

x264提供三級碼控基本單位:幀級,行級,宏塊級 幀級 定位:幀類型決策之後,幀實際編碼之前 主控函數:x264_ratecontrol_start() 進行幀級qp控制 關鍵函數1:rate_estimate_qscale()