Skip to main content

Module h264_decode

Module h264_decode 

Source

Structs§

DecState 🔒
デコーダ状態。YUV 平面に加え、4x4 ブロック単位の近傍情報グリッドを持つ。
DecodedYuv
VideoDecoder
MP4/AVCC 経路用のステートフルなビデオデコーダ。参照フレームを保持して P を復号する。

Enums§

MvDir 🔒
MV 予測の方向ヒント(16x8/8x16 の特例)。

Constants§

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 🔒

Functions§

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])。描画経路用。

Type Aliases§

TokEntry 🔒