AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Interface aus Pointer oder: AVIs einlesen
Thema durchsuchen
Ansicht
Themen-Optionen

Interface aus Pointer oder: AVIs einlesen

Ein Thema von DGL-luke · begonnen am 23. Feb 2007 · letzter Beitrag vom 24. Feb 2007
 
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

Interface aus Pointer oder: AVIs einlesen

  Alt 23. Feb 2007, 21:36
Hallo,

ich mach hier gerade fremden Code flott... Ich hab mir von torry.net Compressed AVI Read/Write Units geladen.

Und da passiert folgendes:

Delphi-Quellcode:
//definitionen
pavis: PAVIStream = Pointer;

IAVIStream = interface(IUnknown)
 ...
end;

function AVIStreamEnd(pavi: IAVISTREAM): LONG;


Ending:=AVIStreamENd(pavis); //hier knallts
Ich habe den aufruf mal durch das hier ersetzt:

Ending:=AVIStreamEnd(IAVIStream(pavis^)); Und habe jetzt folgenden Code:

Delphi-Quellcode:
procedure TForm2.BOpenAVIClick(Sender: TObject);
begin
  with TOpenDialog.Create(nil) do
  try
    Filter := 'Audio/Video Interlaced File (*.avi)|*.avi';
    if Execute then
    begin
      MainAVI.Start := 0;
      MainAVI.Ending := 1;
      MainAVI.Open(FIleName);
    end;
  finally
    Free;
  end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  GetMem(Buffer, 1024); //nur mal auf Verdacht alloziiert, wegen der AV, ändert aber nix - Buffer: Pointer, als Form-Member deklariert.
  MainAVI := TAVIReader.Create(Buffer);
end;
Was allerdings sehr merkwürdig ist:

Delphi-Quellcode:
function TAVIReader.Open(AFileName: String): integer;
begin
  FileName := AFileName;
  result := AVIFileOpen(pavi, Pchar(Filename), OF_READ, nil);
  AVIFILEGetStream(pavi,pavis,streamtypeVIDEO,0); //hier
  Start:=AVIStreamStart(pavis);
  Ending:=AVIStreamEnd(IAVIStream(pavis^));
  ob:=AVIStreamGetFrameOpen(pavis,nil);
  AVIStreamBeginStreaming(pavis,Start,Ending,1000);
// DrawDIBStart(han,microsperframe); //nicht von mir auskommentiert
end;
Wenn ich diese Funktion durchsteppe (Ich hab extra schon die optimierung ausgeschaltet), zeigt er mir, wenn ich bei "//hier" bin und auf "Eins weiter" klicke, das "end;" als nächste Anweisung - er überspringt mir also 4 Programmzeilen...

Das ganze kracht dann mit einer Read bei 0 AV in "AVIFil32.dll" (eine Systemdll, glaub ich, das PSDK gibt mir auch Auskunft über die Funktionen, die exportiert werden), nach kompletten durchsteppen (also nach dem end meines Buttonclickhandlers)

Also:

1. kann mir wer helfen
2. hat jemand ne andere freie AVI-Read/Write-Kompo da?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
 


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 19:46 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