次の方法で共有


マクロブロック制御コマンド構造の最初の部分

汎用マクロブロック 制御コマンド構造の最初の 4 つのメンバーは、常に同じです。 次の表では、この構造体の最初の部分のメンバーについて説明します。

メンバー 説明

wMBaddress

現在処理中のマクロ ブロックのマクロ ブロック アドレスを指定します。

wMBtype

処理するマクロブロックの種類を指定します。 このメンバーには、マクロ ブロックの値と送信される残差データの種類を予測するためにモーション補正が使用されるかどうかを示すフラグが含まれています。

dwMB_SNL

2 つのフィールドMBskipsFollowing (上位 8 ビット) と MBdataLocation (下位 24 ビット) が含まれます。

MBskipsFollowing は、現在のマクロ ブロックの後に生成されるスキップされたマクロ ブロックの数を指定します。

MBdataLocation は、IDCT 残差ブロック データ バッファーへのインデックスであり、現在のマクロ ブロックのブロックの残差データの場所を示します。

wPatternCode

マクロ ブロック内のブロックごとに残差データが送信されるかどうかを示します。

wMBaddress

構造体メンバー wMBaddress は、ラスター スキャン順序で現在のマクロ ブロックのマクロ ブロック アドレスを指定します。 次の表に、マクロ ブロック アドレスの例を示します。

マクロブロック 番地

左上

0

右上

wPicWidthInMBminus1

左下

wPicHeightInMBminus1 x (wPicWidthInMBminus1+1)

右下

(wPicHeightInMBminus1+1) x (wPicWidthInMBminus1+1) - 1

wPicWidthInMBminus1wPicHeightInMBminus1 アドレスは、DXVA_PictureParameters 構造体のメンバーです。

wMBtype

wMBtype 構造体メンバーは、処理するマクロ ブロックの種類を指定します。 このメンバーには、マクロブロックとモーション ベクトルの処理方法を定義する一連のビットが含まれています。 bPic4MVallowedbPicScanMethodbPicBackwardPredictionbPicStructurebPicScanFixedアドレスは、DXVA_PictureParameters 構造体のメンバーです。 bConfigHostInverseScan アドレスは、DXVA_ConfigPictureDecode 構造体のメンバーです。

Bits 説明

15 から 12

MvertFieldSel_3 (ビット 15、最上位) から MvertFieldSel_0 (ビット 12) まで

次の表に示すように、マクロ ブロック コントロール コマンドで後で送信される、対応するモーション ベクトルの垂直フィールド選択を指定します。 フレーム 画像構造を持つフレーム ベースのモーション (H.261 や H.263 など) の場合、これらのビットは、すべて 0 である必要があります。 MvertFieldSel_0、MvertFieldSel_1、MvertFieldSel_2、および MvertFieldSel_3 のビットは、MPEG-2 のセクション 6.3.17.2 のmotion_vertical_field_select[r][s] ビットに対応します。

11

予約済みビット。 ゼロを指定してください。

10

HostResidDiff

空間ドメイン残差復号化ブロックを送信するか、または現在のマクロブロックのオフホスト IDCT に対して変換係数を送信するかを指定します。 bConfigResidDiffHost が 0 の場合は 0 にする必要があります。 bConfigResidDiffAccelerator が 0 の場合は 1 にする必要があります。

9 と 8

MotionType

ピクチャー内のモーションタイプを指定します。 たとえば、(H.261 のように) フレーム画像構造を持つフレーム ベースのモーションの場合、ビット 9 は 1、ビット 8 は 0 である必要があります。

これらのビットの使用は、MPEG-2 ビットストリームに存在する場合の MPEG-2 ビデオ標準のセクション 6.3.17.1 および表 6-17 および表 6-18 の frame_motion_type ビットまたは field_motion_type ビットの使用に直接対応します。 これらのビットの使用方法については、次の表でさらに説明します。

7 と 6

MBscanMethod

