AV1 specification 日本語訳
具体的な用途は謎ですが。
Annex B: スーパーフレーム
B.1 概要
AV1では、複数の符号化フレームを1つのチャンクにまとめる「スーパーフレーム」をサポートしています。
このスーパーフレームのインデックスは、チャンクの34bytesまでに格納されます。
中に含まれるフレームは、このスーパーフレームインデックスを解釈することで特定できます。
スーパーフレームのシンタックスはを B.2 節で示し、 シンタックス要素の意味を B.3 節で説明します。
スーパーフレームのパース方法を B.4 節で説明します。
B.2 スーパーフレームシンタックス
superframe(sz)
{
for (i=0; i<NumFrames; i++)
{
frame(frame_sizes[i])
}
superframe_index(sz)
}
B.2.1 スーパーフレームインデックス
superframe_index(sz)
{
frameSizeSum = 0
superframe_header()
for (i=0; i<NumFrames-1; i++)
{
frame_sizes[i] f(SzBytes)
framesSizeSum += frame_size[i]
}
frame_size[i] = sz - SzIndex - frameSizeSum
superframe_header()
}
B.2.2 スーパーフレームヘッダ
superframe_header()
{
superframe_marker f(3)
bytes_per_framesize_minus_1 f(2)
frames_in_superframe_minus_1 f(3)
}
B.3 スーパーフレームセマンティクス
sz
スーパーフレームのバイト数を指定します。
外部から与えられます。
frame_sizes[i]
このスーパーフレーム内のフレーム番号 i(0開始)のフレームのバイト数を指定します。
superframe_marker
0b110 の固定ビット列で、スーパーフレームがそんざいするかどうかを検出するためにあります。
bytes_per_framesize_minus_1
フレームサイズを符号化するために必要なバイト数を指定します。
SzBytes = bytes_per_framesize_minus_1 + 1
frames_in_superframe_minus_1
このスーパーフレーム内のフレーム数を指定します。
NumFrames = frames_in_superframe_minus_1 + 1
注意:
スーパーフレームにはNumFrame==1で1フレームだけが含まれてもかまいません。
B.4 スーパーフレームパーシング
スーパーフレームの使用は選択可能で、1つのチャンクには1つのフレームあるいはスーパーフレームが含まれます。
デコーダは、スーパーフレームの存在意を以下のように検出します。
- チャンクの最終バイトをパース氏、superframe_marker==0b110 であることをチェックします。
- superframe_indexの合計サイズ SzIndex = 2 + (NumFrames-1)*SzBytes
- superframe_indexの最初のバイトが、最後のバイトと一致することをチェックします。
1,3 の両方のチェックが成功したら、そのチャンクにはスーパーフレームが含まれると判断され、スーパーフレーム内の各フレームが順番にデコード処理に渡されます。
そうではなければ、そのチャンクにはスーパーフレームが含まれず、チャンク全体をデコード処理に渡します。
注意:
符号化フレームの最終バイトには superframe_marker が含まれてはいけないという規定があるために、この処理はうまく動きます