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)

Weitere Informationen

KSSTREAM_HEADER