マクロブロック スキャン方法を指定します。 bPicScanMethod が 1 の場合、これは bPicScanFixed と等しい必要があります。 HostResidDiff が 1 の場合、この変数は意味を持たないため、これらのビットを 0 に設定する必要があります。

bConfigHostInverseScan が 0 の場合、MBscanMethod は次のいずれかの値である必要があります。

  • ビット 6 が 0 で、ビット 7 がジグザグ スキャンの場合は 0 です (MPEG-2 図 7-2)

  • ビット 6 は 1 で、ビット 7 は代替垂直スキャンではゼロです (MPEG-2 図 7-3)

  • ビット 6 は 0 で、ビット 7 は代替水平スキャン用に 1 です (H.263 図 I.2 パート a)

bConfigHostInverseScan が 1 の場合、MBscanMethod は次の値と等しい必要があります。

  • ビット 6 は 1 で、ビット 7 は絶対係数アドレスを持つ任意のスキャン用に 1 です。

5

FieldResidual

残差ブロックが MPEG-2 で指定されているフィールド IDCT 構造体を使用するかどうかを示します。

bPicStructure が 1 または 2 の場合、このフラグは 1 である必要があります。 MPEG-2 構文の frame_pred_frame_DCT フラグが 1 の場合、MPEG-2 で使用する場合、このフラグは 0 にする必要があります。 このフラグは、マクロ ブロックに dct_type が存在する場合、MPEG-2 構文の dct_type 要素と同じである必要があります。

4

H261LoopFilter

H.261 ループ フィルター (H.261 のセクション 3.2.3) が現在のマクロ ブロック予測に対してアクティブかどうかを指定します。 H.261 ループ フィルターは、分離可能な 1/4、1/2、1/4 フィルターで、H.261 マクロ ブロックの 6 つのブロックすべてに水平方向と垂直方向の両方に適用されます。ただし、タップの 1 つがブロックの外側に落ちるようなブロックの端を除きます。 このような場合、フィルターは係数 0、1、0 に変更されます。 完全な算術精度は、2 次元フィルター プロセスの出力で 8 ビット整数に丸めて保持されます (半整数以上の値が切り上げられます)。

3

Motion4MV

前方モーションでは、H.263 Annexes F および J で使用されているように、マクロ ブロック内の 4 つの輝度ブロックごとに個別のモーション ベクトルが使用されることを示します。 bPic4MVallowed が 0 の場合、または bPic4MVallowed が 0 の場合、Motion4MV は 0 である必要があります。

2

MotionBackward

この変数は、MPEG-2 の対応する macroblock_motion_backward パラメーターに指定されているとおりに使用されます。 DXVA_PictureParameters 構造体の bPicBackwardPrediction メンバーが 0 の場合、MotionBackward は 0 である必要があります。

1

MotionForward

この変数は、MPEG-2 内の対応する macroblock_motion_forward パラメーターに指定されているとおりに使用されます。 このビットの使用方法については、次の表のテキストで詳しく説明します。

0

IntraMacroblock

マクロ ブロックが intra としてコード化され、現在のマクロ ブロックにモーション ベクトルが使用されていないことを示します。

この変数は、MPEG-2 の macroblock_intra 変数に対応します。 このビットの使用方法については、次の表のテキストで詳しく説明します。

マクロブロックが予測的にコード化されると、モーション ベクトル値が関連付けられます。 値は、マクロブロックがフィールドコード化された画像と、フレームコード化された画像のどちらに使用されるかに基づいて生成されます。 すべての実装で、使用されているすべてのマクロ ブロックの種類を適切に考慮することが重要です (特に、フィールド構造の画像やデュアルプライム モーションの場合)。

このセクションの次の 2 つの表は、フレームコード化された画像とフィールドコーディングされた画像に対する IntraMacroblockMotionForwardMotionBackwardMotionTypeMvertFieldSelMVector の有効な組み合わせを示しています。 MVector には、モーション ベクトルの水平コンポーネントと垂直コンポーネントが含まれています。 再メイン変数とフラグは、モーション ベクトル操作を指定します。 これは、処理されるマクロブロックの種類と、マクロブロックがフレームコード化された画像またはフィールドコード化された画像に使用されているかどうかに応じて決定されます。

