Einzelnen Beitrag anzeigen

Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#8

Re: DMO: DirectShow Media Player (Video und Audio wiedergabe

  Alt 30. Sep 2009, 10:23
Wenn die Interfaces mit
GraphBuilder.QueryInterface(IID_I*, *); verbunden werden, werden Pointer gesetzt, auch wenn die Interfaces nicht genutzt werden können. So ergibt die Abfrage
Delphi-Quellcode:
    // Kann die autstärke und Ballance geändert werden?
    if Assigned(BasicAudio) then
auch True, wenn kein Audio vorhanden ist. Dasselbe gilt für
Delphi-Quellcode:
    // Hat die Datei ein VideoStream?
    if Assigned(VideoWindow) then
Deshalb sollte jeweils eine weitere Abfrage erfolgen. Zum Beispiel
Delphi-Quellcode:
function IsAudio: Boolean;
var
  Int : Integer;
begin
  {
  *  HRESULT get_Volume(
  *  [out]  long *plVolume          Pointer to a variable that receives the volume.
  *  );
  }

  Result := Assigned(FBasicAudio) and
            not(Failed(FBasicAudio.get_Volume(Int)));
  {
  *  Results:
  *    E_NOTIMPL            The filter graph does not contain an audio renderer filter.
  *                          (Possibly the source does not contain an audio stream.)
  *    E_POINTER            Null pointer argument.
  *    S_OK                  Success.
  }

end;
http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

Delphi-Quellcode:
function IsVideo: Boolean;
var
  vis : longBool;
begin
  {
  *  HRESULT get_Visible(
  *    [out]  long *pVisible          Pointer to a variable that receives the
  *                                    value OATRUE if the window is visible, or
  *                                    OAFALSE if the window is hidden.
  *  );
  }

  Result := Assigned(FBasicVideo) and
            Assigned(FVideoWindow) and
            not(Failed(FVideoWindow.get_Visible(vis)));;
  {
  *  FBasicVideo ist auch verbunden, wenn kein Video vorhanden ist. Deshalb wird
  *  der Zustand des VideoWindow abgefragt. Die Abfrage ergibt nur Wahr, wenn
  *  Video vorhanden ist.
  *
  *  Results:
  *    E_POINTER                      NULL pointer.
  *    S_OK                            Success.
  *    VFW_E_NOT_CONNECTED            The video renderer filter is not connected.
  }

end;
http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat