AV1 specification を読む 2018-04-17 (7.10.2.5. Setup Shear Process)


AV1 specification 日本語訳 (2018-04-17)

Setup Shear Process では、与えられたワープパラメータから、アフィン変換行列の alpha, beta, gamma, delta を計算します。
この演算には整数除算が含まれます。
整数除算は 7.10.2.6. Resolve Divisor Process で定義されるように、乗算とシフト演算で実装します。

ワープパラメータは自動計算される場合もあるため、うまく変換できない場合があるので、warpValid=0 になることもあります。


7.10.2.5. Setup Shear Process

The input for this process is an array warpParams representing an affine transformation.

この処理の入力は配列 warpParams で、アフィン変換を表現します。

The outputs from this process are the variable warpValid and variables alpha, beta, gamma, delta representing two shearing operations that combine to make the full affine transformation.

この処理の出力は、warpValidと、完全なアフィン変換を生成するために結合された、2つの剪断操作を表現する偏す alpha, beta, gamma, delta です。

The variable alpha0 is set equal to Clip3( -32768, 32767, warpParams[ 2 ] - (1 << WARPEDMODEL_PREC_BITS) ).
The variable beta0 is set equal to Clip3( -32768, 32767, warpParams[ 3 ] ).

alpha0 = Clip3( -32768, 32767, warpParams[ 2 ] - (1 << WARPEDMODEL_PREC_BITS) )
beta0 = Clip3( -32768, 32767, warpParams[ 3 ] )

The resolve divisor process specified in section 7.10.2.6 is invoked with warpParams[ 2 ] as input, and the outputs assigned to divShift and divFactor.

7.10.2.6節で規定される除算解決処理を warpParams[2] を入力として呼び出し、出力を divShift, divFactor に割り当てます。

The variable v is set equal to ( warpParams[ 4 ] << WARPEDMODEL_PREC_BITS ).
The variable gamma0 is set equal to Clip3( -32768, 32767, Round2Signed( v * divFactor, divShift ) ).
The variable w is set equal to ( warpParams[ 3 ] * warpParams[ 4 ] ).
The variable delta0 is set equal to Clip3( -32768, 32767, warpParams[ 5 ] - Round2Signed( w * divFactor, divShift ) - (1 << WARPEDMODEL_PREC_BITS) ).

v = ( warpParams[ 4 ] << WARPEDMODEL_PREC_BITS )
gamma0 = Clip3( -32768, 32767, Round2Signed( v * divFactor, divShift ) )
w = ( warpParams[ 3 ] * warpParams[ 4 ] )
delta0 = Clip3( -32768, 32767, warpParams[ 5 ] - Round2Signed( w * divFactor, divShift ) - (1 << WARPEDMODEL_PREC_BITS) )

The output warpValid is set as follows:

  • If 4 * Abs( alpha0 ) + 7 * Abs( beta0 ) is greater than or equal to (1 << WARPEDMODEL_PREC_BITS), warpValid is set equal to 0.
  • If 4 * Abs( gamma0 ) + 4 * Abs( delta0 ) is greater than or equal to (1 << WARPEDMODEL_PREC_BITS), warpValid is set equal to 0.
  • Otherwise, warpValid is set equal to 1.

出力の warpValid を以下のように設定します。

  • 4 * Abs( alpha0 ) + 7 * Abs( beta0 ) >= (1 << WARPEDMODEL_PREC_BITS) ならば、warpValid = 0
  • 4 * Abs( gamma0 ) + 4 * Abs( delta0 ) >= (1 << WARPEDMODEL_PREC_BITS) ならば、warpValid = 0
  • そうでなければ、warpValid = 1

The remaining output variables are set as follows:

残りの出力変数を以下のように設定します。

alpha = Round2Signed( alpha0, WARP_PARAM_REDUCE_BITS ) << WARP_PARAM_REDUCE_BITS
beta = Round2Signed( beta0, WARP_PARAM_REDUCE_BITS ) << WARP_PARAM_REDUCE_BITS
gamma = Round2Signed( gamma0, WARP_PARAM_REDUCE_BITS ) << WARP_PARAM_REDUCE_BITS
delta = Round2Signed( delta0, WARP_PARAM_REDUCE_BITS ) << WARP_PARAM_REDUCE_BITS