Video decodieren
Die Microsoft Direct3D-Runtime ruft die Funktionen DecodeBeginFrame und DecodeEndFrame des Benutzermodustreibers auf, um einen Zeitraum zwischen diesen Funktionsaufrufen anzugeben, in dem der Benutzermodusanzeigetreiber Video decodieren kann. Bevor der Benutzermodusanzeigetreiber Vorgänge zur Videodecodierung ausführen kann, muss die Microsoft Direct3D-Runtime die SetDecodeRenderTarget-Funktion des Benutzermodusanzeigetreibers aufrufen, um die Renderzieloberfläche für diese Decodierungsvorgänge festzulegen. Der Aufruf von SetDecodeRenderTarget kann jedoch nur außerhalb des Anfangs- und Endframezeitzeitraums erfolgen.
Im geschützten Modus und im Aufruf von DecodeBeginFrame legt oder ändert die Direct3D-Runtime einen DirectX VA-Inhaltsschlüssel in einer Variablen, auf die das pPVPSetKey-Mitglied der D3DDDIARG_DECODEBEGINFRAME-Struktur verweist. Das Decodierungsgerät verwendet diesen Schlüssel für geschützte Übertragungen der komprimierten DirectX VA-Puffer für diesen und nachfolgende Frames.
Hinweis Die Direct3D-Runtime legt den pPVPSetKey-Zeiger nur so fest, dass der Schlüssel geändert oder festgelegt wird. Damit der zuvor festgelegte Schlüssel weiterhin verwendet wird, legt die Runtime den Zeiger auf NULL fest, um ein potenziell zeitaufwändiges Erneutes Laden desselben Schlüssels zu vermeiden. Der Treiber beseitigt die redundanten Einstellungen nicht. Eine Decoderanwendung muss redundante Einstellungen vermeiden.
Nachdem die Renderzieloberfläche für Decodierungsvorgänge festgelegt wurde, kann der Benutzermodus-Anzeigetreiber Aufrufe seiner DecodeExecute-Funktion empfangen, um Videodecodierungsvorgänge zwischen dem Zeitraum des Anfangsframes und des Endframes auszuführen.
In Aufrufen von DecodeExecute werden nicht alle Puffertypen verwendet, die in den CompressedBufferType-Membern der DXVADDI_DECODEBUFFERDESC Strukturen des pCompressedBuffers-Arrays der D3DDDIARG_DECODEEXECUTE-Struktur für jede Decodierungs-GUID verwendet werden, die das hDecode-Member von D3DDDIARG_DECODEEXECUTE angibt. Beispielsweise sind die Slice-Control-Puffer (D3DDDIFMT_SLICECONTROLDATA), Inverse-Quantization (D3DDDIFMT_INVERSEQUANTIZATIONDATA) und Bitstream(D3DDDIFMT_BITSTREAMDATA) nur für die VLD-Verarbeitung (Variable-Length Decodierung) erforderlich, und der Deblocking-Control-Puffer (D3DDDIFMT_DEBLOCKINGDATA) wird von MPEG-2 überhaupt nicht verwendet.
Im geschützten Modus enthalten die Puffer, die für eine geschützte Übertragung mit einem Inhaltsschlüssel verschlüsselt wurden, einen Zeiger auf anfängliche Zählerwerte in ihren Pufferdeskriptoren (also in Variablen, auf die die pCipherCounter-Member des DXVADDI_DECODEBUFFERDESC-Strukturen verweisen). Jeder Aufruf der DecodeExecute-Funktion des Benutzermodusanzeigetreibers muss eine geschützte Übertragung dieser Puffer in den lokalen Videospeicher ausführen, bevor DecodeExecute die Daten der Puffer im Decodierungsvorgang verwendet. Es gibt jedoch keine Pläne zum Verschlüsseln von DirectX VA-komprimierten Puffern von anderen Typen als Restdifferenz (D3DDDIFMT_RESIDUALDIFFERENCEDATA) und Bitstreamtypen (D3DDDIFMT_BITSTREAMDATA).