Freigeben über


Synchronisieren von Videodecodierungsvorgängen

Der Synchronisierungsmechanismus für DirectX VA 2.0 wurde gegenüber der Version 1.0 verbessert und ähnelt eher den Synchronisierungsmechanismen, die von Microsoft Direct3D-Vorgängen verwendet werden.

In DirectX VA 1.0 wird die Synchronisierung hauptsächlich vom Decoder ausgeführt. Bevor der Decoder einen komprimierten Puffer verwenden kann, ruft er die DdMoCompQueryStatus-Funktion auf, um zu bestimmen, ob der Puffer zur Verwendung verfügbar ist (d. h. die Hardware greift nicht auf den Puffer zu). Wenn der Puffer nicht verfügbar ist, muss der Decoder in den Ruhemodus versetzt, abfragen oder einen anderen Vorgang ausführen.

DirectX VA 2.0 verwendet das Synchronisierungsmodell, das Direct3D bereits für Vertexpuffer und Indexpuffer verwendet. In DirectX VA 2.0 wird die Synchronisierung durch den Decoder ausgeführt, der den komprimierten Puffer sperrt. Wenn der Benutzermodusanzeigetreiber versucht, den komprimierten Puffer zu sperren und der Puffer verwendet wird, kann der Treiber entweder die Sperre fehlschlagen oder den Puffer umbenennen. Der Benutzermodusanzeigetreiber fordert den Videospeicher-Manager auf, den Puffer umzubenennen, wenn der Treiber das Verwerfen-Element der D3DDDICB_LOCKFLAGS-Struktur in einem Aufruf der pfnLockCb-Funktion festlegt. Wenn der Benutzermodusanzeigetreiber den Puffer umbenannt, gibt der Treiber einen Zeiger auf einen alternativen Puffer zurück, damit der Decoder ohne Blockierung fortgesetzt werden kann.

Bei DirectX VA 2.0 ist die Synchronisierung in der Regel nur ein Problem, wenn die Hardware die komprimierten Puffer direkt ohne zusätzliche Pufferkopien nutzen kann.