DXVA_MBctrl_P_OffHostIDCT_1 構造体 (dxva.h)
DXVA_MBctrl_P_OffHostIDCT_1構造体は、ホスト デコーダーによってマクロブロックごとに 1 回アクセラレータに送信され、オフホスト IDCT を使用してほとんどの非tra ピクチャに対してマクロブロック制御コマンドを指定します。
構文
typedef struct _DXVA_MBctrl_P_OffHostIDCT_1 {
WORD wMBaddress;
WORD wMBtype;
DWORD dwMB_SNL;
WORD wPatternCode;
BYTE bNumCoef[DXVA_NumBlocksPerMB_420];
DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
} DXVA_MBctrl_P_OffHostIDCT_1;
メンバー
wMBaddress
ラスター スキャン順序で現在のマクロブロックのマクロブロック アドレスを指定します。 マクロブロック アドレスの例については、「 macroblock addresses」を参照してください。
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 に対して変換係数を送信するかを指定します。 bConfigResidDiffHost が 0 の場合、このフラグは 0 にする必要があります。 bConfigResidDiffAccelerator が 0 の場合、このフラグは 1 である必要があります。 このフラグは、DXVA_MBctrl_P_OffHostIDCT_1では常に 0 に等しくなります。 |
9 と 8 | MotionType 図のモーションの種類を指定します。 たとえば、(H.261 のように) フレームピクチャ構造を持つフレームベースのモーションの場合、ビット 9 は 1、ビット 8 は 0 である必要があります。 これらのビットが MPEG-2 に存在する場合、これらのビットの使用は、MPEG-2 でのframe_motion_typeビットまたはfield_motion_type ビットの使用に直接対応します。 これらのビットの使用方法については、次の「解説」セクションで詳しく説明します。 |
7 と 6 | MBscanMethod 使用するスキャン方法を指定します。 bPicScanFixed が 1 の場合、これは bPicScanMethod と等しい必要があります。 bConfigHostInverseScan が 0 の場合、MBscanMethod は次のいずれかの値である必要があります。
|
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 前方移動では、マクロブロック内の 4 つの輝度ブロックごとに個別のモーション ベクトルが使用されることを示します。H.263 Annexes F および J.Motion4MV で使用される場合、MotionForward が 0 の場合、または DXVA_PictureParameters の bPic4MVallowed メンバーが 0 の場合は 0 である必要があります。 |
2 | MotionBackward MPEG-2 の対応するmacroblock_motion_backwardparameterに指定されているとおりに使用されます。 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 は、IDCT 残差ブロック データ バッファーへのインデックスです。 このインデックスは、現在のマクロブロックのブロックの残差データの位置を示し、32 ビットの倍数として表されます。
wPatternCode
マクロブロック内の各ブロックに対して残差データが送信されるかどうかを示します。
wPatternCode のビット (11-i) (i はマクロブロック内のブロックのインデックスで、ビット 0 は最下位ビットを表します) は、ブロック i に対して残差データが送信されるかどうかを示します (詳細については、「Macroblock 指向の画像デコード」を参照してください)。値 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 ブロック、Cb の 4:4:4 ブロックが続く) 4:4:4 ブロックの Cr) が続きます。 コード化されたブロック (ビット (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 として送信する必要があります。
bNumCoef[DXVA_NumBlocksPerMB_420]
bNumCoef 配列の各値は、マクロブロックの各ブロック i の残差データ バッファー内の係数の数を示します。
配列添字 i は、MPEG-2 ビデオ図 6-10、6-11、6-12 (Y のラスター スキャン順序、Cb の後に Cr が続く) で指定されているマクロブロック内のブロックのインデックスです。
このメンバーは、 HostResidDiff フラグ ( wMBtype のビット 10) が 0 で 、bChromaFormat が 1 (4:2:0) の場合にのみ使用されます。 4:2:2 または 4:4:4 形式で使用すると、一般的なマクロブロック 制御コマンドのサイズが重要なメモリアラインメント境界を超えて大きくなります。 その結果、DXVA_TCoefSingle構造体内の TCoefEOB ビットは、4:2:0 以外のケースで各ブロックの係数の数を決定するために使用されます。
bNumCoef の目的は、残差データ バッファー内の各ブロックに存在するデータの量を示し、存在する係数の数として表します。 DXVA_ConfigPictureDecode構造体の bConfig4GroupedCoefs メンバーが 1 の場合、bNumCoef には、ブロックに対して送信された実際の係数数か、4 の倍数に切り上げられた値が含まれる場合があります。 これらの係数のデータは、同じ順序で残差バッファーにあります。
MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]
マクロブロックのモーション ベクトルの値を含む配列。各配列は 、DXVA_MVvalue 構造体を使用して表されます。
注釈
MBskipsFollowing で指定されたスキップされた各マクロブロックは、wMBaddress の値をインクリメントしてから同じマクロブロック制御コマンドを繰り返すのと数学的に同等の方法で生成する必要があります。 MBskipsFollowing の 0 以外の値を持つ macroblock コントロール コマンドは、スキップされる各マクロブロックに対してモーション補正予測を実行する方法を指定し、スキップされた一連のマクロブロックの最初の生成の明示的な非スキップ仕様 (MBskipsFollowing の値を除く) と等価です。 したがって、 MBskipsFollowing が 0 でない場合は常に、 Motion4MV、 IntraMacroblock、 bNumCoef の値がすべて 0 に等しい必要があります。
MBdataLocation は、IDCT 残差ブロック データ バッファーへのインデックスであり、現在のマクロブロックのブロックの残差データの位置を示し、32 ビットの倍数として表されます。 macroblock コントロール コマンド バッファー内の最初のマクロブロックの場合は、0 にする必要があります。 wPatternCode が 0 の場合、MBdataLocation には任意の値が含まれる場合があります。 wPatternCode が 0 の場合、デコーダーは推奨されますが、この値を 0 または次のマクロ ブロック 制御コマンドと同じ値に設定する必要はありません。
スキップされたマクロブロックの生成方法の詳細については、「 スキップされたマクロブロックの生成」を参照してください。
IntraMacroblock、MotionForward、MotionBackward、MotionType、MvertFieldSel、MVector の有効な組み合わせは、Macroblock コントロール コマンド構造の最初の部分の表に示されています。
要件
要件 | 値 |
---|---|
Header | dxva.h (Dxva.h を含む) |