Skip to main contentModule h264_decode
Source - DecState 🔒
- デコーダ状態。YUV 平面に加え、4x4 ブロック単位の近傍情報グリッドを持つ。
- DecodedYuv
- VideoDecoder
- MP4/AVCC 経路用のステートフルなビデオデコーダ。参照フレームを保持して P を復号する。
- MvDir 🔒
- MV 予測の方向ヒント(16x8/8x16 の特例)。
- ALPHA_TABLE 🔒
- BETA_TABLE 🔒
- CBP_INTER_MAP 🔒
- CBP_INTRA_MAP 🔒
- COEFF_TOKEN_0 🔒
- COEFF_TOKEN_2 🔒
- COEFF_TOKEN_4 🔒
- COEFF_TOKEN_CHROMA_DC 🔒
- LUMA_4X4_BLOCK_XY 🔒
- RUN_BEFORE 🔒
- TC0_TABLE 🔒
- TOTAL_ZEROS_16 🔒
- TOTAL_ZEROS_CHROMA 🔒
- ZIGZAG_4X4 🔒
- add_inter_chroma_residual 🔒
- インター MB のクロマ残差を MC 予測へ加算(DC 2x2 Hadamard + AC)。
- add_inter_luma_residual 🔒
- インター MB の輝度残差を MC 予測へ加算(4x4 ブロックごと)。
- boundary_strength 🔒
- フレーム全体にデブロッキングを適用(I スライス: MB 境界 bS=4、内部 bS=3)。
2 つの 4x4 ブロック間の境界強度(8.7.2.1)。I/P 両対応。
p_li/q_li: 輝度 4x4 ブロックの線形 index。is_mb_edge: MB 境界エッジか。
- check_token_complete 🔒
- coeff_token テーブルに有効な (tc, t1) 組が漏れなく 1 回ずつあるか検査。
max_tc までの全組(tc=0:(0,0)、tc>=1: t1=0..min(tc,3))を期待。
- chroma_nc 🔒
- クロマ 4x4 ブロックの nC(クロマプレーン内の左/上 nnz から)。
- chroma_qp 🔒
- 輝度 QP -> クロマ QP(Table 8-15、qPi>=30 の写像)。
- clip1 🔒
- combine_nc 🔒
- 近傍 2 ブロックの nnz から nC を求める(-1 は不可用)。
- deblock_chroma_edge 🔒
- クロマ 1 エッジ(4:2:0、p0/q0 のみ修正)。
- deblock_frame 🔒
- deblock_luma_edge 🔒
- 輝度 1 エッジ(長さ len)をフィルタ。vert: 垂直エッジ。(ex,ey)=q 側左上(フレーム座標)。
- deblock_thresh 🔒
- indexA/indexB から (alpha, beta, tc0) を引く。
- decode_chroma 🔒
- クロマ復号(4:2:0)。予測 + 残差(DC: 2x2 Hadamard、AC: cbp_chroma==2 のとき)。
- decode_mb 🔒
- decode_mb_i4x4 🔒
- decode_mb_i16x16 🔒
- decode_mb_ipcm 🔒
- I_PCM マクロブロック: 生の画素値をそのまま格納(予測・変換なし)。
- decode_mb_p 🔒
- インター: mb_type 0=16x16, 1=16x8, 2=8x16, 3/4=P_8x8。
- decode_p8x8 🔒
- P スライスの符号化 MB。intra MB(mb_type>=5)は intra デコーダへ委譲。
P_8x8 / P_8x8ref0: 4 つの 8x8 サブ MB、各 sub_mb_type でさらに分割。
- decode_pskip 🔒
- P_Skip マクロブロックのデコード。
- decode_slice
- 単一スライス(I または P、IDR/非IDR、4:2:0、CAVLC)をデコードして YUV 平面を返す。
reference は P スライスの動き補償に使う直前のフレーム。
- golden_test
- 起動時に呼ぶゴールデン検証。結果をログ出力する。
- iclip 🔒
- interp_chroma_sample 🔒
- クロマのサブ画素補間(8.4.2.2.2、双線形 1/8 画素)。
- interp_luma_core 🔒
- 6タップ補間のコア(8.4.2.2.1)。get(dx,dy) でサンプル取得(クランプ有無は呼び出し側)。
- interp_luma_sample 🔒
- 端のクランプ付きで 1 サンプル補間(フレーム境界をまたぐパーティション用)。
- inverse_hadamard_2x2 🔒
- 2x2 クロマ DC の逆 Hadamard 変換(raster 2x2、c[0..3])。
- inverse_hadamard_4x4 🔒
- I_16x16 輝度 DC の 4x4 逆 Hadamard 変換(in-place、raster)。丸め無し。
- is_prefix_free 🔒
- (len, code) 群が prefix-free か検査。衝突する組を見つけたら false。
- mc_part 🔒
- パーティションの MC(輝度 + クロマ)。
- mc_part_chroma 🔒
- クロマパーティション(輝度 pw×ph @ (px,py) に対応)の動き補償(サブ画素 1/8)。
- mc_part_luma 🔒
- 輝度パーティション pw×ph @ (px,py) の動き補償(サブ画素対応)。
- median3 🔒
- mv_predict 🔒
- パーティションの MV 予測(8.4.1.3、単一参照 refIdx=0、方向ヒント対応)。
- mv_predict_16x16 🔒
- 16x16 パーティションの明示的 MV 予測(8.4.1.3、単一参照 refIdx=0 前提)。
重要: 「利用可能(デコード済み・画面内)」と「一致(インターで refIdx=0)」を区別する。
C(右上)の D 代用は C が 利用不可 のときのみ(イントラで利用可能なら代用しない)。
- part_neighbors 🔒
- パーティション (px,py,pw) の近傍 A/B/C を返す: ((一致,mv) x3)。
一致 = インターで refIdx=0。C は利用不可なら D(左上)で代用。
- predict_pskip_mv 🔒
- P_Skip の動きベクトル導出(8.4.1.1)。
- read_coeff_token 🔒
- coeff_token を読み (total_coeff, trailing_ones) を返す。table は上記のいずれか。
- read_coeff_token_nc 🔒
- coeff_token を nC に応じて復号。nC>=8 は 6bit FLC、nC==-1 はクロマ DC 表。
- read_run_before 🔒
- read_total_zeros 🔒
- reconstruct_luma_4x4 🔒
- 輝度 4x4 ブロックの再構成(予測 + 残差)を行い、グリッドを更新する。
- residual_block_cavlc 🔒
- CAVLC で 1 残差ブロックを復号。スキャン順の係数配列と total_coeff を返す。
n_c: 近傍係数数(-1=chroma DC, >=8=FLC)。tz_tables: total_zeros VLC 群。
- run_golden 🔒
- ゴールデン素材 1 本をデコードし、Y 面の一致画素数を返す。
- run_golden_debug 🔒
- 不一致を 16x16 MB 単位で集計してデバッグ出力(複数フレーム対応、最後のフレームを比較)。
- scale_chroma_dc 🔒
- クロマ DC のスケーリング(8.5.11.1): dcC = ((f * LevelScale(qPc%6,0,0)) << (qPc/6)) >> 5。
- scale_luma_dc 🔒
- I_16x16 輝度 DC のスケーリング(8.5.10)。
- set_mb_inter_grids 🔒
- インター MB(P_Skip 含む)の近傍グリッドを更新。
- store_part_mv 🔒
- パーティションの MV をグリッドへ格納(後続パーティション/MB の予測用)。
- tables_selftest
- 全 CAVLC VLC テーブルの prefix-free 性 + coeff_token の完全性を検査。
- yuv_to_rgb
- YUV420 → RGB24(BT.601、各画素 [R,G,B])。描画経路用。
- TokEntry 🔒