LoginSignup
1
0

More than 5 years have passed since last update.

AV1 specification を読む 2018-03-26 (7.3. Decode Frame Process)

Posted at

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 ならば、以下の手順でポストプロセスフィルタリングを実行します。

  1. 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).
  2. The CDEF process specified in section 7.14 is invoked (this process takes CurrFrame and produces CdefFrame).
  3. The upscaling process specified in section 7.15 is invoked with CdefFrame as input and the output is assigned to UpscaledCdefFrame.
  4. The upscaling process specified in section 7.15 is invoked with CurrFrame as input and the output is assigned to UpscaledCurrFrame.
  5. The loop restoration process specified in section 7.16 is invoked (this process takes UpscaledCurrFrame and UpscaledCdefFrame and produces LrFrame).
  6. The motion field motion vector storage process specified in section 7.18 is invoked.
  1. loop_filter_level[0] != 0 || loop_filter_level[1] != 0 ならば、のループフィルタ処理を(7.13節)呼びます(この処理は、CurrFrameの内容を変更します)
  2. CDEF処理(7.14節)を呼び出します(この処理では、CurrFrame から CdefFrame を生成します)
  3. CdefFrameを入力として、アップスケーリング処理(7.13節) を呼び出し、出力を UpscaledCdefFrame とします
  4. CurrFrameを入力として、アップスケーリング処理(7.13節) を呼び出し、出力を UpscaledCurrFrame とします
  5. ループ復元処理(7.14節)を呼び出します(この処理は、UpscaledCurrFrameとUpscaledCdefFrameをとり、LrFrame生成します)
  6. モーションフィールド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:

  1. The reference frame update process as specified in section 7.19 is invoked (this process saves the current frame state into the reference buffers).
  2. 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).

そして、以下の手順を適用します。

  1. 参照フレーム更新処理(7.19節)を呼び出します(この処理は、カレントフレーム状態を参照バッファに格納します)。
  2. 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ライン上下だけが読まれます。
使用しないラインをアップスケーリングしない実装でも構いません。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0