AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi WindowHandle vom Aktiven Renderer

WindowHandle vom Aktiven Renderer

Ein Thema von EWeiss · begonnen am 13. Sep 2018 · letzter Beitrag vom 17. Sep 2018
Antwort Antwort
Seite 1 von 3  1 23   
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
5.845 Beiträge
 
Delphi 2010 Architect
 
#1

WindowHandle vom Aktiven Renderer

  Alt 13. Sep 2018, 15:27
Ich mache folgendes..

Delphi-Quellcode:
function TEVMRPlayer.GetWindowHandle: HWND;
var
  pPin: IPIN;
  VideoRenderer: IBaseFilter;
  Overlay: IOverlay;
  HR: HRESULT;
begin

  Result := 0;

  GraphBuilder.FindFilterByName(PWideChar(FVideoRenderer.VMRFilter), VideoRenderer);
  if Assigned(VideoRenderer) then
  begin
    HR := VideoRenderer.FindPin(nil, pPin);

    if (SUCCEEDED(HR)) then
    begin
      pPin.QueryInterface(IID_IOverlay, Overlay);
      Overlay.GetWindowHandle(Result);
    end;
  end;
end;
FVideoRenderer.FilterName ist in dem Fall "madVR"
VideoRenderer liefert einen Zeiger ist also nicht Nil.

aber trotzdem kracht es hier
VideoRenderer.FindPin(nil, pPin);

verstehe nicht warum.. jemand eine Idee?

gruss

