Videobeispiele
Das Videobeispielobjekt ist eine spezielle Implementierung der IMFSample-Schnittstelle zur Verwendung mit dem Enhanced Video Renderer (EVR). Um eine instance dieses Objekts zu erstellen, rufen Sie die MFCreateVideoSampleFromSurface-Funktion auf. Die Funktion nimmt einen Zeiger auf eine Direct3D-Oberfläche und gibt einen Zeiger auf die IMFSample-Schnittstelle zurück. Die folgenden Objekttypen sollten Beispiele mithilfe dieser Funktion zuordnen:
Benutzerdefinierte EVR-Referenten. Ein Referent ordnet Videobeispiele zu und sendet sie an die IMFTransform::P rocessOutput-Methode des Mixers . Weitere Informationen finden Sie unter Schreiben eines EVR-Referenten.
Videodecoder, die die Videobeschleunigung unterstützen. Weitere Informationen finden Sie unter Unterstützen von DXVA 2.0 in Media Foundation.
Das Videobeispielobjekt implementiert die folgenden Schnittstellen:
Wenn der pUnkSurface-Parameter von MFCreateVideoSampleFromSurface ungleich NULL ist, enthält das resultierende Videobeispiel einen einzelnen Medienpuffer, der die Direct3D-Oberfläche kapselt. Dieses Pufferobjekt verfügt über eingeschränkte Funktionen:
Die IMFMediaBuffer::Lock-Methode des Puffers gibt E_NOTIMPL zurück.
Der Puffer implementiert die IMF2DBuffer-Schnittstelle nicht.
Die einzige Möglichkeit, über den Puffer auf die Oberfläche zuzugreifen, besteht darin, IMFGetService::GetService mit dem Dienstbezeichner MR_BUFFER_SERVICE aufzurufen.
Wenn der pUnkSurface-ParameterNULL ist, wird das Videobeispiel mit null Medienpuffern erstellt. Gehen Sie wie folgt vor, um dem Beispiel einen Puffer hinzuzufügen:
Erstellen Sie eine Direct3D-Oberfläche.
Erstellen Sie einen Oberflächenpuffer, indem Sie MFCreateDXSurfaceBuffer aufrufen. Weitere Informationen finden Sie unter DirectX Surface Buffer.
Fügen Sie dem Beispiel den Puffer hinzu, indem Sie IMFSample::AddBuffer aufrufen.
Verwenden Sie diesen Ansatz, wenn Sie benötigen, dass der Oberflächenspeicher über die IMF2DBuffer-Schnittstelle zugänglich ist.
Zugehörige Themen