Partager via


DXVA_SliceInfo structure (dxva.h)

La structure DXVA_SliceInfo est envoyée par le décodeur hôte à l’accélérateur pour spécifier les paramètres au niveau de la tranche d’une tranche de données de flux de bits pour le décodage d’image compressée de flux de bits hors hôte.

Syntaxe

typedef struct _DXVA_SliceInfo {
  WORD  wHorizontalPosition;
  WORD  wVerticalPosition;
  DWORD dwSliceBitsInBuffer;
  DWORD dwSliceDataLocation;
  BYTE  bStartCodeBitOffset;
  BYTE  bReservedBits;
  WORD  wMBbitOffset;
  WORD  wNumberMBsInSlice;
  WORD  wQuantizerScaleCode;
  WORD  wBadSliceChopping;
} DXVA_SliceInfo, *LPDXVA_SliceInfo;

Membres

wHorizontalPosition

Spécifie la position horizontale du premier macroblock de la tranche exprimée en unités de macroblocks, avec zéro indiquant le macroblock le plus à gauche ou le plus haut de l’image.

wVerticalPosition

Spécifie la position verticale du premier macroblock de la tranche exprimée en unités de macroblocks, avec zéro indiquant le macroblock le plus à gauche ou le plus haut de l’image.

dwSliceBitsInBuffer

Spécifie le nombre total de bits dans la mémoire tampon de données de flux de bits correspondante qui contiennent des données pour la tranche actuelle. Il doit s’agir d’un multiple de huit pour MPEG-1, MPEG-2, MPEG-4. Il doit également être en mode structuré par tranche de H.263, car les codes de début de tranche dans ces cas sont alignés sur les octets.

dwSliceDataLocation

Spécifie l’emplacement du premier octet contenant les données de la tranche (par exemple, l’emplacement d’un code de début de tranche) dans la mémoire tampon de données de flux de bits. Doit être égal à zéro si le début de la tranche ne se trouve pas dans la mémoire tampon de données de flux de bits correspondante.

bStartCodeBitOffset

Spécifie le nombre de bits les plus significatifs de l’octet au niveau de dwSliceDataLocation qui ne contiennent pas de données pour la tranche. bStartCodeBitOffset doit être égal à zéro pour MPEG-1, MPEG-2 et MPEG-4, car les codes de début de tranche dans ces spécifications sont alignés sur les octets. bStartCodeBitOffset peut être différent de zéro pour H.261 et H.263, car ces normes ne forcent pas l’alignement des octets des codes de début goB (groupe de blocs). Ce membre doit être compris entre zéro et 7, et doit être égal à zéro si le début de la tranche ne se trouve pas dans la mémoire tampon de données de flux de bits correspondante. Les bits les plus significatifs marqués comme non pertinents pour la tranche actuelle par bStartCodeBitOffset peuvent contenir des données pour une tranche précédente dans le cas de codes de démarrage qui ne sont pas alignés sur les octets (par exemple, en mode base de référence H.263).

bReservedBits

Bits réservés utilisés pour l’empaquetage et l’alignement. Doit être zéro.

wMBbitOffset

Spécifie le nombre de bits de données d’en-tête de tranche avant le premier bit de données de la couche macrobloc dans la mémoire tampon de flux de bits. Par exemple, si wMBbitOffset a la valeur 83, les données de couche macrobloc pour la tranche démarrent après 83 bits de données d’en-tête de tranche. Doit être égal à zéro si le début de la tranche ne se trouve pas dans la mémoire tampon de données de flux de bits correspondante.

wNumberMBsInSlice

Spécifie le nombre de macroblocs de données dans la tranche, y compris les macroblocks ignorés. Peut être égal à zéro si ce nombre ne peut pas être facilement déterminé à partir de l’en-tête de l’image et des en-têtes et des données macroblock initiales de la tranche actuelle et suivante dans le flux de bits, par exemple dans la tranche rectangulaire et les sous-modèles de classement de tranche arbitraire du mode de tranche de H.263. Ne doit pas être égal à zéro pour H.261, MPEG-1, MPEG-2, MPEG-4, ou lorsque vous n’utilisez pas les sous-modèles de tranche rectangulaire ou de tranche arbitraire du mode structuré en tranches dans H.263.

wQuantizerScaleCode

Code de mise à l’échelle du quantiseur à partir du niveau de segment du flux de bits, tel que spécifié dans la spécification de codage vidéo particulière (allant de 1 à 31 pour H.261, H.262/MPEG-2, H.263, MPEG-1 et MPEG-4).

wBadSliceChopping

Spécifie l’emplacement des données dans une tranche pour une mémoire tampon de données de flux de bits correspondante. Si la valeur est égale à zéro, indique que tous les bits de la tranche se trouvent dans la mémoire tampon de données de flux de bits. Si ce n’est pas zéro, indique quelle partie des bits de la tranche sont manquants dans la mémoire tampon de données de flux de bits correspondante, comme suit.

Valeur Description
1 Les bits pour le début de la tranche se trouvent dans la mémoire tampon de données de flux de bits correspondante, et les bits pour la fin de la tranche ne le sont pas (car la mémoire tampon de données de flux de bits est pleine).
2 Les bits pour le début de la tranche ne se trouvent pas dans la mémoire tampon de données de flux de bits correspondante (car la mémoire tampon de données de flux de bits précédente était pleine), mais les bits de la fin de la tranche se trouvent dans la mémoire tampon de données de flux de bits correspondante.
3 Les bits pour le début de la tranche ne se trouvent pas dans la mémoire tampon de données de flux de bits correspondante (car la mémoire tampon de données de flux de bits précédente était pleine), et les bits de la fin de la tranche ne se trouvent pas non plus dans la mémoire tampon de données de flux de bits correspondante (car la mémoire tampon de données de flux de bits correspondante est également pleine).

[! REMARQUES] Les valeurs non nulles de wBadSliceChopping doivent généralement être évitées par le décodeur du logiciel hôte.

Remarques

Des mémoires tampons de contrôle de tranche sont fournies pour guider l’opération du traitement du flux de bits VLD hors hôte. Les mémoires tampons de contrôle de tranche sont envoyées uniquement lorsque le membre bConfigBitstreamRaw de DXVA_ConfigPictureDecode est 1. Le décodeur logiciel hôte doit déterminer l’emplacement des points de resynchronisation au niveau de la tranche dans le flux de bits. Une tranche est définie comme une couche multimacroblock qui inclut un point de resynchronisation dans les données de flux de bits.

Dans les flux de bits H.261, un goB est considéré comme un segment. Dans les flux de bits H.263, une séquence d’un ou plusieurs GOB commençant par un code de démarrage GOB et ne contenant aucun code de début goB supplémentaire, est considérée comme une tranche. Une mémoire tampon de contrôle de tranche doit contenir une ou plusieurs structures DXVA_SliceInfo, en fonction du contenu d’une mémoire tampon de données de flux de bits correspondante.

Configuration requise

Condition requise Valeur
En-tête dxva.h (inclure Dxva.h)

Voir aussi

DXVA_ConfigPictureDecode