マクロブロック制御コマンド構造の最初の部分
汎用マクロブロック 制御コマンド構造の最初の 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 |
wPicWidthInMBminus1 と wPicHeightInMBminus1 アドレスは、DXVA_PictureParameters 構造体のメンバーです。
wMBtype
wMBtype 構造体メンバーは、処理するマクロ ブロックの種類を指定します。 このメンバーには、マクロブロックとモーション ベクトルの処理方法を定義する一連のビットが含まれています。 bPic4MVallowed、bPicScanMethod、bPicBackwardPrediction、bPicStructure、bPicScanFixedアドレスは、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 は次のいずれかの値である必要があります。
bConfigHostInverseScan が 1 の場合、MBscanMethod は次の値と等しい必要があります。
|
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 つの表は、フレームコード化された画像とフィールドコーディングされた画像に対する IntraMacroblock、MotionForward、MotionBackward、 MotionType、MvertFieldSel、MVector の有効な組み合わせを示しています。 MVector には、モーション ベクトルの水平コンポーネントと垂直コンポーネントが含まれています。 再メイン変数とフラグは、モーション ベクトル操作を指定します。 これは、処理されるマクロブロックの種類と、マクロブロックがフレームコード化された画像またはフィールドコード化された画像に使用されているかどうかに応じて決定されます。
(このセクションの) 次の表に示す値は、次の条件で発生します。
H261LoopFilter、 Motion4MV、および bPicOBMC は 0 です。
bPicStructure が 2 (下のフィールド) でない限り、PicCurrentField フラグは 0 です。 この場合、PicCurrentField は 1 です。
MVector は、DXVA_MBctrl_P_HostResidDiff_1 および DXVA_MBctrl_P_OffHostIDCT_1 構造体のメンバーです。 IntraMacroblock、MotionForward、MotionBackward、MotionType、MvertFieldSel、H261LoopFilter、 Motion4MV のフラグと変数は、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], 1 (下) |
PMV[0][0] 1 |
vector'[3][0][0], 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 である必要があり、IntraMacroblock と MotionBackward は両方ともゼロである必要があります。 |
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_PictureParameters の bBidirectionalAveragingMode メンバーによって、使用されるメソッドが決まります。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示