Gestion de Stride dans les codecs AVStream
Lorsqu’un décodeur est connecté à un convertisseur comme le convertisseur vidéo amélioré (EVR) ou à un composant qui prend en charge Direct3D, le minidriver reçoit des mémoires tampons D3D au lieu des mémoires tampons système.
Contrairement aux mémoires tampons système, qui doivent être copiées sur une surface D3D avant le rendu, les mémoires tampons D3D peuvent être affichées directement par le moteur de rendu. Par conséquent, en utilisant des mémoires tampons D3D plutôt que des mémoires tampons système, le minidriver enregistre une opération de copie pour chaque mémoire tampon.
Lorsqu’un minidriver compatible AVEC SHED reçoit des mémoires tampons D3D, la surface D3D est verrouillée et un pointeur vers celle-ci se trouve dans KSSTREAM_HEADER. Données. Les informations de foulée de surface sont fournies dans l’extension KS_FRAME_INFO à KSSTREAM_HEADER, comme illustré dans l’exemple de code suivant :
typedef struct KS_FRAME_INFO {
ULONG ExtendedHeaderSize; // Size of this extended header
DWORD dwFrameFlags; // Field1, Field2, or Frame
LONGLONG PictureNumber;
LONGLONG DropCount;
// The following are only set when you use OverlayMixer
HANDLE hDirectDraw; // user mode DDraw handle
HANDLE hSurfaceHandle; // user mode surface handle
RECT DirectDrawRect; // portion of surface locked
union {
LONG lSurfacePitch; // Contains surface pitch a.k.a stride
DWORD Reserved1;
};
// Reserved fields, never reference these
DWORD Reserved2;
DWORD Reserved3;
DWORD Reserved4;
} KS_FRAME_INFO, *PKS_FRAME_INFO;
Les minidrivers doivent utiliser le membre biWidth de la structure KS_BITMAPINFOHEADER comme largeur de surface.
(KS_VIDEOINFOHEADER. bmiHeader est de type KS_BITMAPINFOHEADER. KS_DATARANGE_VIDEO. VideoInfoHeader est de type KS_VIDEOINFOHEADER.)
Si KS_FRAME_INFO. lSurfacePitch a une valeur différente de zéro. Le minidriver doit utiliser lSurfacePitch comme largeur/foulée pour la mémoire tampon spécifiée dans le KSSTREAM_HEADER associé. Dans le cas contraire, l’image de sortie apparaît en état de tronquée.