(このセクションの) 次の表に示す値は、次の条件で発生します。

  • H261LoopFilterMotion4MV、および bPicOBMC は 0 です。

  • bPicStructure が 2 (下のフィールド) でない限り、PicCurrentField フラグは 0 です。 この場合、PicCurrentField は 1 です。

MVector は、DXVA_MBctrl_P_HostResidDiff_1 および DXVA_MBctrl_P_OffHostIDCT_1 構造体のメンバーです。 IntraMacroblockMotionForwardMotionBackwardMotionTypeMvertFieldSelH261LoopFilterMotion4MV のフラグと変数は、DXVA_MBctrl_P_HostResidDiff_1 構造体と DXVA_MBctrl_P_OffHostIDCT_1構造体の wMBtype メンバーに含まれるビットフィールドです。 bPicOBMC は、DXVA_PictureParameters 構造体のメンバーです。 PicCurrentField フラグは、DXVA_PictureParameters の bPicStructure メンバーから派生します。

このセクションの次の表を確認する場合は、次の考慮事項が適用されます。

  • さまざまな場所で、MPEG-2 変数名 PMV はモーション ベクトルの値を示すために使用されます。 この表記は、MPEG-2 で定義されている PMV 変数 (フレーム座標) と、フィールド座標 (つまり、半垂直解像度) にあるモーション ベクトルを区別するために使用されます。 いずれの場合も、PMV は、現在の モーション ベクトル値 (MPEG-2 ビデオ セクション 7.6.3.1 で指定) によって更新された後 の PMV の値を参照します。

  • vector'[2][0] と vector'[3][0] の定義は MPEG-2 セクション 7.6.3.6 にあります。 左-シフト操作は、垂直コンポーネントがフレーム座標に変更されていることを示します。

  • "モーションなし" ケース (0,0,0) の両方で、マクロブロック パラメーターは、ゼロ値のモーション ベクトルを使用して前方予測マクロブロック (0,1,0) をエミュレートします。 (「MPEG-2」セクション 7.6.3.5 も参照してください。) 

  • MotionType に一重引用符で示される値はバイナリ表現です (最初の数値はビット 9 用、2 番目の数値はビット 8 用です)。

  • 最初のテーブルの左シフト演算子は、表示される 2 番目の値にのみ適用されます。

フレーム構造の画像

次の表は、フレーム構造化図の要素設定の有効な組み合わせを示しています (DXVA_PictureParameters 構造体の bPicStructure メンバーが 3 の場合)。

IntraMacroblock、MotionForward、MotionBackward MotionType (意味は画像の種類によって異なります) MVector[0]MvertFieldSel_0 (1st, dir1) MVector[1]MvertFieldSel_1 (1st, dir2) MVector[2]MvertFieldSel_2 (2nd, dir1) MVector[3]MvertFieldSel_3 (2nd, dir2)

1,0,0 (intra)

'00' (intra)

-

-

-

-

-

-

-

-

0,0,0 (モーションなし)

'10' (モーションなし)

0

-

-

-

-

-

-

-

0,1,0

'10' (frame MC)

PMV[0][0]

-

-

-

-

-

-

-

0,0,1

'10' (frame MC)

-

-

PMV[0][1]

-

-

-

-

-

0,1,1

'10' (frame MC)

PMV[0][0]

-

PMV[0][1]

-

-

-

-

-

0,1,0

'01' (フィールド MC)

PMV[0][0]

sel[0][0]

-

-

PMV[1][0]

sel[1][0]

-

-

0,0,1

'01' (フィールド MC)

-

-

PMV[0][1]

sel[0][1]

-

-

PMV[1][1]

sel[1][1]

0,1,1

'01' (フィールド MC)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

PMV[1][0]

sel[1][0]

PMV[1][1]

sel[1][1]

0,1,0

'11' (デュアルプライム)

PMV[0][0]

0 (top)

vector'[2][0][0],

vector'[2][0][1]<<1

1 (下)

PMV[0][0]

1

vector'[3][0][0],

vector'[3][0][1]<<1

0

フィールド構造の画像

次の表は、フレーム構造化図の要素設定の有効な組み合わせを示しています (DXVA_PictureParameters 構造体の bPicStructure メンバーが 1 または 2 の場合)。

IntraMacroblock、MotionForward、MotionBackward MotionType (意味は画像の種類によって異なります) MVector[0]MvertFieldSel_0 (1st, dir1) MVector[1]MvertFieldSel_1 (1st, dir2) MVector[2]MvertFieldSel_2 (2nd, dir1) MVector[3]MvertFieldSel_3(2nd, dir2)

1,0,0 (intra)

'00' (intra)

-

-

-

-

-

-

-

-

0,0,0 (モーションなし)

'01' (モーションなし)

0

PicCurrentField

-

-

-

-

-

-

0,1,0

'01' (フィールド MC)

PMV[0][0]

sel[0][0]

-

-

-

-

-

-

0,0,1

'01' (フィールド MC)

-

-

PMV[0][1]

sel[0][1]

-

-

-

-

0,1,1

'01' (フィールド MC)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

-

-

-

-

0,1,0

'10' (16x8 MC)

PMV[0][0]

sel[0][0]

-

-

PMV[1][0]

sel[1][0]

-

-

0,0,1

'10' (16x8 MC)

-

-

PMV[0][1]

sel[0][1]

-

-

PMV[1][1]

sel[1][1]

0,1,1

'10' (16x8 MC)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

PMV[1][0]

sel[1][0]

PMV[1][1]

sel[1][1]

0,1,0

'11' (デュアルプライム)

PMV[0][0]

PicCurrentField

vector'[2][0]

PicCurrentField

-

-

-

-

フィールドとフレームの画像に対する追加の有効な要素設定

フレーム構造の画像とフィールド構造の画像で許可される残りのケースは次のとおりです。

説明

H261LoopFilter = 1

bPicOBMC = 0

Motion4MV = 0

MVector[0] で 1 つの前方動きベクトルが送信され、マクロブロック内の前方予測に対して H.261 ループ フィルターがアクティブであることを示します。

この場合、MotionForward は 1 である必要があり、IntraMacroblockMotionBackward は両方ともゼロである必要があります。

bPicOBMC = 0

Motion4MV = 1

MVector[0] から MVector[3] に 4 つの前方モーション ベクトルが送信されることを示します。 この場合、MotionForward は 1 で、IntraMacroblock は 0 である必要があります。

MotionBackward が 1 の場合、MVector[4] で後方予測用に 5 番目のモーション ベクトルが送信されます。

bPicOBMC = 1

Motion4MV = 0

OBMC モーションの指定のために MVector[0] から MVector[9] まで 10 個の前方モーション ベクトルが送信され、最初の 4 つのモーション ベクトルの値がすべて等しいことを示します。

MotionBackward が 1 の場合、MVector[10] で後方予測用に 11 番目のモーション ベクトルが送信されます。

bPicOBMC = 1

Motion4MV = 1

OBMC モーションの指定のために MVector から MVector[9] まで 10 個の前方モーション ベクトルが送信され、最初の 4 つのモーション ベクトルの値が互いに異なる可能性があることを示します。

MotionBackward が 1 の場合、MVector[10] で後方予測用に 11 番目のモーション ベクトルが送信されます。

注: 平均演算子は、MPEG-1、MPEG-2 ハーフサンプル予測フィルター処理、双方向平均化、およびデュアル素数の同一-反対パリティ結合で数学的に同一 ((s1+s2+1)>>1) です。 H.263 双方向平均演算子は、右シフトの前に +1 のオフセットを加算しません。 DXVA_PictureParametersbBidirectionalAveragingMode メンバーによって、使用されるメソッドが決まります。