Condividi tramite


Prima parte della struttura dei comandi del controllo Macroblock

I primi quattro membri di una struttura di comandi del controllo macroblock generico sono sempre gli stessi. Nella tabella seguente vengono descritti i membri della prima parte di questa struttura.

Membro Descrizione

wMBaddress

Specifica l'indirizzo macroblock del blocco macro attualmente in fase di elaborazione.

wMBtype

Specifica il tipo di macroblock in fase di elaborazione. Questo membro contiene flag che indicano se viene utilizzata la compensazione del movimento per stimare il valore del blocco macro e il tipo di dati di differenza residua inviati.

dwMB_SNL

Contiene i due campi MBskipsFollowing (nei 8 bit superiori) e MBdataLocation (nei 24 bit inferiori).

MBskipsFollowing specifica il numero di macroblock ignorati da generare dopo il blocco macro corrente.

MBdataLocation è un indice nel buffer dei dati del blocco di differenze residui IDCT, che indica la posizione dei dati di differenza residua per i blocchi del blocco macroblock corrente.

wPatternCode

Indica se i dati di differenza residua vengono inviati per ogni blocco nel blocco macroblock.

wMBaddress

Il membro della struttura wMBaddress specifica l'indirizzo macroblock del macroblock corrente nell'ordine di analisi raster. La tabella seguente illustra esempi di indirizzi macroblock.

Macroblocco Indirizzo

in alto a sinistra

Zero

in alto a destra

wPicWidthInMBminus1

in basso a sinistra

wPicHeightInMBminus1 x (wPicWidthInMBminus1+1)

in basso a destra

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

Gli indirizzi wPicWidthInMBminus1 e wPicHeightInMBminus1 sono membri della struttura DXVA_PictureParameters .

wMBtype

Il membro della struttura wMBtype specifica il tipo di macroblock in fase di elaborazione. Questo membro contiene un set di bit che definiscono il modo in cui vengono elaborati i macroblock e i vettori di movimento. Gli indirizzi bPic4MVallowed, bPicScanMethod, bPicBackwardPrediction, bPicStructure e bPicScanFixed sono membri della struttura DXVA_PictureParameters. L'indirizzo bConfigHostInverseScan è un membro della struttura DXVA_ConfigPictureDecode .

BITS Descrizione

Da 15 a 12

MvertFieldSel_3 (bit 15, il 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, come specificato nelle tabelle seguenti. Per il movimento basato su fotogrammi con una struttura dell'immagine cornice (ad esempio, per H.261 e H.263), questi bit devono essere tutti zero. I bit in MvertFieldSel_0, MvertFieldSel_1, MvertFieldSel_2 e MvertFieldSel_3 corrispondono ai bit motion_vertical_field_select[r][s] nella sezione 6.3.17.2 di MPEG-2.

11

Bit riservato. Deve essere zero.

10

HostResidDiff

Specifica se i blocchi decodificati della differenza residua del dominio spaziale vengono inviati o se i coefficienti di trasformazione vengono inviati per IDCT off-host per il blocco macro corrente. Deve essere zero se bConfigResidDiffHost è zero. Deve essere 1 se bConfigResidDiffAccelerator è zero.

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 dei bit frame_motion_type o field_motion_type nella sezione 6.3.17.1 e nelle tabelle 6-17 e 6-18 dello standard video MPEG-2 quando questi bit sono presenti in un flusso di bit MPEG-2. L'uso di questi bit è illustrato ulteriormente seguendo questa tabella.

7 e 6

MBscanMethod

Specifica il metodo di analisi del blocco macro. Deve essere uguale a bPicScanMethod se bPicScanFixed è 1. Se HostResidDiff è 1, questa variabile non ha alcun significato e questi bit devono essere impostati su zero.

Se bConfigHostInverseScan è zero, MBscanMethod deve essere uno dei valori seguenti:

  • Bit 6 è zero e bit 7 è zero per l'analisi zigzag (MPEG-2 Figura 7-2)

  • Bit 6 è 1 e bit 7 è zero per l'analisi verticale alternativa (MPEG-2 Figura 7-3)

  • Bit 6 è zero e bit 7 è 1 per l'analisi orizzontale alternativa (H.263 Figura I.2 Parte a)

Se bConfigHostInverseScan è 1, MBscanMethod deve essere uguale al valore seguente:

  • Bit 6 è 1 e bit 7 è 1 per l'analisi arbitraria con indirizzo di coefficiente assoluto.

5

FieldResidual

Indica se i blocchi di differenza residua utilizzano una struttura IDCT di campo come specificato in MPEG-2.

Questo flag deve essere 1 se bPicStructure è 1 o 2. Questo flag deve essere zero se usato per MPEG-2 se il flag frame_pred_frame_DCT nella sintassi MPEG-2 è 1. Questo flag deve essere uguale all'elemento dct_type della sintassi MPEG-2 se usato per MPEG-2 se dct_type è presente per il blocco macro.

4

H261LoopFilter

Specifica se il filtro del ciclo H.261 (sezione 3.2.3 di H.261) è attivo per la stima del blocco macro corrente. Il filtro ciclo H.261 è un filtro separabile 1/4, 1/2, 1/4 applicato sia orizzontalmente che verticalmente a tutti e sei i blocchi in un blocco macroblock H.261, ad eccezione dei bordi del blocco in cui uno dei tap 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 per errotondamento).

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 Convocato F e J. Motion4MV deve essere zero se MotionForward è zero o se bPic4MVallowed è zero.

