次の方法で共有


DXVA_MBctrl_P_HostResidDiff_1 構造体 (dxva.h)

DXVA_MBctrl_P_HostResidDiff_1構造体は、ホスト ベースの IDCT を使用する場合、ほとんどの非イントラピクチャ ケースに対してマクロブロック制御コマンドを指定するために、ホスト デコーダーによってマクロブロックごとに 1 回アクセラレータに送信されます。

構文

typedef struct _DXVA_MBctrl_P_HostResidDiff_1 {
  WORD         wMBaddress;
  WORD         wMBtype;
  DWORD        dwMB_SNL;
  WORD         wPatternCode;
  WORD         wPC_Overflow;
  DWORD        dwReservedBits2;
  DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
} DXVA_MBctrl_P_HostResidDiff_1;

メンバー

wMBaddress

ラスター スキャン順序で現在のマクロブロックのマクロブロック アドレスを指定します。 マクロブロック アドレスの例については、「 macroblock addresses」を参照してください。

wMBtype

処理するマクロブロックの種類を指定します。 次のビットは 、wMBtype の内容を定義します。

Bits 説明
15 から 12 MvertFieldSel_3 (ビット 15、最上位ビット) ~ MvertFieldSel_0 (ビット 12)
macroblock コントロール コマンドで後で送信される、対応するモーション ベクトルの垂直方向のフィールド選択を指定します。 フレーム画像構造を持つフレーム ベースのモーション (H.261 や H.263 など) の場合、これらのビットはすべて 0 である必要があります。 これらのビットの使用は、MPEG-2 のセクション 6.3.17.2 の対応するビットに対して指定したビットと同じです。
11 予約済みビット。 ゼロを指定してください。
10 HostResidDiff
空間ドメインの残差デコードされたブロックを送信するか、または現在のマクロブロックのオフホスト IDCT に対して変換係数を送信するかを指定します。
HostResidDif フラグは、この構造体では常に 1 に等しくなります。 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
この変数には意味がなく、この構造体ではこれらのビットを 0 に設定する必要があります。
5 FieldResidual
残差ブロックが MPEG-2 で指定されているフィールド IDCT 構造体を使用するかどうかを示します。
DXVA_PictureParametersの bPicStructure メンバーが 1 または 2 の場合は、1 にする必要があります。 MPEG-2 に使用する場合、MPEG-2 構文のframe_pred_frame_DCT変数が 1 の場合は FieldResidual が 0 である必要があり、マクロブロックにdct_typeがある場合は MPEG-2 構文のdct_type変数と等しい必要があります。
4 H261LoopFilter
現在のマクロブロック予測に対して H.261 ループ フィルター (H.261 のセクション 3.2.3) がアクティブかどうかを指定します。 H.261 ループ フィルターは、H.261 マクロブロック内の 6 つのブロックすべてに水平方向と垂直方向の両方に適用される分離可能な 1/4、1/2、1/4 フィルターです。ただし、タップの 1 つがブロックの外側にあるブロック エッジを除きます。 このような場合、フィルターは係数 0、1、0 に変更されます。 完全な算術精度は、2-D フィルター プロセスの出力で 8 ビット整数に丸めて保持されます (半整数以上の値が切り上げられます)。
3 Motion4MV
H.263 Annexes F および J. Motion4MV で使用される、マクロブロック内の 4 つの輝度ブロックごとに、前方モーションが個別のモーション ベクトルを使用することを示す変数。MotionForward が 0 の場合、または DXVA_PictureParameters の 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 としてコード化され、現在のマクロブロックにモーション ベクトルが使用されていないことを示します。 MACROBLOCK_INTRAIN MPEG-2 に対応します。 このビットの使用方法については、次の「解説」セクションで詳しく説明します。

dwMB_SNL

現在のマクロブロックの後に生成されるスキップされたマクロブロックの数を指定し、現在のマクロブロックのブロックの残差データの位置を示します。 このメンバーには、最上位の 8 ビット の MBskipsFollowing と、下位 24 ビットの MBdataLocation という 2 つの変数が含まれています。 MBskipsFollowing は、現在のマクロブロックの後に生成されるスキップされたマクロブロックの数を示します。 MBdataLocation は、残差ブロック データ バッファーのインデックスです。 このインデックスは、現在のマクロブロックのブロックの残差データの位置を示し、32 ビットの倍数として表されます。

wPatternCode

現在のマクロブロックの各ブロックに対して 残差データ が送信されるかどうかを示します。

