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
Antwort Antwort
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
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Interface aus Pointer oder: AVIs einlesen

  Alt 23. Feb 2007, 22:52
Hallo,

Zitat von DGL-luke:
Was allerdings sehr merkwürdig ist:

...

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 heißt, dass in dieser Zeile eine Exception ausgelöst wurde, die der Debugger nicht genauer anzeigen kann (steckt ja in einer DLL), deshalb springt er direkt zu end;.
Zitat von DGL-luke:
1. kann mir wer helfen
2. hat jemand ne andere freie AVI-Read/Write-Kompo da?
Was hast Du denn vor? Diese Komponente ist ja auch schon vier Jahre alt und zeitgemäß ist VFW sicher nicht mehr (Stichwort DirectShow).

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

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

Re: Interface aus Pointer oder: AVIs einlesen

  Alt 24. Feb 2007, 10:07
Aha... so ist das zu erklären.

Was ich will:

- aus mehreren AVIs die einzelnen Frames extrahieren
- diese Frames manipulieren
- ein neues AVI mit meinen manipulierten Frames und dem Audiotrack aus dem ersten AVI speichern.
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
Antwort Antwort


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 23:53 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