#AV1 specification 日本語訳 (2018-03-26)
この節では、1フレームのデコード処理がなされます。
ここで言う「フレームのデコード」とは、ブロック単位のデコードが済んでいる状態で、1フレームを完成させる処理のことです。
(すでに完成済みのフレームを、再度表示する場合にも呼び出されます)
ブロック単位でのデコードとは、予測処理(インター・イントラ)と、変換係数の逆量子化・逆変換による残差の計算、そして、予測値+残差=再構成ブロック までの処理です。
フレームのデコードでは、フィルタ処理の呼び出し方法、デコード画像の格納方法、出力方法について述べられています。
7.3. Decode Frame Process
This process is triggered by a call to decode_frame from within the syntax tables.
この処理は、シンタックステーブル内の decode_frame() の呼び出しで実行します。
If show_existing_frame is equal to 0, the process first performs any post processing filtering by the following ordered steps:
show_existing_frame==0 ならば、以下の手順でポストプロセスフィルタリングを実行します。
- If loop_filter_level[ 0 ] is not equal to 0 or loop_filter_level[ 1 ] is not equal to 0, the loop filter process specified in section 7.13 is invoked (this process modifies the contents of CurrFrame).
- The CDEF process specified in section 7.14 is invoked (this process takes CurrFrame and produces CdefFrame).
- The upscaling process specified in section 7.15 is invoked with CdefFrame as input and the output is assigned to UpscaledCdefFrame.
- The upscaling process specified in section 7.15 is invoked with CurrFrame as input and the output is assigned to UpscaledCurrFrame.
- The loop restoration process specified in section 7.16 is invoked (this process takes UpscaledCurrFrame and UpscaledCdefFrame and produces LrFrame).
- The motion field motion vector storage process specified in section 7.18 is invoked.
- loop_filter_level[0] != 0 || loop_filter_level[1] != 0 ならば、のループフィルタ処理を(7.13節)呼びます(この処理は、CurrFrameの内容を変更します)
- CDEF処理(7.14節)を呼び出します(この処理では、CurrFrame から CdefFrame を生成します)
- CdefFrameを入力として、アップスケーリング処理(7.13節) を呼び出し、出力を UpscaledCdefFrame とします
- CurrFrameを入力として、アップスケーリング処理(7.13節) を呼び出し、出力を UpscaledCurrFrame とします
- ループ復元処理(7.14節)を呼び出します(この処理は、UpscaledCurrFrameとUpscaledCdefFrameをとり、LrFrame生成します)
- モーションフィールドMV格納処理 (7.18節) を呼び出します
Otherwise (show_existing_frame is equal to 1), if frame_type is equal to KEY_FRAME, the reference frame loading process as specified in section 7.20 is invoked (this process loads frame state from the reference buffers into the current frame state variables).
そうではなく(show_existing_frame==1ならば)、frame_type==KEY_FRAMEならば、参照フレームロード処理(7.20節)を呼び出します(この処理は、参照バッファからフレーム状態を読み出し、カレントフレーム状態変数に格納します)。
The following ordered steps now apply:
- The reference frame update process as specified in section 7.19 is invoked (this process saves the current frame state into the reference buffers).
- If show_frame is equal to 1 or show_existing_frame is equal to 1, the output process as specified in section 7.17 is invoked (this will output the current frame or a saved frame).
そして、以下の手順を適用します。
- 参照フレーム更新処理(7.19節)を呼び出します(この処理は、カレントフレーム状態を参照バッファに格納します)。
- show_frame==1 || show_existing_frame==1 ならば、出力処理(7.17節)を呼び出します(これは、カレントフレームあるいは格納されたフレームを出力します)。
Note:
lthough it is specified that all samples in CurrFrame are upscaled, at most 2 lines above and below each stripe (defined by StripeStartY and StripeEndY) will end up being read. Implementations may wish to avoid upscaling the unused lines.
注意:
CurrFrame内の全ての画素がアップスケールされると規定されていますが、(StripeStartY, StripeEndYで定義される)各ストライプの高々2ライン上下だけが読まれます。
使用しないラインをアップスケーリングしない実装でも構いません。