HEVCのビットストリーム構成を理解するために有用と思った情報を以下にまとめていきます。
ビットストリームの構成
1つのビットストリームは、複数のシーケンス(Coded Video Sequence: CVS)と、End of Bitstream NAL unit(EoB)から構成される。CVSは複数のGroup of Pictures(GOP)と、End of Sequence NAL unit(EoS)から構成される。GOPは、IRAP(Intra Random Access Point)Access Unit(AU)を先頭とし、後続する複数のLP(Leading Picture)AU及び、TP(Trailing Picture)AUから構成される。
IRAP AUは、ランダムアクセスポイントとなるAUである。LP AUは、直前の IRAP AU よりも表示時刻が早い AU である。LP AU は、参照ピクチャとしてIRAP AUよりも復号時刻が早いAUを参照することが可能であり、この時、デコーダがIRAP AUから復号を開始した場合に正常復号されない。他方、TP AUは表示時刻がIRAP AUよりも遅いAUである。HEVC 規格では、IRAP AUから復号を開始した場合にTP AUの正常再生を保証する。逆に言うと、TP AUの正常再生を保証しないIntra AUはIRAP AUとはならない。
AUは、複数のNetwork Abstraction Layer Unit(NALU)から構成される。AUは必ず1つ以上のSlice Segment NALUを含む必要がある。
https://www.soumu.go.jp/main_content/000230399.pdf より文章と図を引用(一部誤記と思われる文言を修正)
ランダムアクセス
HEVCビットストリームにおいて、ランダムアクセス可能な位置はイントラ符号化スライスのみから構成されるIRAP(Intra Random Access Point)ピクチャとなります。ビットストリームの先頭のピクチャは、必ずIRAPピクチャで符号化されている必要があります。
Leading Picture(LP)とTrailing Picture(TP)
- Leading Picture(LP)
-
IRAPピクチャより後でデコードするものの、表示順(POC順)で先行するピクチャ。LPには後述するRADL(Random Access Decodable Leading)とRASL(Random Access Skipped Leading)の2種類が存在する。
- Trailing Picture(TP)
-
IRAPピクチャに対し、デコード順も表示順(POC順)も後に続くピクチャ。TPはデコード順または表示順でIRAPピクチャに先行するピクチャをインター予測で参照できない。
Leading Picture(LP)の種類
- RADL(Random Access Decodable Leading)
-
IRAPピクチャよりデコード順で先のピクチャを参照しておらず、IRAPからデコードを開始した場合(ランダムアクセスした場合)にも正常にデコードが可能であることが保証されているLP。後述するIDRピクチャのLPとなる。
- RASL(Random Access Skipped Leading)
-
IRAPよりデコード順で先のピクチャを参照する(可能性がある)ため、IRAPからデコードを開始した場合(ランダムアクセスした場合)に正常にデコードが可能であることが保証されていないLP。後述するBLAピクチャまたはCRAピクチャのLPとなる。
Trailing Picture(TP)の種類
- TSA(Temporal Sublayer Access)
-
TSAピクチャ以上のTemporal IDを持つTSAピクチャよりデコード順で前のピクチャが、TSAピクチャ、もしくはTSAピクチャよりデコード順で後続かつTSAピクチャ以上のTemporal IDを持つピクチャに参照されないことが保証されているピクチャ。
デコーダがビットストリーム中のTemporal ID<=Nのサブレイヤをデコードしているときに、N+1のサブレイヤにTSAピクチャを見つけた場合、デコーダはそこから任意の時間解像度に切り替えることが可能。任意の時間解像度に切り替えても、TSAピクチャ以降にデコードされるピクチャは、TSAピクチャより前の(TSAピクチャ以上のTemporal IDを持つ)ピクチャを参照していないため破綻しない。
- STSA(Stepwise Temporal Sublayer Access)
-
STSAピクチャと同じTemporal IDを持つSTSAピクチャよりデコード順で前のピクチャが、STSAピクチャ、もしくはSTSAピクチャよりデコード順で後続かつSTSAピクチャと同じTemporal IDを持つピクチャに参照されないことのみが保証されているピクチャ。
デコーダがビットストリーム中のTemporal ID<=Nのサブレイヤをデコードしているときに、N+1のサブレイヤにSTSAピクチャを見つけた場合、デコーダはSTSAピクチャと同じTemporal ID=N+1の時間解像度に切り替えることが可能。STSAピクチャ以降にデコードされるSTSAピクチャより大きなTemporal IDを持つピクチャは、STSAピクチャより前の(STSAピクチャ以上のTemporal IDを持つ)ピクチャを参照している可能性があるため、STSAピクチャと同じTemporal IDまでしか切り替えられない。
- TRAIL
-
TSAピクチャ、STSAピクチャを含む通常のTrailing Picture
https://www.jstage.jst.go.jp/article/itej/67/7/67_549/_pdf より図を引用
IRAP Pictureの種類
- IDR(Instantaneous Decoding Refresh)
-
デコード順でIDRより後続の全てのピクチャのデコードが可能であることを保証するIRAPピクチャ。IDRより後にデコードするピクチャは、デコード順でIDRより前のピクチャを参照してはいけない(RASLを含まない)。
- CRA(Clean Random Access)
-
デコード順でCRAより後続の全てのピクチャがデコード可能であることは保証されず、表示順で後続のピクチャのみデコード可能であることを保証するIRAPピクチャ。CRAより後にデコードするLeading Picture(LP)は、デコード順でCRAより前のピクチャを参照可能。
- BLA(Broken Link Access)
-
CRAピクチャの直前でビットストリームを編集し、別のビットストリームとつなぎ合わせた場合に、CRAがBLAに書き換えられる。これにより、BLAより後にデコードするLeading Picure(LP)の参照画像が、同一ビットストリーム内に既に存在しない(エンコード時と全く異なるピクチャを参照している)可能性があることをデコーダが知ることができる。
ランダムアクセスを行い、ビットストリーム中のCRAもしくはBLAピクチャからデコードを開始した場合、RASLピクチャは正しくデコードできない可能性があるため、デコーダは当該RASLピクチャをデコードせずスキップする必要がある。
ランダムアクセスをしない場合は、CRAピクチャに対するRASLピクチャは正常にデコードされる。一方、BLAピクチャに対するRASLピクチャは、当該RASLピクチャの参照画像がビットストリーム内に既に存在しない可能性がある。よって、ランダムアクセスしない場合でも、デコーダは明示的に当該RASLピクチャをデコードせずスキップする必要がある。
https://www.jstage.jst.go.jp/article/itej/67/7/67_549/_pdf より図を引用
Sublayer Reference / Sublayer Non-reference Pictures
- Sublayer Reference Pictures
-
同じTemporal IDを持つサブレイヤ内でいずれかのピクチャから参照されるピクチャ。NAL Unit Typeの名前に「_R」が付く。
- Sublayer Non-reference Pictures
-
同じTemporal IDを持つサブレイヤ内でどのピクチャからも参照されないピクチャ。より大きなTemporal IDを持つサブレイヤのピクチャからは参照される可能性がある。最大のTemporal IDを持つサブレイヤの非参照ピクチャについては、デコードの際にどのピクチャからも参照されないため破棄することが可能。NAL Unit Typeの名前に「_N」が付く。
NAL Unit Type
NAL Unit Type(NUT)を以下の表にまとめておきます(Reserved領域を除く)。
nal_unit_type | Name of nal_unit_type | 意味 | ||
---|---|---|---|---|
Trailing Pictures | ||||
0 | TRAIL_N | TRAIL(サブレイヤ非参照) | ||
1 | TRAIL_R | TRAIL(サブレイヤ参照) | ||
2 | TSA_N | TSA(サブレイヤ非参照) | ||
3 | TSA_R | TSA(サブレイヤ参照) | ||
4 | STSA_N | STSA(サブレイヤ非参照) | ||
5 | STSA_R | STSA(サブレイヤ参照) | ||
Leading Pictures | ||||
6 | RADL_N | RADL(サブレイヤ非参照) | ||
7 | RADL_R | RADL(サブレイヤ参照) | ||
8 | RASL_N | RASL(サブレイヤ非参照) | ||
9 | RASL_R | RASL(サブレイヤ参照) | ||
IRAP Pictures | ||||
16 | BLA_W_LP | RADLとRASLが存在しうるBLA | ||
17 | BLA_W_RADL | RADLのみ存在しうるBLA | ||
18 | BLA_N_LP | LPが存在しないBLA | ||
19 | IDR_W_RADL | RADLのみ存在しうるIDR | ||
20 | IDR_N_LP | LPが存在しないIDR | ||
21 | CRA_NUT | LPが存在しうるCRA | ||
Non-VCL NAL Unit Types | ||||
32 | VPS_NUT | Video parameter set | ||
33 | SPS_NUT | Sequence parameter set | ||
34 | PPS_NUT | Picture parameter set | ||
35 | AUD_NUT | Access unit delimiter | ||
36 | EOS_NUT | End of sequence | ||
37 | EOB_NUT | End of bitstream | ||
38 | FD_NUT | Filler data | ||
39 40 | PREFIX_SEI_NUT SUFFIX_SEI_NUT | Supplemental enhancement information |