wPatternCode のビット (11-i) (ビット 0 が最下位ビット) は、ブロック i に対して残差データが送信されるかどうかを示します。ここで、i は MPEG-2 の図 6-10、6-11、6-12 (Y のラスター スキャン順序、ラスター スキャン順序、ラスター スキャン順の Cb の 4:2:0 ブロック) で指定されているマクロ ブロック内のブロックのインデックスです。 次に Cr の 4:2:0 ブロック、Cb の 4:2:2 ブロック、Cr の 4:2:2 ブロック、Cb の 4:4:4 ブロック、Cr の 4:4:4 ブロックが続きます。 コード化されたブロック (ビット (11-i) が 1 と等しいブロック) のデータは、同じインデックス作成順序 (増加 i) の残余コーディング バッファーにあります。 4:2:0 MPEG-2 データの場合、 wPatternCode の値は、CBP (コード化されたブロック パターン) のデコードされた値を 6 ビット位置 (4:2:2 および 4:4:4 の彩度形式で使用される下位ビット位置) で左にシフトすることに対応します。

DXVA_ConfigPictureDecodeの bConfigSpatialResidInterleaved メンバーが 1 の場合、ホストベースの残差は、使用中の YUV ピクセル形式と一致する彩度インターリーブ形式で送信されます。 この場合、各Cbおよび空間的に対応するCr対のブロックは、単一の残差構造単位として扱われる。 これは 、wPatternCode の値や意味を変更しませんが、これらのデータ ブロックのいずれかが wPatternCode に対応するビットを設定するたびに、Cb と Cr の各データ ブロックの各ペアの両方のメンバーが送信されることを意味します。 特定のデータ ブロックの wPatternCode のビットが 0 の場合、このペアリングで wPatternCode ビットが 0 に等しいブロックの残差データ ブロックを送信する必要がある場合は常に、対応する残差データ値を 0 として送信する必要があります。

wPC_Overflow

オーバーフロー残差データを使用するマクロブロックのブロックを指定します。

bPicOverflowBlocks メンバーが 1、IntraMacroblock DXVA_PictureParameters が 0 (8 から 8 オーバーフロー メソッド) の bPicOverflowBlocks メンバーでホストベースの残差デコードを使用する場合、wPC_Overflowにはオーバーフロー ブロックのパターン コードが含まれます。 (パターン コードは 、wPatternCode の場合と同じ方法で指定されます)。コード化されたオーバーフロー ブロック (ビット (11-i) が 1 に等しいブロック) のデータは、同じインデックス作成順序 (増加 i) の残余コーディング バッファーに見つかります。

dwReservedBits2

パッキングとアラインメントに使用される予約済みビット。 ゼロを指定してください。

MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]

マクロブロックのモーション ベクトルの値を含む配列。各モーション ベクトルは 、DXVA_MVvalue 構造体で表されます。

注釈

MBskipsFollowing で指定されたスキップされた各マクロブロックは、wMBaddress の値をインクリメントしてから同じマクロブロック制御コマンドを繰り返すのと数学的に同等の方法で生成する必要があります。

MBskipsFollowing の 0 以外の値を持つ macroblock コントロール コマンドの内容は、スキップされた一連のマクロブロックの最初のコンテンツと同等です (MBskipsFollowing の値を除く)。 したがって、 MBskipsFollowing が 0 でない場合は常に、次の構造体メンバーと変数はすべて 0 に等しい必要があります: Motion4MV、IntraMacroblock、 wPatternCode、および wPC_Overflow。 後続のスキップされた各マクロブロックは、 wMBaddress の値をインクリメントする場合を除き、最初の マクロブロックと同じ方法で生成されます。

MBdataLocation は、macroblock コントロール コマンド バッファー内の最初のマクロブロックに対して 0 である必要があります。 macroblock コントロール コマンド バッファー内の最初のマクロブロック以外のマクロブロックの場合、wPatternCode が 0 の場合、MBdataLocation には任意の値が含まれる場合があります。 wPatternCode が 0 の場合、デコーダーは推奨されますが、この値を 0 または次の macroblock コントロール コマンドと同じ値に設定する必要はありません。

スキップされたマクロブロックの生成方法の詳細については、「 スキップされたマクロブロックの生成」を参照してください。

IntraMacroblockMotionForwardMotionBackwardMotionTypeMvertFieldSelMVector の有効な組み合わせは、Macroblock コントロール コマンド構造の最初の部分の表に示されています。

要件

要件
Header dxva.h (Dxva.h を含む)

こちらもご覧ください

DXVA_ConfigPictureDecode

DXVA_MBctrl_P_OffHostIDCT_1

DXVA_MVvalue

DXVA_PictureParameters