KS_FRAME_INFO-Struktur (ksmedia.h)
Die KS_FRAME_INFO-Struktur erweitert die KSSTREAM_HEADER-Struktur für Videostreams.
Syntax
typedef struct tagKS_FRAME_INFO {
ULONG ExtendedHeaderSize;
DWORD dwFrameFlags;
LONGLONG PictureNumber;
LONGLONG DropCount;
HANDLE hDirectDraw;
HANDLE hSurfaceHandle;
RECT DirectDrawRect;
union {
LONG lSurfacePitch;
DWORD Reserved1;
};
DWORD Reserved2;
union {
struct {
DWORD Reserved3;
DWORD Reserved4;
};
ULONGLONG FrameCompletionNumber;
};
} KS_FRAME_INFO, *PKS_FRAME_INFO;
Member
ExtendedHeaderSize
Gibt die Größe dieser Struktur in Bytes an.
dwFrameFlags
Gibt Flags an, die zusätzliche Informationen zum erfassten Frame angeben. Während der Erfassung legt der Minidriver diesen Member auf einen der folgenden Werte fest, die in ksmedia.h definiert sind:
Flag | Bedeutung |
---|---|
KS_VIDEO_FLAG_FRAME | Gibt einen vollständigen Frame an. |
KS_VIDEO_FLAG_FIELD1 | Gibt Feld 1 einer Zweifeldsequenz an. |
KS_VIDEO_FLAG_FIELD2 | Gibt Feld 2 einer Zweifeldsequenz an. |
KS_VIDEO_FLAG_I_FRAME | Gibt an, dass dieser Frame vollständig decodiert werden kann, ohne auf andere Frames zu verweisen. |
KS_VIDEO_FLAG_P_FRAME | Gibt an, dass es sich um einen vorhergesagten Frame handelt. |
KS_VIDEO_FLAG_B_FRAME | Gibt an, dass es sich um einen bidirektionalen Frame handelt. |
PictureNumber
Gibt eine Anzahl an, die die aktuelle Bildnummer darstellt. Initialisieren oder aktualisieren Sie diesen Wert beim Übergang in KSSTATE_ACQUIRE.
DropCount
Gibt die Anzahl der Bilder an, die nicht erfasst wurden. Während der Aufnahme legt der Minidriver diesen Member fest. Dieser Zähler sollte immer dann erhöht werden, wenn ein Frame hätte erfasst werden sollen, aber nicht. Dieser Zustand tritt in der Regel auf, wenn während der Erfassung keine Puffer verfügbar waren. Initialisieren oder aktualisieren Sie diesen Wert beim Übergang in KSSTATE_ACQUIRE.
hDirectDraw
Gibt das Benutzermodushandle für DirectDraw an. Dieses Handle wird nur für den Minidriver bereitgestellt, wenn sie zu Vorschau- oder Überlagerungszwecken auf einer DirectDraw-Oberfläche erfasst wird.
hSurfaceHandle
Gibt das Benutzermodushandle für die DirectDraw-Oberfläche an. Dieses Handle wird nur für den Minidriver bereitgestellt, wenn sie zu Vorschau- oder Überlagerungszwecken auf einer DirectDraw-Oberfläche erfasst wird.
DirectDrawRect
Gibt den Teil der DirectDraw-Oberfläche an, der gesperrt wurde. Dies ist normalerweise die gesamte Oberfläche.
lSurfacePitch
Enthält den Oberflächenabstand (auch als Stride bezeichnet).
Reserved1
Reserviert und sollte nicht vom Minidriver verwendet werden.
Reserved2
Reserviert und sollte nicht vom Minidriver verwendet werden.
Reserved3
Reserviert und sollte nicht vom Minidriver verwendet werden.
Reserved4
Reserviert und sollte nicht vom Minidriver verwendet werden.
FrameCompletionNumber
Eine identifizierende Sequenznummer für den Frame in der abgeschlossenen Warteschlange. Diese Nummer wird verwendet, um die richtige Framereihenfolge zu überprüfen. Wenn dieser Wert 0 ist, wurde der Frame abgebrochen.
Dieses Mitglied ist ab Windows 8.1 verfügbar.
Hinweise
Die KS_FRAME_INFO-Struktur bietet eine Möglichkeit zum Zurückgeben von Informationen zum erfassten Frame sowie eine Möglichkeit, Microsoft DirectDraw-Handles, die beim Erfassen verwendet werden, an eine DirectDraw-Oberfläche zu übergeben.
Die PictureNumber-Memberanzahl stellt die Anzahl des aktuellen Bilds dar, die je nach Gerät auf eine von zwei Arten berechnet wird:
Messen Sie die Zeit seit dem Start des Streams, und dividieren Sie durch die Framedauer. Diese Methode eignet sich für Geräte, die keine eigene Uhr bereitstellen. Beispiel:
PictureNumber = ElapsedTime / FrameDuration;
Fügen Sie die Anzahl der erfassten Frames und die Anzahl der gelöschten Frames hinzu. Diese Methode eignet sich für Geräte, die eine eigene Uhr bereitstellen. Beispiel:
PictureNumber = FramesCaptured + FramesDropped;
Bei der Berechnung von PictureNumber und DropCount ist es wichtig, die beim Öffnen des Datenstroms angegebene Framedauer zu verwenden, die möglicherweise nicht unbedingt der Rate entspricht, mit der das Gerät tatsächlich Bilder erzeugt. Beispielsweise kann eine USB-Kamera nur Bilder mit 7,5 fps erzeugen, aber ein Client könnte den Stream mit 8 fps öffnen. In diesem Fall sollten alle Berechnungen die 8 fps-Zahl verwenden.
Weitere Informationen zum Aktualisieren von PictureNumber und DropCount finden Sie unter Videoaufnahme.
Anforderungen
Anforderung | Wert |
---|---|
Header | ksmedia.h (include Ksmedia.h) |