Condividi tramite


Low-Level elementi di elaborazione IDCT

L'interfaccia VA DirectX supporta vari modi per gestire la trasformazione inversa discreta-coseno (IDCT). Esistono due tipi fondamentali di operazione:

  • OFF-host IDCT: passaggio di macroblock di coefficienti di trasformazione all'acceleratore per IDCT esterno, ricostruzione dell'immagine e ritaglio della ricostruzione.

  • IDCT basato su host: esecuzione di un IDCT nell'host e passaggio di blocchi di risultati del dominio spaziale all'acceleratore per la ricostruzione dell'immagine esterna e il ritaglio della ricostruzione.

In entrambi i casi, il processo di inversa-quantizzazione di base, la saturazione dell'intervallo pre-IDCT, il controllo MPEG-2 non corrispondente (se necessario) e l'offset intra-DC (se necessario) vengono eseguiti sull'host. In entrambi i casi, la ricostruzione dell'immagine finale e il ritaglio della ricostruzione vengono eseguiti sull'acceleratore.

La quantizzazione inversa, la saturazione pre-IDCT, il controllo di mancata corrispondenza, l'offset intra-DC, l'IDCT, la ricostruzione delle immagini e i processi di ritaglio della ricostruzione vengono definiti nei passaggi seguenti. La struttura DXVA_QmatrixData carica i dati della matrice di quantizzazione inversa per la decodifica di immagini video compresse. I valori di BPP, WT e HT devono essere considerati uguali a 8, a meno che non diversamente specificato dalla struttura DXVA_PictureParameters .

  1. Eseguire la quantizzazione inversa in base alle esigenze (inclusa l'applicazione di qualsiasi matrice di ponderazione inversa) per creare un set di valori di coefficiente IDCT F"(u,v) dagli indici di quantizzazione codificati dall'entropia. Questa operazione viene eseguita dall'host.

  2. Saturare ogni valore di coefficiente ricostruito F"(u,v) del blocco di coefficiente di trasformazione per ottenere un valore F'(u,v) all'interno dell'intervallo consentito limitato come definito nella formula seguente. Questa operazione viene eseguita dall'host. Formula per il calcolo della saturazione pre-IDCT.

  3. Eseguire un controllo di mancata corrispondenza per MPEG-2. Questa fase di elaborazione è necessaria solo per MPEG-2. Il controllo di mancata corrispondenza viene eseguito sommando i valori saturi di tutti i coefficienti nel blocco macro (questo equivale a XORing i bit meno significativi). Se la somma è pari, 1 viene sottratto dal valore saturo dell'ultimo coefficiente F'(WT-1,HT-1). Se la somma è dispari, il valore saturo di F'(WT-1,HT-1) viene usato così come è, senza alterazione. I valori di coefficiente creati dopo la saturazione e il controllo di mancata corrispondenza vengono definiti F(u,v) in questa documentazione. Questa operazione viene eseguita dall'host. MPEG-1 ha una forma diversa di controllo di mancata corrispondenza che consiste nel modificare il valore di più o meno 1 per ogni coefficiente che altrimenti avrebbe un valore pari dopo la quantizzazione inversa. H.263 non richiede il controllo di mancata corrispondenza descritto in questa sezione. In ogni caso, il controllo di mancata corrispondenza è responsabilità dell'host, se necessario. Formula per il calcolo del controllo non corrispondente.

  4. Aggiungere un offset intra-DC (se necessario) a tutti i blocchi interni, in modo che tutti i blocchi intra rappresentino una differenza rispetto a un valore di stima del riferimento spaziale pari a 2(BPP-1). Tale offset è necessario per tutti gli standard di codifica video di riferimento (H.261, H.263, MPEG-1, MPEG-2 e MPEG-4), tranne quando HostResidDiff è 1 e il membro bConfigIntraResidUnsigned della struttura DXVA_ConfigPictureDecode è 1. L'offset intra DC ha il valore (2(BPP-1)) * sqrt(WTHT) nel dominio di trasformazione. Questo valore è 1024 in tutti i casi tranne MPEG-4, che consente a BPP di essere maggiore di 8. Questa operazione viene eseguita dall'host.

  5. Eseguire la trasformazione coseno discreta inversa (IDCT) nell'host o nell'acceleratore. L'IDCT viene specificato dalla formula seguente, dove: C(u) = 1 per u = 0, in caso contrario C(u) = sqrt(2) C(v) = 1 per v = 0, in caso contrario C(v) = sqrt(2) x e y sono le coordinate spaziali orizzontali e verticali nel dominio pixel u e v sono le coordinate orizzontali e verticali della frequenza del dominio di trasformazione WT e HT sono la larghezza e l'altezza del blocco di trasformazione (in genere entrambi sono 8).

  6. Aggiungere le informazioni residui del dominio spaziale al valore di stima compensato dal movimento per i blocchi non intra o al valore di riferimento costante per intra blocchi per eseguire la ricostruzione dell'immagine sull'acceleratore. Il valore di riferimento costante per i blocchi intra è 2(BPP-1) tranne quando HostResidDiff (bit 10 del membro wMBtype della struttura DXVA_MBctrl_P_HostResidDiff_1) è 1 e il membro bConfigIntraResidUnsigned della struttura DXVA_ConfigPictureDecode è 1. In quest'ultimo caso, la costante è zero.

  7. Ritagliare la ricostruzione dell'immagine in un intervallo compreso tra zero e 2BPP-1 e archiviare i valori finali del campione di immagine risultante sull'acceleratore.