Geändert von EWeiss (13. Sep 2018 um 15:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
2.180 Beiträge
 
Delphi 2010 Professional
 
#2

AW: WindowHandle vom Aktiven Renderer

  Alt 13. Sep 2018, 15:36
https://stackoverflow.com/questions/...he-id-returned

Ich hoffe das hilft Dir.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
5.845 Beiträge
 
Delphi 2010 Architect
 
#3

AW: WindowHandle vom Aktiven Renderer

  Alt 13. Sep 2018, 15:50
Leider nicht.
Andere Version.. das gleiche.

Delphi-Quellcode:
function TEVMRPlayer.GetWindowHandle: HWND;
var
  pPin: IPin;
  VideoRenderer: IBaseFilter;
  Overlay: IOverlay;
  HR: HRESULT;
begin

  Result := 0;
  pPin := nil;

// GraphBuilder.FindFilterByName(PWideChar(FVideoRenderer.VMRFilter), VideoRenderer);
// if Assigned(VideoRenderer) then
// begin
    HR := FVideoRenderer.VMRFilter.FindPin(nil, pPin);

    if (SUCCEEDED(HR)) then
    begin
      pPin.QueryInterface(IID_IOverlay, Overlay);
      Overlay.GetWindowHandle(Result);
    end;
// end;
end;
HR Fails bei EVRBaseFilter.. und kracht bei madVRFilter
Der sinn des ganzen ich benötige das WindowHandle des aktiven Rendere um ein Window drüberzulegen ohne jetzt extra ein zusätzliches Overlay zu generieren.

ERROR = "Ein Object oder Name wurde nicht gefunden."
madVRFilter ist valid.. Welches Object oder Name sollte dann da nicht gefunden werden?

gruss

Geändert von EWeiss (14. Sep 2018 um 07:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
5.845 Beiträge
 
Delphi 2010 Architect
 
#4

AW: WindowHandle vom Aktiven Renderer

  Alt 14. Sep 2018, 07:20
Hat sich erledigt.
Ein einfaches WindowFromPoint tut's auch.
Wollte es wieder mal zu professional machen.. na was soll's

Trotzdem seltsam das es nicht funktioniert hat.

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
1.862 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: WindowHandle vom Aktiven Renderer

  Alt 14. Sep 2018, 09:38
aber trotzdem kracht es hier
VideoRenderer.FindPin(nil, pPin); verstehe nicht warum.. jemand eine Idee?
Auch wenn für dich das Thema schon abgeschlossen ist, hier noch die Erklärung:
Die offizielle Dokumention sagt, dass der erste Parameter einen String(-Zeiger) enthalten muss, der den Pin identifiziert (https://docs.microsoft.com/en-us/win...filter-findpin).
Wenn du da jetzt nil übergibst, versucht die implementierende Methode FindPin auf den Speicherbereich zuzugreifen -> es kracht!

Im von Zwerg verlinkten SO-Beitrag ist ein Beispiel für das Enummerieren der Pins der übergebenen IBaseFilter-Instanz.
Baue dir einen ähnlichen Code mit ein und lasse dir per OutputDebugString ausgeben, wie die korrekten Namen sind.
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
5.845 Beiträge
 
Delphi 2010 Architect
 
#6

AW: WindowHandle vom Aktiven Renderer

  Alt 14. Sep 2018, 09:58
Zitat:
Baue dir einen ähnlichen Code mit ein und lasse dir per OutputDebugString ausgeben, wie die korrekten Namen sind.
Habe ich versucht und bekomme auch den Pin.
Nur es kracht trotzdem

Delphi-Quellcode:
function FindConnectedPin(pFilter: IBaseFilter; PinDir: PIN_DIRECTION; var ppPin: IPin): HRESULT;
var
  pEnum: IEnumPins;
  pPin: IPin;
  hr: HRESULT;
  bFound: BOOL;
  bIsConnected: BOOL;

begin
  ppPin := nil;

  pEnum := nil;
  pPin := nil;

  hr := pFilter.EnumPins(pEnum);
  if (FAILED(hr)) then
  begin
    result := hr;
    exit;
  end;

  bFound := FALSE;
  while (pEnum.Next(1, pPin, nil) = S_OK) do
  begin
    hr := IsPinConnected(pPin, bIsConnected);
    if (SUCCEEDED(hr)) then
    begin
      if (bIsConnected) then
        hr := IsPinDirection(pPin, PinDir, bFound);
    end;

    if (FAILED(hr)) then
    begin
      pPin := nil;
      break;
    end;
    if (bFound) then
    begin
      ppPin := pPin;
      break;
    end;

    pPin := nil;
  end;

  pEnum := nil;

  if (not bFound) then
    hr := VFW_E_NOT_FOUND;

  result := hr;
end;
FindConnectedPin(FVideoRenderer.VMRFilter, PINDIR_INPUT, pPin);

pPin.QueryInterface(IID_IOverlay, Overlay);
Overlay ist Nil trotz gefundenen Pin und dann kracht es natürlich. (wenn nicht abgesichert)

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
1.862 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: WindowHandle vom Aktiven Renderer

  Alt 14. Sep 2018, 10:19
pPin.QueryInterface(IID_IOverlay, Overlay);
Overlay ist Nil trotz gefundenen Pin und dann kracht es natürlich. (wenn nicht abgesichert)
Aufgrund welcher Quelle gehst du davon aus, dass die Instanz des Pins das IOverlay-Interface implementiert?
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
5.845 Beiträge
 
Delphi 2010 Architect
 
#8

AW: WindowHandle vom Aktiven Renderer

  Alt 14. Sep 2018, 10:35
pPin.QueryInterface(IID_IOverlay, Overlay);
Overlay ist Nil trotz gefundenen Pin und dann kracht es natürlich. (wenn nicht abgesichert)
Aufgrund welcher Quelle gehst du davon aus, dass die Instanz des Pins das IOverlay-Interface implementiert?
Davon das ich weis das MadVr es tut.
Sonst könnte ich ja kein Overlay in Fenster anzeigen oder liege ich da falsch?
Notfalls könnte ich das Overlay Interface bei der Initialisierung von Mad und den anderen Filtern noch hinzufügen.

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
1.862 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

AW: WindowHandle vom Aktiven Renderer

  Alt 14. Sep 2018, 10:41
pPin.QueryInterface(IID_IOverlay, Overlay);
Overlay ist Nil trotz gefundenen Pin und dann kracht es natürlich. (wenn nicht abgesichert)
Aufgrund welcher Quelle gehst du davon aus, dass die Instanz des Pins das IOverlay-Interface implementiert?
Davon das ich weis das MadVr es tut.
Sonst könnte ich ja kein Overlay in Fenster anzeigen oder liege ich da falsch?
Notfalls könnte ich das Overlay Interface bei der Initialisierung von Mad und den anderen Filtern noch hinzufügen.
Du könntest natürlich auch die Dokumentation der MSDN lesen:
https://docs.microsoft.com/en-us/win...trmif-ioverlay

In der Mitte des Textes (5. Absatz) findest du die Antwort auf die Frage:
"Wer implementiert das IOverlay und wem kann ich demzufolge per QueryInterface fragen?"

Spoiler: Es ist NICHT eine IPin-Instanz.
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
5.845 Beiträge
 
Delphi 2010 Architect
 
#10

AW: WindowHandle vom Aktiven Renderer

  Alt 14. Sep 2018, 10:43
pPin.QueryInterface(IID_IOverlay, Overlay);
Overlay ist Nil trotz gefundenen Pin und dann kracht es natürlich. (wenn nicht abgesichert)
Aufgrund welcher Quelle gehst du davon aus, dass die Instanz des Pins das IOverlay-Interface implementiert?
Davon das ich weis das MadVr es tut.
Sonst könnte ich ja kein Overlay in Fenster anzeigen oder liege ich da falsch?
Notfalls könnte ich das Overlay Interface bei der Initialisierung von Mad und den anderen Filtern noch hinzufügen.
Du könntest natürlich auch die Dokumentation der MSDN lesen:
https://docs.microsoft.com/en-us/win...trmif-ioverlay

In der Mitte des Textes (5. Absatz) findest du die Antwort auf die Frage:
"Wer implementiert das IOverlay und wem kann ich demzufolge per QueryInterface fragen?"

Spoiler: Es ist NICHT eine IPin-Instanz.
Ok werde ich mal tun.. Danke!

gruss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf