Hallo zusammen,
da ich im Netz keinen Hinweis darauf bekommen habe (oder falsch gesucht habe
), hier nun eine kurz Info:
mit dem VMR9 Allocator und DirectX9Ex kann man ja sehr schön SharedResources generieren, die man dann z.B. unter
DirectX 11 verwenden kann. Hat bei File-Play auch sofort funktioniert. Nur bei DVD kam bei mir immer nur ein schwarzer Bildschirm (obwohl FilterGraph okay war und bei WindowMode die DVD abgespielt wurde).
Der Grund: die
function TAllocator.InitializeDevice(dwUserID: DWORD; lpAllocInfo: PVMR9AllocationInfo; var lpNumBuffers: DWORD): HResult; stdcall;
Funktion wird 2x aufgerufen, daher bekommt man also wieder ein anderes
Handle und muss die Texture neu erzeugen.
Hier mal kurzer Codeausschnitt
Delphi-Quellcode:
function TAllocator.InitializeDevice(dwUserID: DWORD; lpAllocInfo: PVMR9AllocationInfo;
var lpNumBuffers: DWORD): HResult;
stdcall;
....
VideoHandle := 0;
// create the private texture
hr:=FD3DDev.CreateTexture(lpAllocInfo.dwWidth, lpAllocInfo.dwHeight, 1, D3DUSAGE_RENDERTARGET, dm.Format, D3DPOOL_DEFAULT,
FVideoTexture, @VideoHandle);
{ in the case we got a new handle -> for VMR9 and DVD playback e.g. }
if Assigned (FNewHandle)
then
FNewHandle;
if hr<>S_OK
then
exit;
...
und
Delphi-Quellcode:
procedure TGUIWindowVideo.NewHandle;
var
lTextureD3D11: ID3D11Texture2D;
tempResource11: ID3D11Resource;
hr: Hresult;
begin
FOffscreenTexture := nil;
hr := FDeviceD11.OpenSharedResource(FFilterGraphDVD.Allocator.VideoHandle, ID3D11Resource, tempResource11);
tempResource11.QueryInterface(ID3D11Texture2D, lTextureD3D11);
tempResource11 := nil;
hr := FDeviceD11.CreateShaderResourceView(lTextureD3D11, nil, FOffscreenTexture);
end;
Das Ergebnis hängt dabei
Da ich als nächstes nun die DVD-Navigation einbauen werde, bin ich schon gespannt worauf ich noch alles komm