x264中重要結構體參數解釋
http://www.usr.cc/thread-51995-1-3.html
x264參數設置
http://www.usr.cc/thread-51996-1-3.html
x264中重要結構體參數解釋
typedef struct x264_param_t
{
/* CPU 標志位 */
unsigned int cpu;
int i_threads; /* 並行編碼多幀 */
int b_deterministic; /*是否允許非確定性時線程優化*/
int i_sync_lookahead; /* 線程超前緩沖 */
/* 視頻屬性 */
int i_width; /* 寬度*/
int i_height; /* 高度*/
int i_csp; /* 編碼比特流的CSP,僅支持i420,色彩空間設置 */ csp:視頻采樣格式
int i_level_idc; /* level值的設置*/
int i_frame_total; /* 編碼幀的總數, 默認 0 */
/*Vui參數集視頻可用性信息視頻標准化選項 */
struct
{
/* they will be reduced to be 0 < x <= 65535 and prime */
int i_sar_height;
int i_sar_width; /* 設置長寬比 */
int i_overscan; /* 0=undef, 1=no overscan, 2=overscan 過掃描線,默認"undef"(不設置),可選項:show(觀看)/crop(去除)*/
/*見以下的值h264附件E */
Int i_vidformat;/* 視頻格式,默認"undef",component/pal/ntsc/secam/mac/undef*/
int b_fullrange; /*Specify full range samples setting,默認"off",可選項:off/on*/
int i_colorprim; /*原始色度格式,默認"undef",可選項:undef/bt709/bt470m/bt470bg,smpte170m/smpte240m /film*/
int i_transfer; /*轉換方式,默認"undef",可選項:undef/bt709/bt470m/bt470bg/linear,log100/log316 /smpte170m/smpte240m*/
int i_colmatrix; /*色度矩陣設置,默認"undef",undef/bt709/fcc/bt470bg,smpte170m/smpte240m/GBR /YCgCo*/
int i_chroma_loc; /* both top & bottom色度樣本指定,范圍0~5,默認0 */
} vui;
int i_fps_num;
int i_fps_den;
/*這兩個參數是由fps幀率確定的,賦值的過程見下:
{ float fps;
if( sscanf( value, "%d/%d", &p->i_fps_num, &p->i_fps_den ) == 2 )
;
else if( sscanf( value, "%f", &fps ) )
{
p->i_fps_num = (int)(fps * 1000 + .5);
p->i_fps_den = 1000;
}
else
b_error = 1;
}
Value的值就是fps。*/
/*流參數 */
int i_frame_reference; /* 參考幀最大數目 */
int i_keyint_max; /* 在此間隔設置IDR關鍵幀 */
int i_keyint_min; /* 場景切換少於次值編碼位I, 而不是 IDR. */
int i_scenecut_threshold; /*如何積極地插入額外的I幀 */
int i_bframe; /*兩個相關圖像間b幀的數目 */
int i_bframe_adaptive; /*自適應B幀判定*/
int i_bframe_bias; /*控制插入B幀判定,范圍-100~+100,越高越容易插入B幀,默認0*/
int b_bframe_pyramid; /*允許部分B為參考幀 */
/*去塊濾波器需要的參數*/
int b_deblocking_filter;
int i_deblocking_filter_alphac0; /* [-6, 6] -6 light filter, 6 strong */
int i_deblocking_filter_beta; /* [-6, 6] idem */
/*熵編碼 */
int b_cabac;
int i_cabac_init_idc;
int b_interlaced; /* 隔行掃描 */
/*量化 */
int i_cqm_preset; /*自定義量化矩陣(CQM),初始化量化模式為flat*/
char *psz_cqm_file; /* JM format讀取JM格式的外部量化矩陣文件,自動忽略其他—cqm 選項*/
uint8_t cqm_4iy[16]; /* used only if i_cqm_preset == X264_CQM_CUSTOM */
uint8_t cqm_4ic[16];
uint8_t cqm_4py[16];
uint8_t cqm_4pc[16];
uint8_t cqm_8iy[64];
uint8_t cqm_8py[64];
/* 日志 */
void (*pf_log)( void *, int i_level, const char *psz, va_list );
void *p_log_private;
int i_log_level;
int b_visualize;
char *psz_dump_yuv; /* 重建幀的名字 */
/* 編碼分析參數*/
struct
{
unsigned int intra; /* 幀間分區*/
unsigned int inter; /* 幀內分區 */
int b_transform_8x8; /* 幀間分區*/
int b_weighted_bipred; /*為b幀隱式加權 */
int i_direct_mv_pred; /*時間空間隊運動預測 */
int i_chroma_qp_offset; /*色度量化步長偏移量 */
int i_me_method; /* 運動估計算法 (X264_ME_*) */
int i_me_range; /* 整像素運動估計搜索范圍 (from predicted mv) */
int i_mv_range; /* 運動矢量最大長度(in pixels). -1 = auto, based on level */
int i_mv_range_thread; /* 線程之間的最小空間. -1 = auto, based on number of threads. */
int i_subpel_refine; /* 亞像素運動估計質量 */
int b_chroma_me; /* 亞像素色度運動估計和P幀的模式選擇 */
int b_mixed_references; /*允許每個宏塊的分區在P幀有它自己的參考號*/
int i_trellis; /* Trellis量化,對每個8x8的塊尋找合適的量化值,需要CABAC,默認0 0:關閉1:只在最后編碼時使用2:一直使用*/
int b_fast_pskip; /*快速P幀跳過檢測*/
int b_dct_decimate; /* 在P-frames轉換參數域 */
int i_noise_reduction; /*自適應偽盲區 */
float f_psy_rd; /* Psy RD strength */
float f_psy_trellis; /* Psy trellis strength */
int b_psy; /* Toggle all psy optimizations */
/*,亮度量化中使用的無效區大小*/
int i_luma_deadzone[2]; /* {幀間, 幀內} */
int b_psnr; /* 計算和打印PSNR信息 */
int b_ssim; /*計算和打印SSIM信息*/
} analyse;
/* 碼率控制參數 */
struct
{
int i_rc_method; /* X264_RC_* */
int i_qp_constant; /* 0-51 */
int i_qp_min; /*允許的最小量化值 */
int i_qp_max; /*允許的最大量化值*/
int i_qp_step; /*幀間最大量化步長 */
int i_bitrate; /*設置平均碼率 */
float f_rf_constant; /* 1pass VBR, nominal QP */
float f_rate_tolerance;
int i_vbv_max_bitrate; /*平均碼率模式下,最大瞬時碼率,默認0(與-B設置相同) */
int i_vbv_buffer_size; /*碼率控制緩沖區的大小,單位kbit,默認0 */
float f_vbv_buffer_init; /* <=1: fraction of buffer_size. >1: kbit碼率控制緩沖區數據保留的最大數據量與緩沖區大小之比,范圍0~1.0,默認0.9*/
float f_ip_factor;
float f_pb_factor;
int i_aq_mode; /* psy adaptive QP. (X264_AQ_*) */
float f_aq_strength;
int b_mb_tree; /* Macroblock-tree ratecontrol. */
int i_lookahead;
/* 2pass 多次壓縮碼率控制 */
int b_stat_write; /* Enable stat writing in psz_stat_out */
char *psz_stat_out;
int b_stat_read; /* Read stat from psz_stat_in and use it */
char *psz_stat_in;
/* 2pass params (same as ffmpeg ones) */
float f_qcompress; /* 0.0 => cbr, 1.0 => constant qp */
float f_qblur; /*時間上模糊量化 */
float f_complexity_blur; /* 時間上模糊復雜性 */
x264_zone_t *zones; /* 碼率控制覆蓋 */
int i_zones; /* number of zone_t's */
char *psz_zones; /*指定區的另一種方法*/
} rc;
/* Muxing parameters */
int b_aud; /*生成訪問單元分隔符*/
int b_repeat_headers; /* 在每個關鍵幀前放置SPS/PPS*/
int i_sps_id; /* SPS 和 PPS id 號 */
/*切片(像條)參數 */
int i_slice_max_size; /* 每片字節的最大數,包括預計的NAL開銷. */
int i_slice_max_mbs; /* 每片宏塊的最大數,重寫 i_slice_count */
int i_slice_count; /* 每幀的像條數目: 設置矩形像條. */
/* Optional callback for freeing this x264_param_t when it is done being used.
* Only used when the x264_param_t sits in memory for an indefinite period of time,
* i.e. when an x264_param_t is passed to x264_t in an x264_picture_t or in zones.
* Not used when x264_encoder_reconfig is called directly. */
void (*param_free)( void* );
} x264_param_t;
X264的參數設置
由於x264本身的算法問題,該參數在1pass下很難符合設定要求,如果要嚴格控制最好使用2pass
我一般用的DVDrip參數是這樣
級別:3.1
參考幀:動畫6~8,電影3~4,越高編碼越慢,解碼占內存越多,對動畫的畫質提高很明顯
運動估算模式:slow(一般也叫umh)
運動估算半徑:16或12,越大越慢(影響很明顯),畫質提升效果不明顯
B幀:3或更高(可設到最大16,編碼器會自動選擇,對速度基本無影響),另外高級里把b_pyramid設為true。如果用 mencoder編碼就不要設太大了,有bug。
子像素優化:6或7,大了可減少文件體積,但編碼速度變慢。
其他設置用默認,另外最新版x264里加入的vaq功能對畫質有很大影響,但MediaCoder里還沒加入設置的地方,需要手工輸入參數。
BDRip一般要考慮硬件加速的問題,所以限制比較多,對於1080p:
級別 4.1
參考幀=4,B幀=0
或者
參考幀=3,B幀=3,b_pyramid=false
高了播放時無法開啟硬件加速
如果覺得編碼速度太慢,可優先減少運動估算半徑(8甚至4),然后是子像素優化(3~4)。
使用格式:x264 默認選項 -o 輸出文件 輸入文件 [長x寬]
輸入支持格式:RAW/y4m/avi/avs(編譯時可選)
輸出支持格式:264/mkv/mp4(編譯時可選)
x264的許多參數可以有-/--兩種輸入法,筆者也不知道為什么。以下等價參數用“參數1/參數2 <必需數值格式>”表示,參數尾部()內為個人推薦。
-h/--help 幫助
幀類型選項:
-I/--keyint <整數> 最大IDR幀間距,默認250
-i/--min-keyint <整數> 最小IDR幀間距,默認25
--scenecut <整數> 畫面動態變化限,當超出此值時插入I幀,默認40
-b/--bframes <整數> 在IP幀之間可插入的B幀數量最大值,范圍0~16,默認0
--no-b-adapt 關閉自適應B幀判定(-b設為1時可用,其他不推薦)
--b-bias <整數> 控制插入B幀判定,范圍-100~+100,越高越容易插入B幀,默認0
--b-pyramid 允許B幀做參考幀
--no-cabac 關閉內容自適應二進制算術編碼(CABAC,高效率的熵編碼)(會提高速度,但嚴重影響質量)
-r/--ref <整數> 最大參考幀數,范圍0~16,默認1
--nf 關閉環路濾波(一種除馬賽克算法)
-f/--filter <alpha:beta>設置環路濾波的AlphaC和Beta的參數,范圍-6-6,默認都為0
碼率控制選項:
-q/--qp <整數> 固定量化模式並設置使用的量化值,范圍0~51,0為無損壓縮,默認26
-B/--bitrate <整數> 設置平均碼率
--crf <整數> 質量模式,量化值動態可變(目前不太成熟,質量不如設置固定量化值)
--qpmin <整數> 設置最小量化值,范圍0~51,默認10
--qpmax <整數> 設置最大量化值,范圍0~51,默認51
--qpstep <整數> 設置相鄰幀之間的量化值差,范圍0~50,默認4
--ratetol <小數> 平均碼率模式下,瞬時碼率可以偏離的倍數,范圍0.1~100.0,默認1.0
--vbv-maxrate <整數> 平均碼率模式下,最大瞬時碼率,默認0(與-B設置相同)
--vbv-bufsize <整數> 碼率控制緩沖區的大小,單位kbit,默認0
--vbv-init <小數> 碼率控制緩沖區數據保留的最大數據量與緩沖區大小之比,范圍0~1.0,默認0.9
--ipratio <小數> I幀和P幀之間的量化系數,默認1.40
--pbratio <小數> P幀和B幀之間的量化系數,默認1.30
--chroma-qp-offset <整數> 色度和亮度之間的量化差,范圍-12~+12,默認0
-p/--pass <1|2|3> 多次壓縮碼率控制
1:第一次壓縮,創建統計文件
2:按建立的統計文件壓縮並輸出,不覆蓋統計文件,
3:按建立的統計文件壓縮,優化統計文件
--stats <字符串> 統計文件的名稱,默認"x264_2pass.log"
--rceq <字符串> 速率控制公式,默認"blurCplx^(1-qComp)"
--qcomp <小數> 線性量化控制,0.0為固定碼率,1.0為固定量化值,默認0.6,只用於2-pass和質量模式
--cplxblur <小數> 根據相鄰幀平滑量化值比例的最大值,范圍0~99.9,默認20.0,只用於2-pass和質量模式
--qblur <小數> 對統計文件結果平滑量化值比例的最大值,范圍0~99.9,默認0.5,只用於2-pass
--zones <z0>/<z1>/… 分段量化,格式為:<開始幀>,<結束幀>,<選項>,可選項為:q=<整數>(量化值)或b=& lt;小數>(碼率倍數)
--qpfile<字符串> 幀定義,可以在文件里定義每個幀的種類和Q值
分析選項:
-A/--analyse <字符串> 動態塊划分方法,默認"p8x8,b8x8,i8x8,i4x4"。可選項:p8x8/p4x4/b8x8/i8x8/i4x4;none /all(p4x4需要p8x8. i8x8需要--8x8dct)
--direct <字符串> 動態預測方式,默認"spatial"。可選項:none/spatial/temporal/auto
-w/--weightb 允許B幀加權預測(可以減少相鄰B幀質量低的影響)
--me <字符串> 對全像素塊動態預測搜索的方式,默認"hex",可選項:
dia:菱形搜索,半徑1 (快)
hex:正六邊形搜索,半徑2
umh:可變半徑六邊形搜索
esa:全面搜索(很慢,而且效果與umh幾乎相同)
--merange <整數> --me為umh/esa時的搜索半徑,最大64,默認16
-m/--subme <整數> 動態預測和分區方式,可選項1~7,默認5(與壓縮質量和時間關系密切,1是7速度的四倍以上)
1:用全像素塊進行動態搜索,對每個塊再用快速模式進行四分之一像素塊精確搜索
2:用半像素塊進行動態搜索,對每個塊再用快速模式進行四分之一像素塊精確搜索
3:用半像素塊進行動態搜索,對每個塊再用質量模式進行四分之一像素塊精確搜索
4:用快速模式進行四分之一像素塊精確搜索
5:用質量模式進行四分之一像素塊精確搜索
6:進行I、P幀像素塊的速率失真最優化(rdo)
7:進行I、P幀運動矢量及塊內部的速率失真最優化(質量最好)
--b-rdo B幀也進行rdo,需要--subme在6以上
--mixed-refs 可以在一幀內使用不同參考幀
--no-chroma-me 不進行色度的動態預測
--bime 可以平均B幀參考塊的運動矢量
-8/--8x8dct 可以使用8x8的離散余弦變換(DCT)
-t/--trellis <整數> Trellis量化,對每個8x8的塊尋找合適的量化值,需要CABAC,默認0
0:關閉
1:只在最后編碼時使用
2:一直使用
--no-fast-pskip 關閉快速P幀跳過檢測
--no-dct-decimate 關閉P幀聯合編碼(可以增加細節,但也會增大體積)
--nr <整數> 噪聲去除,范圍0~100000,默認0
--cqm <字符串> 設置外部量化矩陣格式,默認"flat",可選項:jvt/flat
--cqmfile <字符串> 讀取JM格式的外部量化矩陣文件,自動忽略其他--cqm*選項
--cqm4 <list> 設置4x4的量化矩陣,用逗號分開,范圍1~255的16個整數
--cqm8 <list> 設置8x8的量化矩陣,用逗號分開,范圍1~255的64個整數
--cqm4i/--cqm4p/--cqm8i/--cqm8p 設置I、P幀不同的量化矩陣
--cqm4iy/--cqm4ic/--cqm4py/--cqm4pc 設置亮度、色度不同的量化矩陣
視頻標准化選項:
這些選項與編碼無關,不過如果要用mp4之類的播放器,可以設置,風險自擔
--sar width:height 設置長寬比
--overscan <字符串> 過掃描線,默認"undef"(不設置),可選項:show(觀看)/crop(去除)
--videoformat <字符串> 視頻格式,默認"undef",可選項:component/pal/ntsc/secam/mac/undef
--fullrange <字符串> Specify full range samples setting,默認"off",可選項:off/on(我也不明白這是干什么的,請高手指點)
--colorprim <字符串> 原始色度格式,默認"undef",可選項:undef/bt709/bt470m/bt470bg,smpte170m/smpte240m/film
--transfer <字符串> 轉換方式,默認"undef",可選項:undef/bt709/bt470m/bt470bg/linear,log100/log316 /smpte170m/smpte240m
--colormatrix <字符串> 色度矩陣設置,默認"undef",undef/bt709/fcc/bt470bg,smpte170m/smpte240m/GBR/YCgCo
--chromaloc <整數> 色度樣本指定,范圍0~5,默認0
輸入、輸出選項:
--level <字符串> 設定等級(as defined by Annex A)(不明白,請高手指點)
--fps <小數|rational> 設定幀率
--seek <整數> 設定起始幀
--frames <整數> 最大編碼幀數
-o/--output 指定輸出文件
--threads <整數> 編碼線程(使用分片技術)
--thread-input 在自有線程中運行Avisynth
--no-asm 關閉全部CPU優化指令
--no-psnr 關閉PSNR計算
--quiet 安靜模式
-v/--verbose 顯示每一個幀的信息
--progress 顯示編碼進程
--visualize 顯示編碼幀信息圖,和XVID類似
--sps-id <整數> 設置SPS和PPS的ID值,默認0
--aud 使用數據定義符號
x264函數說明
函數名稱 所在位置 完成功能
void x264_frame_filter common\mc.c 幀濾波
void x264_frame_init_lowres common\mc.c 亮度1/2像素值初始化
void x264_mc_init common\mc.c 運動估計初始化
static void motion_compensation_chroma common\mc.c 色度運動估計
static uint8_t *get_ref common\mc.c 獲取參考亮度像素
static void mc_luma common\mc.c 亮度運動估計
common\mc.c
void x264_param_default common\common.c 設置缺省參數
void x264_log common\common.c 定義log級別
static void x264_log_default common\common.c 設置缺省日志參數
void x264_picture_alloc common\common.c 設置picture參數,根據輸出圖像格式分配空間
void x264_picture_clean common\common.c 釋放分配的圖像空間
int x264_nal_encode common\common.c nal單元編碼
int x264_nal_decode common\common.c nal單元解碼
void *x264_malloc common\common.c X264內部定義的內存分配
void x264_free common\common.c X264內存釋放
void *x264_realloc common\common.c X264重新分配圖像空間
void x264_reduce_fraction common\common.c 分數化簡
char *x264_slurp_file common\common.c 將文件讀入分配的緩存區
char *x264_param2string common\common.c 轉換參數為字符串,返回字符串存放的地址
void x264_cabac_context_init common\cabac.c CABAC上下文取值表初始化
void x264_cabac_decode_init common\cabac.c CABAC解碼流初始化
static inline void x264_cabac_decode_renorm common\cabac.c CABAC解碼重新標准化
int x264_cabac_decode_decision common\cabac.c
int x264_cabac_decode_bypass common\cabac.c
int x264_cabac_decode_terminal common\cabac.c
void x264_cabac_encode_init common\cabac.c
static inline void x264_cabac_putbit common\cabac.c
static inline void x264_cabac_encode_renorm common\cabac.c
void x264_cabac_encode_decision common\cabac.c
void x264_cabac_encode_bypass common\cabac.c
void x264_cabac_encode_terminal common\cabac.c
void x264_cabac_encode_flush common\cabac.c
void x264_cabac_size_decision common\cabac.c
int x264_cabac_size_decision2 common\cabac.c
int 264_cabac_size_decision_noup common\cabac.c
static inline int clip_uint8 common\dct.c clip3(x,0,255)
static void dct2x2dc common\dct.c 2*2直流系數的Hadamard變換 以4*4變換為基static void dct4x4dc common\dct.c 4*4DC系數的Hadamard變換
static void idct4x4dc common\dct.c 每行每列一維蝶形快速算法,完成d[4][4]的Hadamard反變換
static void sub4x4_dct common\dct.c 對4*4殘差進行DCT變換
static void sub8x8_dct common\dct.c 對8*8殘差進行DCT變換
static void sub16x16_dct common\dct.c 對16*16殘差進行DCT變換
static void add4x4_idct common\dct.c 殘差塊DCT反變換后,加到預測塊上,重構4*4塊
static void add8x8_idct common\dct.c 殘差塊DCT反變換后,加到預測塊上,重構8*8塊
static void add16x16_idct common\dct.c 殘差塊DCT反變換后,加到預測塊上,重構16*16塊
void x264_dct_init common\dct.c DCT運算初始化
static void quant_8x8_core common\quant.c 8*8 AC量化
static void quant_4x4_core common\quant.c 4*4 AC量化
static void quant_4x4_dc_core common\quant.c 4*4 亮度DC量化
static void quant_2x2_dc_core common\quant.c 2*2 色度DC量化
static void dequant_4x4 common\quant.c 4*4 AC反量化
static void dequant_8x8 common\quant.c 8*8 AC反量化
void x264_mb_dequant_2x2_dc common\quant.c 2*2 色度DC反量化
void x264_mb_dequant_4x4_dc common\quant.c 4*4 亮度DC反量化
void x264_quant_init common\quant.c 量化參量初始化
x264_frame_t *x264_frame_new common\frame.c 創建新幀
void x264_frame_delete common\frame.c 刪除幀,釋放空間
void x264_frame_copy_picture common\frame.c 將圖像拷貝到幀中
static void plane_expand_border common\frame.c 邊界擴展(被其他具體的擴展函數調用)
void x264_frame_expand_border common\frame.c 幀邊界擴展
void x264_frame_expand_border_filtered common\frame.c 為濾波進行的邊界擴展
void x264_frame_expand_border_lowres common\frame.c 為計算亮度半像素值進行邊界擴展
void x264_frame_expand_border_mod16 common\frame.c 幀邊界不是16整數倍時進行邊界擴展
static inline void deblock_luma_c common\frame.c bs=1~3時,修正亮度MB邊界的p0和q0值
static void deblock_v_luma_c common\frame.c 亮度分量垂直邊界去塊濾波
static void deblock_h_luma_c common\frame.c 亮度分量水平邊界去塊濾波
static inline void deblock_chroma_c common\frame.c bs=1~3時,修正色度MB邊界的p0和q0值
static void deblock_v_chroma_c common\frame.c 色度分量垂直邊界去塊濾波
static void deblock_h_chroma_c common\frame.c 色度分量水平邊界去塊濾波
static inline void deblock_luma_intra_c common\frame.c bs=4時,修正亮度MB邊界的值
static void deblock_v_luma_intra_c common\frame.c 幀內亮度分量垂直邊界去塊濾波
static void deblock_h_luma_intra_c common\frame.c 幀內亮度分量水平邊界去塊濾波
static inline void deblock_chroma_intra_c common\frame.c bs=4時,修正色度MB邊界的值
static void deblock_v_chroma_intra_c common\frame.c 幀內色度分量垂直邊界去塊濾波
static void deblock_h_chroma_intra_c common\frame.c 幀內色度分量水平邊界去塊濾波
static inline void deblock_edge common\frame.c bs值確定
void x264_frame_deblocking_filter common\frame.c 幀去塊濾波主函數
void x264_deblock_init common\frame.c 去塊濾波初始化
int x264_mb_predict_intra4x4_mode common\macroblock.c 幀內4*4塊模式預測
int x264_mb_predict_non_zero_code common\macroblock.c 非零
int x264_mb_transform_8x8_allowed common\macroblock.c 判斷當前宏塊是否允許8*8變換
void x264_mb_predict_mv common\macroblock.c 宏塊運動矢量預測
void x264_mb_predict_mv_16x16 common\macroblock.c 16*16塊MV預測
void x264_mb_predict_mv_pskip common\macroblock.c Pskip塊MV預測
static int x264_mb_predict_mv_direct16x16_temporal common\macroblock.c 直接模式16*16塊MV時間預測
static int x264_mb_predict_mv_direct16x16_spatial common\macroblock.c 直接模式16*16塊MV空間預測
int x264_mb_predict_mv_direct16x16 common\macroblock.c 直接模式16*16塊MV預測
void x264_mb_load_mv_direct8x8 common\macroblock.c 直接模式8*8塊MV加載
void x264_mb_predict_mv_ref16x16 common\macroblock.c 16*16參考塊MV預測
static inline void x264_mb_mc_0xywh common\macroblock.c 前向宏塊運動補償
static inline void x264_mb_mc_1xywh common\macroblock.c 后向宏塊運動補償
static inline void x264_mb_mc_01xywh common\macroblock.c 宏塊雙向運動補償
static void x264_mb_mc_direct8x8 common\macroblock.c 直接模式8*8塊運動補償
void x264_mb_mc_8x8 common\macroblock.c 各種類型8*8塊及其分割的運動補償
void x264_mb_mc common\macroblock.c 各種類型塊運動補償(調用以上各MC子函數)
void x264_macroblock_cache_init common\macroblock.c 初始化表征宏塊的各變量,分配內存空間
void x264_macroblock_cache_end common\macroblock.c 釋放為宏塊分配的cache空間
void x264_macroblock_slice_init common\macroblock.c 初始MB與slice映射關系
void x264_macroblock_cache_load common\macroblock.c 宏塊cache加載,所有宏塊表征變量賦值
void x264_macroblock_cache_save common\macroblock.c 保存cache中的變量值
void x264_macroblock_bipred_init common\macroblock.c 宏塊雙向預測初始化
int64_t x264_pixel_ssd_wxh common\pixel.c 計算像素差值平方和
static inline void pixel_sub_wxh common\pixel.c 計算像素差
static int pixel_satd_wxh common\pixel.c 計算4*4hardmard變換后的絕對誤差和
static inline int pixel_sa8d_wxh common\pixel.c 計算8*8hardmard變換后的絕對誤差和
static void predict_16x16_dc common\predict.c 上和左鄰塊可用時,幀內16*16亮度塊DC模式預測
static void predict_16x16_dc_left common\predict.c 左邊鄰塊可用時,幀內16*16亮度塊DC模式預測
static void predict_16x16_dc_top common\predict.c 上邊鄰塊可用時,幀內16*16亮度塊DC模式預測
static void predict_16x16_dc_128 common\predict.c 鄰塊均不可用時,幀內16*16亮度塊預測DC模式,預測值為128
static void predict_16x16_h common\predict.c 幀內16*16亮度塊水平預測
static void predict_16x16_v common\predict.c 幀內16*16亮度塊垂直預測
static void predict_16x16_p common\predict.c 幀內16*16亮度塊平面預測
static void predict_8x8c_dc_128 common\predict.c
static void predict_8x8c_dc_left common\predict.c
static void predict_8x8c_dc_top common\predict.c
static void predict_8x8c_dc common\predict.c
static void predict_8x8c_h common\predict.c
static void predict_8x8c_v common\predict.c
static void predict_8x8c_p common\predict.c
static void predict_4x4c_dc_128 common\predict.c
static void predict_4x4c_dc_left common\predict.c
static void predict_4x4c_dc_top common\predict.c
static void predict_4x4c_dc common\predict.c
static void predict_4x4c_h common\predict.c
static void predict_4x4c_v common\predict.c
static void predict_4x4c_p common\predict.c
static void predict_4x4_ddl common\predict.c 模式3 左下對角預測
static void predict_4x4_ddr common\predict.c 模式4 右下對角預測
static void predict_4x4_vr common\predict.c 模式5 垂直左下角
static void predict_4x4_hd common\predict.c 模式6 水平斜下角
static void predict_4x4_vl common\predict.c 模式7 垂直左下角
static void predict_4x4_hu common\predict.c 模式8 水平斜上角
static void predict_8x8c_dc_128 common\predict.c
static void predict_8x8c_dc_left common\predict.c
static void predict_8x8c_dc_top common\predict.c
static void predict_8x8c_dc common\predict.c
static void predict_8x8c_h common\predict.c
static void predict_8x8c_v common\predict.c
static void predict_8x8c_p common\predict.c
static void predict_8x8_ddl common\predict.c
static void predict_8x8_ddr common\predict.c
static void predict_8x8_vr common\predict.c
static void predict_8x8_hd common\predict.c
static void predict_8x8_vl common\predict.c
static void predict_8x8_hu common\predict.c
void x264_predict_16x16_init common\predict.c 幀內16*16亮度塊預測模式初始化
void x264_predict_8x8c_init( int cpu, x264_predict8x8_t pf[7] ) common\predict.c 幀內8*8亮度塊預測模式初始化(7種模式)
void x264_predict_8x8c_init( int cpu, x264_predict8x8_t pf[12] ) common\predict.c 幀內8*8亮度塊預測模式初始化(12種模式)
void x264_predict_4x4_init common\predict.c 幀內4*4亮度塊預測模式初始化
void x264_cqm_init common\set.c 量化矩陣初始化
int x264_cqm_parse_jmlist common\set.c 分析量化矩陣列表的正確性
int x264_cqm_parse_file common\set.c 分析量化矩陣文件的正確性
static inline void x264_cabac_encode_ue_bypass encoder\cabac.c 無符號指標GOLOMB編碼
static inline void x264_cabac_mb_type_intra encoder\cabac.c 宏塊幀內類型cabac編碼
static void x264_cabac_mb_type encoder\cabac.c 宏塊類型cabac編碼
static void x264_cabac_mb_intra4x4_pred_mode encoder\cabac.c 4*4幀內亮度塊預測模式cabac編碼
static void x264_cabac_mb_intra_chroma_pred_mode encoder\cabac.c 幀內色度塊預測模式cabac編碼
static void x264_cabac_mb_cbp_luman coder\cabac.c 宏塊亮度cbp值cabac編碼
static void x264_cabac_mb_cbp_chroma encoder\cabac.c 宏塊色度cbp值cabac編碼
static void x264_cabac_mb_qp_delta encoder\cabac.c 宏塊增量量化參數cabac編碼
void x264_cabac_mb_skip encoder\cabac.c 可跳過宏塊cabac編碼
static inline void x264_cabac_mb_sub_p_partition encoder\cabac.c 8*8子宏塊分割cabac編碼
static inline void x264_cabac_mb_sub_b_partition encoder\cabac.c B幀8*8子宏塊各種分割cabac編碼
static inline void x264_cabac_mb_transform_size encoder\cabac.c 宏塊變換塊尺寸cabac編碼
static inline void x264_cabac_mb_ref encoder\cabac.c 參考宏塊cabac編碼
static inline void x264_cabac_mb_mvd_cpn encoder\cabac.c 宏塊的mvd進行cabac編碼
static inline void x264_cabac_mb_mvd encoder\cabac.c 計算並保存宏塊mvd,調用上個函數對mvd進行cabac編碼
static inline void x264_cabac_mb8x8_mvd encoder\cabac.c 8*8宏塊mvd的cabac編碼
static int x264_cabac_mb_cbf_ctxidxinc encoder\cabac.c 返回宏塊左邊和上邊塊非0像素的個數
static void block_residual_write_cabac encoder\cabac.c 殘差塊cabac編碼
void x264_macroblock_write_cabac encoder\cabac.c 宏塊cabac編碼主函數(調用以上各子函數)
定義RD時使用 encoder\cabac.c
void x264_partition_size_cabac encoder\cabac.c 宏塊分割cabac編碼主函數
static void x264_partition_i8x8_size_cabac encoder\cabac.c
static void x264_partition_i4x4_size_cabac encoder\cabac.c
static void block_residual_write_cavlc encoder\cavlc.c 殘差塊cavlc編碼
static void cavlc_qp_delta encoder\cavlc.c 量化參數增量cavlc編碼
static void cavlc_mb_mvd encoder\cavlc.c 運動矢量差值cavlc編碼
static void cavlc_mb8x8_mvd encoder\cavlc.c 8*8子宏塊運動矢量差值cavlc編碼
static inline void x264_macroblock_luma_write_cavlc encoder\cavlc.c 亮度宏塊cavlc編碼
void x264_macroblock_write_cavlc encoder\cavlc.c 宏塊cavlc編碼主函數
#ifdef RDO_SKIP_BS時使用下列 encoder\cavlc.c
int x264_partition_size_cavlc enc oder\cavlc.c
static int cavlc_intra4x4_pred_size encoder\cavlc.c
static int x264_partition_i8x8_size_cavlc encoder\cavlc.c
static int x264_partition_i4x4_size_cavlc encoder\cavlc.c
static double pop encoder\eval.c 出棧
static void push encoder\eval.c 入棧
static int strmatch encoder\eval.c 串匹配
static void evalPrimary encoder\eval.c 一些常用計算
static void evalPow encoder\eval.c 運算式分析或計算
static void evalFactor encoder\eval.c 求冪運算
static void evalTerm encoder\eval.c
static void evalExpression encoder\eval.c
double x264_eval encoder\eval.c 輸入運算變量和運算符,功能調用運算表達式分析函數
void x264_me_search_ref encoder\me.c 運動估計搜索
void x264_me_refine_qpel 亞像素運動估計
static void refine_subpel 亞像素運動估計搜索
int x264_me_refine_bidir 雙向運動估計
void x264_me_refine_qpel_rd 有率失真的亞像素運動估計
------------------------------------------------------------------------------
http://alphamailpost.blog.163.com/blog/static/2011180812012726103130388/