struttura DXVA_MBctrl_P_OffHostIDCT_1 (dxva.h)
La struttura DXVA_MBctrl_P_OffHostIDCT_1 viene inviata una volta per ogni blocco di macro dal decodificatore host all'acceleratore per specificare i comandi di controllo macroblock per la maggior parte delle immagini nontra usando IDCT off-host.
Sintassi
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;
Membri
wMBaddress
Specifica l'indirizzo macroblock del blocco macro corrente nell'ordine di analisi raster. Per esempi di indirizzi di macroblock, vedere indirizzi di macroblock.
wMBtype
Specifica il tipo di blocco macro da elaborare. I bit seguenti definiscono l'elaborazione di macroblock.
bit | Descrizione |
---|---|
Da 15 a 12 | MvertFieldSel_3 (bit 15 il bit più significativo) tramite MvertFieldSel_0 (bit 12) Specifica la selezione verticale dei campi per i vettori di movimento corrispondenti inviati più avanti nel comando di controllo macroblock. Per il movimento basato su fotogrammi con una struttura di immagini cornice (ad esempio, per H.261 e H.263), questi bit devono essere tutti zero. L'uso di questi bit è uguale a quello specificato per i bit corrispondenti nella sezione 6.3.17.2 di MPEG-2. |
11 |
di bit riservati Deve essere zero. |
10 |
HostResidDiff Specifica se i blocchi decodificati di differenza residua del dominio spaziale vengono inviati o se i coefficienti di trasformazione vengono inviati per IDCT fuori host per il macroblock corrente. Questo flag deve essere zero se bConfigResidDiffHost è zero. Questo flag deve essere 1 se bConfigResidDiffAccelerator è zero. Questo flag è sempre uguale a zero in DXVA_MBctrl_P_OffHostIDCT_1. |
9 e 8 |
MotionType Specifica il tipo di movimento nell'immagine. Ad esempio, per il movimento basato su fotogrammi con una struttura dell'immagine cornice (come in H.261), il bit 9 deve essere 1 e bit 8 deve essere zero. L'uso di questi bit corrisponde direttamente all'uso di frame_motion_type o field_motion_type bit in MPEG-2 quando questi bit sono presenti in MPEG-2. L'uso di questi bit è illustrato ulteriormente nella sezione Osservazioni seguenti. |
7 e 6 |
MBscanMethod Specifica il metodo di analisi da utilizzare. Deve essere uguale a bPicScanMethod se bPicScanFixed è 1. Se bConfigHostInverseScan è zero, MBscanMethod deve essere uno dei valori seguenti:
|
5 |
FieldResidual Indica se i blocchi di differenza residua usano una struttura IDCT di campo come specificato in MPEG-2. Questo flag deve essere 1 se il membro bPicStructure di DXVA_PictureParameters è 1 o 2. Se usato per MPEG-2, FieldResidual deve essere zero se il flag frame_pred_frame_DCT nella sintassi MPEG-2 è 1 e deve essere uguale all'elemento dct_type della sintassi MPEG-2 se dct_type è presente per il blocco macro. |
4 |
H261LoopFilter Specifica se il filtro ciclo H.261 (sezione 3.2.3 di H.261) è attivo per la stima del blocco macro corrente. Il filtro a ciclo H.261 è un filtro a ciclo separabile Â1/4, Â1/2, Â1/4 applicato sia orizzontalmente che verticalmente a tutti e sei i blocchi di un blocco macroblock, ad eccezione dei bordi del blocco in cui uno dei rubinetti cadrebbe all'esterno del blocco. In questi casi, il filtro viene modificato in modo da avere coefficienti 0, 1, 0. La precisione aritmetica completa viene mantenuta con arrotondamento a interi a 8 bit nell'output del processo di filtro 2D (valori a metà intero o superiore arrotondati). |
3 |
Motion4MV Indica che il movimento in avanti usa un vettore di movimento distinto per ognuno dei quattro blocchi di luminanza nel blocco macro, come usato in H.263 Le funzioni di controllo F e J.Motion4MV devono essere pari a zero se MotionForward è zero o se il membro bPic4MVallowed di DXVA_PictureParameters è zero. |
2 |
MotionBackward Utilizzato come specificato per il macroblock_motion_backwardparameter corrispondente in MPEG-2. Se il membro bPicBackwardPrediction di DXVA_PictureParameters è zero, MotionBackward deve essere zero. L'uso di questo bit è illustrato più dettagliatamente nella sezione Osservazioni seguenti. |
1 |
MotionForward Utilizzato come specificato per il macroblock_motion_forward corrispondente in MPEG-2. L'uso di questo bit è illustrato più dettagliatamente nella sezione Osservazioni seguenti. |
0 |
IntraMacroblock Indica che il blocco macro viene codificato come intra e non vengono utilizzati vettori di movimento per il blocco macro corrente. Corrisponde a macroblock_intrain MPEG-2. L'uso di questo bit è illustrato più dettagliatamente nella sezione Osservazioni seguenti. |
dwMB_SNL
Specifica il numero di macroblock ignorati da generare dopo il blocco macro corrente e indica la posizione dei dati di differenza residua per i blocchi del blocco macro corrente. Questo membro contiene due variabili: MBskipsFollowing nei 8 bit più significativi e MBdataLocation nei 24 bit meno significativi. MBskipsFollowing indica il numero di macroblock ignorati da generare dopo il blocco macro corrente. MBdataLocation è un indice nel buffer di dati dei blocchi di differenza residua IDCT. Questo indice indica la posizione dei dati di differenza residua per i blocchi del blocco macro corrente, espresso come multiplo di 32 bit.
wPatternCode
Indica se i dati di differenza residua vengono inviati per ogni blocco nel blocco macro.
Bit (11-i) di wPatternCode (dove i è l'indice del blocco all'interno del blocco e bit 0 rappresenta il bit meno significativo) indica se i dati di differenza residua vengono inviati per il blocco i (vedere Macroblock-Oriented di decodifica immagine per altre informazioni). Il valore i è l'indice del blocco all'interno del blocco come specificato nelle figure MPEG-2 6-10, 6-11 e 6-12 (ordine di scansione raster per Y, seguito da blocchi 4:2:0 di Cb in ordine raster-scan, seguito da blocchi 4:2:0 di Cr, seguito da 4:2:2 blocchi di Cb, seguito da 4:2:2 blocchi di Cr, seguito da 4:4:4 blocchi di Cb, seguito da 4:4:4 blocchi di Cr). I dati per i blocchi codificati (blocchi con bit (11-i) uguale a 1) si trovano nel buffer di codifica residuo nello stesso ordine di indicizzazione (aumentando i). Per i dati 4:2:0 MPEG-2, il valore di wPatternCode corrisponde allo spostamento del valore decodificato di CBP a sinistra di sei posizioni di bit (quelle posizioni di bit inferiori usate per i formati 4:2:2 e 4:4:4).
Se il bConfigSpatialResidInterleaved membro di DXVA_ConfigPictureDecode è 1, le differenze residui basate su host vengono inviate in un formato interleaved cromatico corrispondente a quello del formato pixel YUV in uso. In questo caso, ogni coppia cb e di blocchi cr corrispondente nello spazio viene considerata come una singola unità di struttura dei dati di differenza residua. Ciò non modifica il valore o il significato di wPatternCode, ma implica che entrambi i membri di ogni coppia di blocchi di dati Cb e Cr vengono inviati ogni volta che uno di questi blocchi di dati ha il bit corrispondente impostato in wPatternCode. Se il bit in wPatternCode per un blocco di dati specifico è zero, i valori dei dati di differenza residui corrispondenti devono essere inviati come zero ogni volta che questa associazione richiede l'invio di un blocco di dati di differenza residua per un blocco con un wPatternCode bit uguale a zero.
bNumCoef[DXVA_NumBlocksPerMB_420]
Ogni valore nella matrice bNumCoef indica il numero di coefficienti nel buffer dei dati delle differenze residui per ogni blocco i del blocco.
L'indice di matrice i è l'indice del blocco all'interno del blocco macro come specificato nelle figure video MPEG-2 figura 6-10, 6-11 e 6-12 (ordine di analisi raster per Y, seguito da Cb, seguito da Cr).
Questo membro viene usato solo quando il flag di HostResidDiff (bit 10 in wMBtype) è zero e bChromaFormat è 1 (4:2:0). Se usato nei formati 4:2:2 o 4:4:4, aumenterebbe le dimensioni dei comandi di controllo di blocco macro tipici oltre un limite di allineamento della memoria critico. Di conseguenza, la TCoefEOB bit all'interno della struttura DXVA_TCoefSingle viene usata per determinare il numero di coefficienti in ogni blocco in casi non 4:2:0.
Lo scopo di bNumCoef consiste nell'indicare la quantità di dati presenti per ogni blocco nel buffer dei dati delle differenze residui, espresso come numero di coefficienti presenti. Quando il bConfig4GroupedCoefs membro della struttura DXVA_ConfigPictureDecode è 1, bNumCoef può contenere il numero effettivo di coefficienti inviati per il blocco o tale valore arrotondato per essere un multiplo di quattro. I dati per questi coefficienti si trovano nel buffer delle differenze residui nello stesso ordine.
MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]
Matrice contenente il valore dei vettori di movimento per il blocco macro, ognuno rappresentato utilizzando una struttura DXVA_MVvalue.
Osservazioni
Ogni macroblock ignorato specificato da MBskipsFollowing deve essere generato in modo matematico equivalente all'incremento del valore di wMBaddress e quindi ripetere lo stesso comando di controllo macroblock. Qualsiasi comando di controllo macroblock con un valore diverso da zero per MBskipsFollowing specifica il modo in cui deve essere eseguita la stima con compensazione del movimento per ogni blocco macro da ignorare ed è equivalente (ad eccezione del valore di MBskipsFollowing) a una specifica esplicita non ignorata della generazione della prima serie di macroblock ignorati. Pertanto, ogni volta che MBskipsFollowing non è zero, tutti i valori seguenti devono essere uguali a zero: Motion4MV, IntraMacroblocke bNumCoef.
MBdataLocation è un indice nel buffer di dati dei blocchi di differenza residua IDCT, che indica la posizione dei dati della differenza residua per i blocchi del blocco macro corrente, espresso come multiplo di 32 bit. Deve essere zero per il primo blocco macro nel buffer dei comandi del controllo macroblock. MBdataLocation può contenere qualsiasi valore se wPatternCode è zero. Quando wPatternCode è zero, i decodificatori sono consigliati ma non devono impostare questo valore su zero o sullo stesso valore del comando di controllo macroblock successivo.
Per altre informazioni sulla generazione di macroblock ignorati, vedere Generazione di macroblock ignorati.
Le combinazioni valide di IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSele MVector vengono visualizzate nelle tabelle in Prima parte della struttura dei comandi del controllo Macroblock.
Fabbisogno
Requisito | Valore |
---|---|
intestazione | dxva.h (include Dxva.h) |