[delphi] AVI info lezen

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Ik ben, mag ik wel zeggen, een zeer ervaren delphi-progger, maar nu loop ik toch op iets waar ik niet uit kom. Ik wil nml uit iedere gewenste AVI (xvid/divx in mijn geval, maar andere moeten ook kunnen) de afmetingen en duur (in seconden of whatever) van de film uitlezen.

Ik heb het al geprobeerd met de AVI*** API's, maar AVIOpenFile geeft gelijk al REGDB_E_CLASSNOTREG terug. Beetje vaag dus. De TMediaPlayer doet het beter, maar die crasht als ik Close aanroep (unknown exception, delphi knalt naar de disassembler):
Delphi:
1
2
3
4
5
6
7
8
MediaPlayer.Filename := edtAVIFile.Text;
MediaPlayer.Wait := True;
MediaPlayer.Open;
with MediaPlayer.DisplayRect do
   MovieWidth := Right - Left;
   MovieHeight := Bottom - Top;
end;
MediaPlayer.Close; // <-- Hier crasht ie dus.
Ik gebruik Delphi 5 Pro om dit alles te doen.

Kan iemand me verder helpen?

P.S. Voor dat dit stukje code crasht, bevatten MovieWidth en MovieHeight wel de juiste waarden, dus dat stuk werkt wel gewoon...

[ Voor 16% gewijzigd door _Thanatos_ op 10-03-2003 22:39 ]

日本!🎌


  • martijn_brinkers
  • Registratie: November 2001
  • Laatst online: 31-10-2025

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 08-06 11:02
http://www.wotsit.org/download.asp?f=avi
Dit is een link naar een word file met hoe avi in elkaar zit.
Moet je dus wel zelf de file openen en lezen dus waarschijnlijk iets meer werk dan zo'n controlding.
De structs staan in C/C++ notatie maar dat mag geen probleem geven denk ik.

Overigens is deze site erg interessant vind ik, staat er veel info op over fileformaten.

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Met de struct in dat Word bestandje en wat gevogel, ben ik eruit. hier de code om e.e.a. uit te lezen, voor de geïnteresseerden ;)

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
F := TFileStream.Create(edtAVIFile.Text, fmOpenRead or
                                         fmShareDenyNone);
try
  F.Seek(32, soFromBeginning);
  F.Read(MainAVIHeader, SizeOf(MainAVIHeader));
  with MainAVIHeader do
     MovieWidth := MainAVIHeader.dwWidth;
     MovieHeight := MainAVIHeader.dwHeight;
     Milliseconds := Round(dwTotalFrames / 1000 * dwMicroSecPerFrame);
  end;
  Hours := Milliseconds div 3600000;
  Milliseconds := Milliseconds mod 3600000;
  Minutes := Milliseconds div 60000;
  Milliseconds := Milliseconds mod 60000;
  Seconds := Milliseconds div 1000;
finally
  F.Free;
 end;
/edit
Berekening voor milliseconden vereenvoudigd.

[ Voor 21% gewijzigd door _Thanatos_ op 11-03-2003 20:37 . Reden: code vernaggelde layout beetje ]

日本!🎌


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 07-07 01:04

ZaZ

Tweakers abonnee

PiepPiep schreef op 10 March 2003 @ 23:29:
http://www.wotsit.org/download.asp?f=avi
Dit is een link naar een word file met hoe avi in elkaar zit.
Moet je dus wel zelf de file openen en lezen dus waarschijnlijk iets meer werk dan zo'n controlding.
De structs staan in C/C++ notatie maar dat mag geen probleem geven denk ik.

Overigens is deze site erg interessant vind ik, staat er veel info op over fileformaten.
offtopic:
Handige site!! Bedankt

Lekker op de bank