Einzelnen Beitrag anzeigen

Peter666

Registriert seit: 11. Aug 2007
339 Beiträge
 
#1

VMR9 Allocator/Presenter unter Firemonkey

  Alt 26. Jan 2021, 13:58
Hi,

beim Lesen der FMX.Media.Win ist mir aufgefallen, dass die Kameraklasse zwar einen VMR9 Allocator/Presenter nutzt, damit man die Bilddaten als Bitmap erhält, aber die TWindowsMedia Klasse nicht. Also dachte ich mir probierst du doch mal den Allocator/Presenter in einem normalen Videographen zu verwenden.

Delphi-Quellcode:
function GetPin(const Filter: IBaseFilter; out Pin: IPin; Dir:
  TPinDirection = PINDIR_INPUT): Boolean;
var
  EPins: IEnumPins;
  pPin: IPin;
  f: Int64;
  d: TPinDirection;
begin
  result := false;
  Pin := nil;
  if not assigned(Filter) then
    exit;
  if SUCCEEDED(Filter.EnumPins(EPins)) then
    while EPins.Next(1, pPin, @f) = S_OK do
      if SUCCEEDED(pPin.QueryDirection(d)) and (d = Dir) then
      begin
        Pin := pPin;
        result := true;
        break;
      end;
end;

procedure TForm3.LoadFromFile(const AFilename: String);
var
  Filter: IBaseFilter;
  Pin: IPin;
begin
  if FAILED(CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER,
    IID_IGraphBuilder, FGraphBuilder)) then
    exit;
   FGraphBuilder.QueryInterface(IID_IMediaControl, FMediaControl);

  FVMRRenderer := TVMRRenderer.Create;
  FVMRRenderer.SampleBufferReady := VMRRendererSampleReady;
  if SUCCEEDED(FGraphBuilder.AddSourceFilter(PChar(AFileName),'Source', Filter)) and
  (FVMRRenderer.AddToGraph(FGraphBuilder)) and
  (GetPin(Filter, Pin, PINDIR_OUTPUT)) and SUCCEEDED(FGraphBuilder.Render(Pin)) then
    FMediaControl.Run;
end;
Das oben stehende mein Testcode und erstaunlicherweise geht der nicht. Sobald MediaControl.Run ausgeführt wird gibt es irgendwo eine Exception. Hat sich damit jemand schon mal beschäftigt? Ich hatte bis jetzt Alcinoe von Github als Player und da gehen nur iOS und Android.

Peter
  Mit Zitat antworten Zitat