2

MotionBackward

Questa variabile viene usata come specificato per il parametro macroblock_motion_backward corrispondente in MPEG-2. Se il membro bPicBackwardPrediction della struttura DXVA_PictureParameters è zero, MotionBackward deve essere zero.

1

MotionForward

Questa variabile viene usata come specificato per il macroblock_motion_forward corrispondente in MPEG-2. L'uso di questo bit è illustrato ulteriormente nel testo che segue questa tabella.

0

IntraMacroblock

Indica che il blocco macro viene codificato come intra e che non vengono utilizzati vettori di movimento per il blocco macro corrente.

Questa variabile corrisponde alla variabile macroblock_intra in MPEG-2. L'uso di questo bit è illustrato ulteriormente nel testo che segue questa tabella.

Quando i macroblock vengono codificati in modo predittivo, hanno valori del vettore di movimento associati. I valori vengono generati in base al fatto che i macroblock vengano usati per immagini codificate in campi o con frame. È importante che qualsiasi implementazione tenga conto correttamente di ogni tipo di macroblock utilizzato (in particolare per le immagini strutturate sul campo o il movimento dual-prime).

Le due tabelle seguenti in questa sezione indicano combinazioni valide di IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSel e MVector per le immagini codificate in frame e con codice campo. MVector contiene i componenti orizzontali e verticali di un vettore di movimento. Le variabili e i flag rimanenti specificano l'operazione del vettore di movimento. Ciò viene determinato in base al tipo di macroblock elaborato e se i macroblock vengono usati per le immagini codificate in frame o con codice di campo.

I valori illustrati nelle tabelle seguenti (in questa sezione) si verificano per le condizioni seguenti:

  • H261LoopFilter, Motion4MV e bPicOBMC sono zero.

  • Il flag PicCurrentField è zero a meno che bPicStructure non sia 2 (campo inferiore). In questo caso , PicCurrentField è 1.

MVector è un membro delle strutture DXVA_MBctrl_P_HostResidDiff_1 e DXVA_MBctrl_P_OffHostIDCT_1 . I flag e le variabili IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSel, H261LoopFilter e Motion4MV sono campi di bit contenuti nel membro wMBtype delle strutture DXVA_MBctrl_P_HostResidDiff_1 e DXVA_MBctrl_P_OffHostIDCT_1. bPicOBMC è un membro della struttura DXVA_PictureParameters . Il flag PicCurrentField è derivato dal membro bPicStructure di DXVA_PictureParameters.

Quando si esaminano le tabelle seguenti in questa sezione, si applicano le considerazioni seguenti:

  • In una serie di posizioni, il nome di variabile MPEG-2 PMV viene usato per indicare il valore di un vettore di movimento. Questa notazione viene usata per distinguere tra la variabile PMV definita in MPEG-2, ovvero nelle coordinate del fotogramma, e un vettore di movimento che può trovarsi in coordinate di campo (in altre parole, a risoluzione semi verticale). In tutti i casi, PMV fa riferimento al valore di PMV dopo che è stato aggiornato dal valore del vettore di movimento corrente (come specificato nella sezione 7.6.3.1 del video MPEG-2).

  • Le definizioni di vector'[2][0] e vector'[3][0] sono disponibili in MPEG-2 Sezione 7.6.3.6. L'operazione di spostamento a sinistra-mostrata indica che il componente verticale viene modificato nelle coordinate del frame.

  • In entrambi i casi "nessun movimento" (0,0,0), i parametri di macroblock emulano un macroblock di stima in avanti (0,1,0) con un vettore di movimento con valori zero. Vedere anche MPEG-2 Sezione 7.6.3.5.

  • I valori visualizzati per MotionType tra virgolette singole sono rappresentazioni binarie (il primo numero è per bit 9 e il secondo è per bit 8).

  • L'operatore di spostamento a sinistra nella prima tabella si applica solo al secondo valore visualizzato.

