Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   DVD Navigator und VMR9 Allocator (https://www.delphipraxis.net/181112-dvd-navigator-und-vmr9-allocator.html)

SonnyBoyPro 16. Jul 2014 19:28

DVD Navigator und VMR9 Allocator
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
da ich im Netz keinen Hinweis darauf bekommen habe (oder falsch gesucht habe :idea:), 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
Delphi-Quellcode:
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 :pale:

lbccaleb 16. Jul 2014 20:43

AW: DVD Navigator und VMR9 Allocator
 
Was genau ist die Frage?

SonnyBoyPro 16. Jul 2014 21:41

AW: DVD Navigator und VMR9 Allocator
 
Die Frage müsste lauten:

Warum wird bei Verwendung eines VMR9 Allocator bei DVD-Wiedergabe das Bild nicht angezeigt, bei einfachen Video-Dateien aber schon?

bg

PS: ansonsten den Thread in Tipps und Tricks verschieben

SonnyBoyPro 16. Jul 2014 21:57

AW: DVD Navigator und VMR9 Allocator
 
bzw, vielleicht in Frage umformuliert:

warum ist das so das die Initialisierung zweimal aufgerufen wird? Gibt es einen Grund dafür. Die MSDN schweigt ja dazu.

bg


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz