2017-04-14 5 views
0

Ich benutze Source Reader, um Video Samples aus einer Videodatei zu lesen, und dekodiere sie mit Decoder, dann render ich diese Samples mit DirectX9.Abrufen von ID2D1DeviceContext von IDirect3DDevice9

Ich verwende IDirect3DDevice9 zum Rendern von Video-Frames, und es funktioniert wie erwartet.

Jetzt habe ich in Chroma-Key-Effekt hinzufügen möchten, eine wie in unten beschrieben:

https://msdn.microsoft.com/en-us/library/windows/desktop/dn890715(v=vs.85).aspx

Also wie bekomme ich ID2D1DeviceContext von IDirect3DDevice9 und dann Chorma-Key-Effekt, um es hinzuzufügen und dann machen der Videorahmen?

+0

Chromay Schlüssel kann Shader erfolgen mit direkt auf dem IDirect3DDevice9. Wenn Sie interessant sind, habe ich es bereits mit guten Ergebnissen gemacht. – mofo77

Antwort

3

ID2D1DeviceContext erfordert DirectX11-Gerät und kann nicht mit veraltetem IDirect3DDevice9 verwendet werden. Normalerweise erstellen Sie Objekte in der folgenden Reihenfolge: DXGI Factory, D2D1 Factory, D3D11 Device, DXGI Device, D2D1 Device und schließlich D2D1 Device Context. Vielleicht möchten Sie überprüfen D2D getting starting guide and samples.

Es gibt keinen wirklichen Punkt mehr im Umgang mit DirectX9, es sei denn, Sie sind gezwungen, Abwärtskompatibilität für Windows XP bereitzustellen. Chroma-Key-Probe Sie auf dem Laufenden erfordert Windows 10.

+0

Also meinst du, ich brauche DirectX11 und nicht DirectX9. Derzeit habe ich Beispielcode erstellt, der DirectX9-API zum Rendern von Videoframes verwendet. Also muss ich diesen Code durch DirectX11-APIs ersetzen. Gibt es einen Beispielcode, der Samples aus einer Videodatei lesen und dann mit DirectX11-APIs anzeigen kann? Grundsätzlich möchte ich einen Chroma-Key-Effekt auf einen Videostream anwenden, der das mitgelieferte Sample verwendet. – User7723337

+0

Ja, Sie müssen DirectX11 (oder DirectX10) API verwenden. Konvertiere deinen Code in einen Speicherrahmen in ID3D11Texture2D, entpacke dann IDXGISurface daraus, dann ID2D1Bitmap1 von der DXGI Oberfläche und verwende dann diese D2D Bitmap als Renderziel deiner D2D Zeichnung/Filter. Ein Beispielcode kann auf der Seite gefunden werden, die ich vorher gepostet habe. – VTT

0

So wie ich ID2D1DeviceContext von IDirect3DDevice9 bekommen ...

Sie nicht das eine vom anderen bekommen. Die Schnittstellen gehören zu verschiedenen APIs, wenn Sie Media Foundation mit Direct3D 9 zur Dekodierung verwenden, wird Direct2D (wo ID2D1DeviceContext gehört) nirgendwo dort verwendet.

Am nächsten zu Ihrer Anfrage ist die Verwendung der Interoperabilität zwischen den APIs. Eine Einführung finden Sie unter Direct2D and Direct3D Interoperability Overview und beachten Sie die dort genannten Direct3D-Versionen.

Siehe auch: Surface Sharing Between Windows Graphics APIs. Das Bild unten zeigt, dass neuere APIs über DXGI zusammenarbeiten, nicht so alt wie Direct3D 9. Siehe auch die folgenden Kommentare für einen frischeren MSDN-Link.

+0

Ich muss den Chroma-Key-Effekt auf die Video-Frames hinzufügen, die mit dem Quell-Reader gelesen werden. Und ich habe diese APIs gefunden, die von der MS für Chroma-Key zur Verfügung gestellt wurden, also habe ich versucht, 'ID2D1DeviceContext' zu bekommen. Also, wenn ich APIs verwenden muss, die von MS für Chroma-Key geprüft werden, welchen Ansatz muss ich folgen. – User7723337

+0

@Roman R. Beachten Sie, dass das von Ihnen gepostete Bild etwas veraltet ist. D2D kann mit DX11 gut funktionieren (aber nicht mit DX12). DXGI entwickelte sich zu Version 1.5 und so weiter ... – VTT

+0

Auch [MS Media Foundation kann mit DirectX11 ganz gut verwendet werden] (https://msdn.microsoft.com/en-us/library/windows/desktop/hh162912 (v = vs.85) .aspx). – VTT