Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Video über Andorra 2D TAdVideoPlayer (https://www.delphipraxis.net/144342-video-ueber-andorra-2d-tadvideoplayer.html)

NTcomputer_0 5. Dez 2009 19:44


Video über Andorra 2D TAdVideoPlayer
 
Ich habe grade angefangen, ein bisschen mit Andorra 2D zu programmieren, und schon gibts die ersten Probleme.
Ich habe in einer Unit eine Form, auf der nur ein TAdDraw liegt. Das initialisiere ich folgendermaßen:

Delphi-Quellcode:
  AdDraw:=TAdDraw.Create(self);
  AdDraw.DllName:='AndorraDX93D.dll';
  with AdDraw.Display do begin
    Width:=1280;
    Height:=1024;
    BitDepth:=ad32Bit;
    DisplayMode:=dmFullscreen;
  end;
 
  video_init;

  If AdDraw.Initialize Then begin
    drawframes.Enabled:=true;
  end else begin
    ShowMessage(AdDraw.GetLastError);
    halt;
  end;
Danach wird eine Funktion in einer anderen Unit aufgerufen, die dadrauf ein Video zeichnen (oder erstmal erstellen) soll:

Delphi-Quellcode:
function video_register(relpath:string;StopFunction:TStopFunction):integer;
var
  count:integer;
  pm:TMethodPointer;
begin
  pm.pMethod := @StopFunction;
  pm.pObject := nil;
  count:=Length(video_instances);
  SetLength(video_instances,count+1);
  with video_instances[count] do begin
    started:=false;
    AdPlayer:=TAdVideoPlayer.Create(FMain.AdDraw); //Hier kommt schon der Fehler!
    AdPlayer.Image.Texture.Filter:=atLinear;
    AdPlayer.Open(Fmain.apath+relpath);
    AdPlayer.Loop:=false;
    AdPlayer.onStop:=TAdNotifyEvent(pm);
    space:=(screen.Height-(screen.Width/AdPlayer.Image.Width*
      AdPlayer.Image.Height))/2;
  end;
  Result:=count;
end;
Und gleich beim Erzeugen des Video-Players bekomme ich eine Access-Violation. Hat jemand spontan eine Ahnung, woran das liegen könnte? Ich habe mir mal die Beispiele angeschaut, im Video-Player wird da eigentlich das gleiche gemacht, nur halt in der selben Unit. Wobei es daran nicht liegt, habe probeweise das Video in der Hauptunit direkt nach dem Erzeugen des AdDraws erstellt, es kommt genau der selbe Fehler.

Wäre über jede Hilfe dankbar!

igel457 5. Dez 2009 22:57

Re: Video über Andorra 2D TAdVideoPlayer
 
Ich schätze, dass du versuchst TAdVideoPlayer vor der Initialisierung des TAdDraw zu erzeugen. Wenn du erst TAdDraw.Initialize aufrufst sollte es klappen.

NTcomputer_0 6. Dez 2009 10:23

Re: Video über Andorra 2D TAdVideoPlayer
 
Sorry, das hatte ich vergessen zu erwähnen:
Das
Delphi-Quellcode:
  video_init;
dient nicht zum Erstellen des Video-Players, dadurch werden erstmal Arrays vorbereitet. Das ERstellen passiert erst nach dem Initialize des AdDraws:

Delphi-Quellcode:
  video_init;

  If AdDraw.Initialize Then begin
    drawframes.Enabled:=true;
  end else begin
    ShowMessage(AdDraw.GetLastError);
    halt;
  end;

  video_intro_1; // hier wird erst der Player erstellt
Delphi-Quellcode:
procedure video_intro_1;
begin
  video_intro_instances[1]:=video_register('..\videos\intro1.m1v',
    video_intro_1stop);
  video_start(video_intro_instances[1]);
end;
Daran liegt es also nicht!

NTcomputer_0 6. Dez 2009 12:51

Re: Video über Andorra 2D TAdVideoPlayer
 
Jetzt funktioniert es doch, wenn ich den VideoPlayer in der Hautpunit erstelle!?
Wieso geht es dann nicht in der anderen Unit, AdDraw habe ich als public erstellt..
HAt jemand eine Idee?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr.

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