Immagini strutturate con frame

La tabella seguente mostra le combinazioni valide di impostazioni degli elementi per le immagini strutturate in frame (quando il membro bPicStructure della struttura DXVA_PictureParameters è uguale a 3).

IntraMacroblock, MotionForward, MotionBackward MotionType(significato dipende dal tipo di immagine) MVector[0]MvertFieldSel_0 (1°, dir1) MVector[1]MvertFieldSel_1 (1st, dir2) MVector[2]MvertFieldSel_2 (2°, dir1) MVector[3]MvertFieldSel_3 (secondo, dir2)

1.0.0 (intra)

'00' (intra)

-

-

-

-

-

-

-

-

0,0,0 (nessun movimento)

'10' (nessun movimento)

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' (campo MC)

PMV[0][0]

sel[0][0]

-

-

PMV[1][0]

sel[1][0]

-

-

0,0,1

'01' (campo MC)

-

-

PMV[0][1]

sel[0][1]

-

-

PMV[1][1]

sel[1][1]

0,1,1

'01' (campo 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' (dual-prime)

PMV[0][0]

0 (superiore)

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

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

1 (inferiore)

PMV[0][0]

1

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

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

0

Immagini strutturate sul campo

La tabella seguente mostra le combinazioni valide di impostazioni degli elementi per le immagini strutturate sul campo (quando il membro bPicStructure della struttura DXVA_PictureParameters è uguale a 1 o 2).

IntraMacroblock, MotionForward, MotionBackward MotionType (il significato dipende dal tipo di immagine) MVector[0]MvertFieldSel_0 (1°, dir1) MVector[1]MvertFieldSel_1 (1st, dir2) MVector[2]MvertFieldSel_2 (2°, dir1) MVector[3]MvertFieldSel_3(2nd, dir2)

1.0.0 (intra)

'00' (intra)

-

-

-

-

-

-

-

-

0,0,0 (nessun movimento)

'01' (nessun movimento)

0

PicCurrentField

-

-

-

-

-

-

0,1,0

'01' (campo MC)

PMV[0][0]

sel[0][0]

-

-

-

-

-

-

0,0,1

'01' (campo MC)

-

-

PMV[0][1]

sel[0][1]

-

-

-

-

0,1,1

'01' (campo 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' (dual-prime)

PMV[0][0]

PicCurrentField

vector'[2][0]

PicCurrentField

-

-

-

-

Impostazioni aggiuntive degli elementi validi per immagini di campi e frame

Di seguito sono riportati i casi consentiti rimanenti per le immagini strutturate in frame e strutturate sul campo.

Valori Descrizione

H261LoopFilter = 1

bPicOBMC = 0

Motion4MV = 0

Indica che un vettore forward-motion viene inviato in MVector[0] e che il filtro del ciclo H.261 è attivo per la stima in avanti nel blocco macro.

MotionForward deve essere 1 in questo caso e IntraMacroblock e MotionBackward devono essere entrambi zero.

bPicOBMC = 0

Motion4MV = 1

Indica che quattro vettori forward-motion vengono inviati in MVector[0] fino a MVector[3]. MotionForward deve essere 1 in questo caso e IntraMacroblock deve essere zero.

Se MotionBackward è 1, viene inviato un quinto vettore di movimento per la stima all'indietro in MVector[4].

bPicOBMC = 1

Motion4MV = 0

Indica che 10 vettori di movimento forward-motion vengono inviati in MVector[0] fino a MVector[9] per specificare il movimento OBMC e che i valori dei primi quattro vettori di movimento sono tutti uguali.

Se MotionBackward è 1, viene inviato un undicesimo vettore di movimento per la stima all'indietro in MVector[10].

bPicOBMC = 1

Motion4MV = 1

Indica che 10 vettori di movimento forward-motion vengono inviati in MVector[0] fino a MVector[9] per specificare il movimento OBMC e che i valori dei primi quattro vettori di movimento possono differire l'uno dall'altro.

Se MotionBackward è 1, viene inviato un undicesimo vettore di movimento per la stima all'indietro in MVector[10].

Nota L'operatore medio è matematicamente identico ((s1+s2+1)>>1) per mpeg-1, mpeg-2, filtro di stima a metà campione, media bidirezionale e parità doppia con lo stesso opposto doppio. L'operatore di media bidirezionale H.263 non aggiunge l'offset di +1 prima dello spostamento a destra. Il membro bBidirectionalAveragingMode di DXVA_PictureParameters determina quale di questi metodi viene usato.