[B3D] AVI (ohne Audio) abspielen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

EPS

Betreff: [B3D] AVI (ohne Audio) abspielen

BeitragDo, Okt 23, 2008 8:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Dies ist meine kleine AVI Library für Blitz3D. Achtung: Geht wirklich nur in B3D da die ImageBuffer direkt manipuliert werden. Für B+ muß eventuell etwas angepasst werden. Entwickelt und getestet mit B3D v1.98.

- Spielt (normalerweise) sämtliche AVI Dateien ab deren Codec installiert ist.
- Das Videobild wird direkt in einem BlitzBasic Image dargestellt und kann wie dieses verwendet, manipuliert, positioniert und/oder verschoben etc. werden.
- Benötigt keine extra DLL. Die verwendeten Funktionen gehören standardmäßig zu Windows.
- Durch direkte Angabe des Frames kann man sich vor- und rückwärts beliebig durch ein Video bewegen.
- Anwendungsbeispiel ist dabei
- decls am Ende des Quellcodes

Verwendung auf eigenes Risiko, viel Spaß damit. Wer Verbeserungsvorschläge hat - nur her damit. Noch eine Information: Trotz größter Mühen war es mir nicht möglich Audio zu integrieren. Wenn das jemand schaffen würde wäre ich beeindruckt.

Code: [AUSKLAPPEN]
;================================================================================
; BBAVI - by East-Power-Soft (www.east-power-soft.de)
;
; BBAVI stellt Funktionen bereit um AVI Dateien abzuspielen. Es werden Videos mit
; 24- und 32-Bit Farbtiefe unterstützt. Das Video wird hierbei als ganz normales
; BB-Image behandelt und kann entsprechend positioniert und verändert werden.
;
; Da jeder Frame einzeln ausgewählt wird, kann man sich sowohl vor- wie auch
; rückwärts beliebig durch das Video bewegen. Da der gewünschte Frame also "von
; Hand" eingestellt wird, muß man beim normalen Abspielen die Geschwindigkeit->
; Framerate, selbst kontrollieren. Alle hierfür nötigen Funktionen sind vorhanden
; und das Beispiel erklärt die Funktionsweise.
;
; BlitzBasic ist leider nicht so schnell wie andere Sprachen. Trotzdem ist es mir
; gelungen die Funktionen soweit zu optimieren das selbst ein HD Video problemlos
; auf einem 2GHz Rechner abgespielt werden kann.
; Möchte man mehrere Videos gleichzeitig abspielen, sollten diese jedoch kleiner
; sein, da dies gewaltig an der Rechnerkapazität "zieht". Eine mögliche Hilfe
; hierbei könnte ein FrameServer wie AVISynth sein. Wird dieser zwischengeschal-
; tet, kann z.B. das vertikale Flippen des Videos durch den FrameServer erfolgen
; und muß nicht durch BlitzBasic erledigt werden - was enorm Performance spart.
; >>> AVI Videos stehen standardmäßig auf dem Kopf <<<
;
; Die Funktionen geben bei einem Fehler FALSE zurück. Genauere Fehlermeldungen
; werden durch den  Debugger ausgegeben. Eigene Fehlerroutinen kann jeder somit
; leicht selbst an den entsprechenden Stellen einbauen.
;
; bbavi benötigt DLL Dateien die jedoch zu Windows gehören und daher nicht extra
; mitgeliefert werden müssen: "kernel32.dll" und "avifil32.dll". Die decls Datei
; welche die nötigen Funktionsbeschreibungen zu deren Aufruf enthält findet sich
; u.a. am Ende des Quellcodes.
;================================================================================

Graphics 800,600,32,2

hImage = bbavi3_Open( "test.avi" )

FPS#  = bbavi3_GetRate( hImage )
NumF  = bbavi3_GetNumFrames( hImage )
Frame = -1

SetBuffer BackBuffer()
ClsColor 128,0,0

startms = MilliSecs()

Repeat

   Cls
   
   Text 0,0, "Skip mit Cursor rechts/links"
   
   framereal# = FPS# * ( MilliSecs() - startms )
   framereal# = framereal# / 1000

   ;--> Skip vorwärts 5%
   If KeyHit(205) Then Frame_Offset = Frame_Offset + NumF / 20
   ;--> Skip rückwärts 5%
   If KeyHit(203) Then Frame_Offset = Frame_Offset - NumF / 20

   ;--> Stelle aktuellen Frame ein
   If Frame <> Frame_Offset + Int( framereal# ) Then
      Frame = Frame_Offset + Int( framereal# )
      If Frame => NumF Or Frame < 0 Then
         Frame = 0: Frame_Offset = 0
      End If
      bbavi3_SetFrame( hImage, Frame )
      If Frame = 0 Then startms = MilliSecs()
   End If
   
   ;--> Stelle Bilder dar
   DrawBlock hImage,  20,  20
   Text 20,  20, Int(Frame)

   Delay 5
   Flip
   
Until KeyHit(1)

End



Function bbavi3_SetFrame( hImage, Frame )
;================================================================================
; Stellt den angegeben Frame im Bild ein. Ist der Framewert < 0 wird der Start-
; frame, Frame 0,  eingestellt. Ist der Framewert größer als die vorhandenen,
; wird der letzte Frame, bbavi3_GetNumFrames - 1, eingestellt.
;================================================================================

   Local i, j, k, y, pDIB, imageDIB, sizeDIB, lSize
   Local myAVI.bbavi
   Local AVISTREAMREAD_CONVENIENT = -1
   Local AVIERR_BUFFERTOOSMALL = $80044074
   Local AVIERR_MEMORY = $80044067
   Local AVIERR_FILEREAD = $8004406D
   
   ;--> Handle ermitteln
   myAVI = bbavi3_findmybbavi( hImage )

   ;--> Handle gefunden?
   If myAVI = Null Then Return False

   ;--> Frame kontrollieren
   If Frame => myAVI\numFrames Then Frame = myAVI\firstFrame - myAVI\numFrames - 1
   If Frame < 0 Then Frame = myAVI\firstFrame

   ;--> Pointer auf Frame holen
   pDIB = bbavi3_AVIStreamGetFrame( myAVI\pGetFrameObj, Frame )

   ;--> BitmapInfoHeader holen                     
   bbavi3_RtlMoveMemory( myAVI\BitmapInfoHeader, pDIB, 40 )
   myAVI\piBitCount = PeekShort( myAVI\BitmapInfoHeader, 14 ) / 8

   ;--> Speicherbank für Framedaten
   imageDIB = CreateBank( myAVI\dwWidth * myAVI\dwHeight * 4 + 40 )
   
   ;--> 16-Bit Video Auflösung
   If myAVI\piBitCount = 2 Then
      DebugLog "16-Bit Farbtiefe wird nicht unterstützt."
      Return False
   End If

   ;--> Übertrage und konvertiere 24-Bit Video Auflösung
   If myAVI\piBitCount = 3 Then
      sizeDIB = myAVI\dwWidth * myAVI\dwHeight * 3 + 40
      bbavi3_RtlMoveMemory( imageDIB, pDIB + 40, sizeDIB - 40 )
      For j = sizeDIB - 43 To 0 Step -3
         PokeInt(imageDIB,j/3*4,PeekInt(imageDIB,j) And $FFFFFF)
      Next
   End If

   ;--> Übertrage 32-Bit Video Auflösung
   If myAVI\piBitCount = 4 Then
      sizeDIB = myAVI\dwWidth * myAVI\dwHeight * 4
      bbavi3_RtlMoveMemory( imageDIB, pDIB + 40, sizeDIB - 40 )
   End If
   
   ;--> Flip vertikal
   If myAVI\vFlip Then
      For y = 0 To myAVI\dwHeight / 2 - 1
         j=y*myAVI\dwWidth*4
         k=((myAVI\dwHeight-1) - y ) * myAVI\dwWidth * 4
         CopyBank imageDIB, j, myAVI\DIBLine, 0, myAVI\dwWidth * 4
         CopyBank imageDIB, k, imageDIB, j, myAVI\dwWidth * 4
         CopyBank myAVI\DIBLine, 0, imageDIB, k, myAVI\dwWidth * 4
      Next
   End If
   
   ;--> kopiere Speicherbank in ImageBuffer
   If bbavi3_copybanktobuffer( imageDIB, ImageBuffer( myAVI\image ) ) = False Then
      DebugLog "Fehler beim Umkopieren der Daten."
   End If
   
   ;--> Bank freigeben, Ende
   FreeBank imageDIB

   ;--> READY
   Return True
   
End Function



Function bbavi3_GetRate#( hImage )
;================================================================================
; Gibt die Framerate des angegebenen Videos zurück, z.B. 25 für 25 FPS. Bei einem
; Fehler wird False zurück gegeben. Der Rückgabewert ist Float, d.h. bei einem
; Video im NTSC Format wird auch 23.976 als Framerate zurückgegeben.
;================================================================================
   
   Local myAVI.bbavi
   
   ;--> Handle ermitteln
   myAVI = bbavi3_findmybbavi( hImage )

   ;--> Handle gefunden?
   If myAVI = Null Then Return False

   ;--> Framerate zurückgeben
   Return myAVI\dwRate#
   
End Function



Function bbavi3_GetNumFrames( hImage )
;================================================================================
; Gibt die Anzahl Frames des angegebenen Videos zurück. Bei einem Fehler wird
; False zurück gegeben.
;================================================================================
   
   Local myAVI.bbavi
   
   ;--> Handle ermitteln
   myAVI = bbavi3_findmybbavi( hImage )

   ;--> Handle gefunden?
   If myAVI = Null Then Return False

   ;--> Frames zurückgeben
   Return myAVI\numFrames - myAVI\firstFrame
   
End Function



Function bbavi3_Open( szFile$, vflip = True )
;================================================================================
; Öffnet die angegebene Video Datei. Bei einem Fehler gibt die Funktion False,
; bei Erfolg einen ImageHandle zurück. Der ImageHandle entspricht einem ganz
; normalen BB-Image. Dieses kann überall abgebildet und positioniert werden.
; Mit ImageWidth() usw. kann auch die Größe in Erfahrung gebracht werden.
; Wird vFlip mit False angegeben, so wird kein vertikales Flippen des Bildes
; durchgeführt >>> AVI Videos stehen standardmäßig auf dem Kopf <<<
;================================================================================
   Local OF_SHARE_DENY_WRITE = $20
   Local AVIGETFRAMEF_BESTDISPLAYFMT = 1
   Local streamtypeVIDEO = 1935960438
   Local streamtypeAUDIO = 1935963489

   Local i, j, k, y, pDIB, imageDIB, sizeDIB

   Local myAVI.bbavi

   ;--> Existiert die Datei?
   If FileType( szFile$ ) = 1 Then

      ;--> Type anlegen
      myAVI = New bbavi

      myAVI\file$ = szFile$
      myAVI\vFlip = vflip
      
      ;--> Banken für Pointerübergabe
      myAVI\avi_file        = CreateBank(4)
      myAVI\avi_streamVideo = CreateBank(4)
      
      ;--> Strukturen (siehe Quelltextende)
      myAVI\avi_file_info        = CreateBank(108)
      myAVI\avi_streamVideo_info = CreateBank(144)
      myAVI\BitmapInfoHeader     = CreateBank(40)
   
      ;--> Init Library
      bbavi3_AVIFileInit()
   
      ;--> Datei öffnen
      If bbavi3_Err( bbavi3_AVIFileOpen( myAVI\avi_file, myAVI\file$, OF_SHARE_DENY_WRITE, 0) ) Then
         
         myAVI\pAVIFile = PeekInt( myAVI\avi_file, 0 )
         
         ;--> VIDEO
         DebugLog "VIDEO"
         DebugLog "-----"
         If bbavi3_Err( bbavi3_AVIFileGetStream( myAVI\pAVIFile , myAVI\avi_streamVideo, streamtypeVIDEO, 0 ) ) Then
   
            myAVI\pAVIStreamVideo = PeekInt( myAVI\avi_streamVideo, 0 )
            
            ;--> Startposition und Frameanzahl ermitteln
            myAVI\firstFrame = bbavi3_AVIStreamStart( myAVI\pAVIStreamVideo )
            myAVI\numFrames  = bbavi3_AVIStreamLength( myAVI\pAVIStreamVideo )
            
            MS_Time = bbavi3_AVIStreamSampleToTime( myAVI\pAVIStreamVideo, myAVI\numFrames )
            DebugLog "Time in ms: " + MS_Time
            
            SS = MS_Time / 1000
            
            MM = Int(SS / 60)
            SS = SS - (MM * 60)
            HH = Int(MM / 60)
            MM = MM - (HH * 60)
            DD = Int(HH / 24)
            HH = HH - (DD * 24)

            DebugLog "Clock (hh:mm:ss:ms): " + Right$("00"+Str$(HH),2) + ":" + Right$("00"+Str$(MM),2) + ":" + Right$("00"+Str$(SS),2) + ":" + MS_TIME Mod 1000
   
            DebugLog "Frames: " + myAVI\numFrames
   
            If myAVI\firstFrame <> -1 And myAVI\numFrames <> -1 Then
            
               ;--> Dateiinformationen holen
               If bbavi3_Err( bbavi3_AVIFileInfo( myAVI\pAVIFile, myAVI\avi_file_info, BankSize( myAVI\avi_file_info ) ) ) Then
   
                  ;--> Größe des Videos ermitteln
                  myAVI\dwWidth  = PeekInt( myAVI\avi_file_info, 20 )
                  myAVI\dwHeight = PeekInt( myAVI\avi_file_info, 24 )
               
                  ;--> Streaminformationen holen
                  If bbavi3_Err( bbavi3_AVIStreamInfo( myAVI\pAVIStreamVideo, myAVI\avi_streamVideo_info, BankSize( myAVI\avi_streamVideo_info ) ) ) Then
   
                     ;--> Abspielrate des Videos ermitteln ( dwRate / dwScale )
                     myAVI\dwRate# = Float( PeekInt( myAVI\avi_streamVideo_info, 24 ) ) / Float( PeekInt( myAVI\avi_streamVideo_info, 20 ) )
                     
                     DebugLog "FPS: " + myAVI\dwRate#
                     
                     ;--> Pointer auf Frame-Objekt holen
                     myAVI\pGetFrameObj = bbavi3_AVIStreamGetFrameOpen( myAVI\pAVIStreamVideo, AVIGETFRAMEF_BESTDISPLAYFMT )
                     
                     ;--> Erstelle image
                     myAVI\image = CreateImage( myAVI\dwWidth, myAVI\dwHeight )
                     
                     ;--> Erstelle Zeilenspeicher für Flippen
                     myAVI\DIBLine = CreateBank( myAVI\dwWidth * 4 )
                     
                     ;--> READY
                     DebugLog "OPEN........OK"
                     
                     ;--> Handle Rückgabe
                     Return myAVI\image

                  Else
                     DebugLog "Fehler beim Ermitteln der Streaminformationen."
                  End If
               Else
                  DebugLog "Fehler beim Ermitteln der Dateiinformationen."
               End If
            Else
               DebugLog "Fehler im Video Stream. Frameangaben fehlerhaft."
            End If
         Else
            DebugLog "Fehler beim Öffnen des Video Streams."
         End If
         
      Else
         DebugLog "Fehler beim Öffnen der Datei."
      End If
   Else
      DebugLog "Die Datei wurde nicht gefunden."
   End If

   ;--> Wurde schon ein Type erzeugt?
   If myAVI <> Null Then

      ;--> wenn noch nichtmal ein Bild angelegt, erzeuge Dummy für Close Aufruf
      If myAVI\image = 0 Then myAVI\image = CreateImage(10,10)

      ;--> lösche Type
      bbavi3_Close( myAVI\image )

   End If
   
   Return False

End Function

Function bbavi3_Close( hImage )
;================================================================================
; Video Datei schließen.
;================================================================================
   Local myAVI.bbavi
   
   ;--> Handle ermitteln
   myAVI = bbavi3_findmybbavi( hImage )

   ;--> Handle gefunden?
   If myAVI = Null Then Return False

   ;--> Ressourcen freigeben
   FreeImage myAVI\image
   
   If myAVI\pGetFrameObj    <> 0 Then bbavi3_AVIStreamGetFrameClose( myAVI\pGetFrameObj )
   If myAVI\pAVIStreamVideo <> 0 Then bbavi3_AVIStreamRelease( myAVI\pAVIStreamVideo )
   If myAVI\pAVIFile        <> 0 Then bbavi3_AVIFileRelease( myAVI\pAVIFile )

   ;--> Speicher freigeben
   If myAVI\BitmapInfoHeader     <> 0 Then FreeBank myAVI\BitmapInfoHeader
   If myAVI\DIBLine              <> 0 Then FreeBank myAVI\DIBLine
   If myAVI\avi_file             <> 0 Then FreeBank myAVI\avi_file
   If myAVI\avi_file_info        <> 0 Then FreeBank myAVI\avi_file_info
   If myAVI\avi_streamVideo_info <> 0 Then FreeBank myAVI\avi_streamVideo_info
   If myAVI\avi_streamVideo      <> 0 Then FreeBank myAVI\avi_streamVideo

   ;--> Type freiegeben
   Delete myAVI

   ;--> Exit Library
   bbavi3_AVIFileExit()

   ;--> alles ok
   Return True
   
End Function



Function bbavi3_findmybbavi.bbavi( hImage )
;================================================================================
; Findet das Type welches zum Image Handle gehört.
;================================================================================
   Local myAVI.bbavi

   For myAVI.bbavi = Each bbavi
      If myAVI\image = hImage Then Return myAVI
   Next

End Function




Function bbavi3_createbankfrombuffer( buffer = 0 )
;================================================================================
; Erstellt eine Speicherbank und kopiert den angegebenen Buffer hinein.
;================================================================================
   Local bnkInfo, size, bank

   If buffer = 0 Then Return False

   ;--> Wichtig !!!! Dies aktiviert die Image-Buffer
   LockBuffer buffer
   UnlockBuffer buffer

   bnkInfo = CreateBank(32)
   bbavi3_RtlMoveMemory bnkInfo, buffer + 72, 32
   size = PeekInt(bnkInfo, 20) * PeekInt(bnkInfo, 24) * PeekInt(bnkInfo, 28) / 8
   bank = CreateBank( size )
   
   If PeekInt(bnkInfo, 0) = 0 Then
      FreeBank bnkInfo
      Return False
   Else
      bbavi3_RtlMoveMemory bank, PeekInt(bnkInfo, 0), size
      FreeBank bnkInfo
      Return bank
   EndIf

End Function



Function bbavi3_copybanktobuffer( bank, buffer = 0 )
;================================================================================
; Kopiert die angegebene Speicherbank in den angegebenen Buffer.
;================================================================================
   Local bnkInfo, size, i, k, pBank, temp
   
   If buffer = 0 Then Return False
   
   ;--> Wichtig !!!! Dies aktiviert die Image-Buffer
   LockBuffer buffer
   UnlockBuffer buffer

   bnkInfo = CreateBank(32)
   bbavi3_RtlMoveMemory bnkInfo, buffer + 72, 32
   size = PeekInt(bnkInfo, 20) * PeekInt(bnkInfo, 24) * PeekInt(bnkInfo, 28) / 8

   ;--> Ermittle Pointer auf Bank
   temp = CreateBank(4)
   bbavi3_RtlMoveMemory(temp,bank+4,4)
   pBank = PeekInt(temp,0)

   If BankSize(bank) < size Or PeekInt(bnkInfo, 0) = 0 Then
      FreeBank temp
      FreeBank bnkInfo
      Return False
   Else
      ;--> Wenn Breite des Bildes ein vielfaches von 8 dann:
      If PeekInt(bnkInfo,20) / 8.0 = Int( PeekInt(bnkInfo,20) / 8.0 ) Then
         bbavi3_RtlCopyMemory(PeekInt(bnkInfo, 0), bank, size)
      Else
         ;--> andernfalls kopiere Zeile für Zeile
         size = PeekInt(bnkInfo, 20) * PeekInt(bnkInfo, 28) / 8
         For i = 0 To PeekInt(bnkInfo, 24) - 1
            k = Int( PeekInt(bnkInfo,20) / 8.0 ) * 8 + 8
            bbavi3_RtlMoveMemoryEx( PeekInt(bnkInfo, 0) + i * k * 4, pBank+i*size, size)
         Next
      End If
      FreeBank temp
      FreeBank bnkInfo
      Return True
   End If

End Function



Const AVIERR_OK             = $0
Const AVIERR_UNSUPPORTED    = $80044065; // MAKE_AVIERR(101)
Const AVIERR_BADFORMAT      = $80044066; // MAKE_AVIERR(102)
Const AVIERR_MEMORY         = $80044067; // MAKE_AVIERR(103)
Const AVIERR_INTERNAL       = $80044068; // MAKE_AVIERR(104)
Const AVIERR_BADFLAGS       = $80044069; // MAKE_AVIERR(105)
Const AVIERR_BADPARAM       = $8004406A; // MAKE_AVIERR(106)
Const AVIERR_BADSIZE        = $8004406B; // MAKE_AVIERR(107)
Const AVIERR_BADHANDLE      = $8004406C; // MAKE_AVIERR(108)
Const AVIERR_FILEREAD       = $8004406D; // MAKE_AVIERR(109)
Const AVIERR_FILEWRITE      = $8004406E; // MAKE_AVIERR(110)
Const AVIERR_FILEOPEN       = $8004406F; // MAKE_AVIERR(111)
Const AVIERR_COMPRESSOR     = $80044070; // MAKE_AVIERR(112)
Const AVIERR_NOCOMPRESSOR   = $80044071; // MAKE_AVIERR(113)
Const AVIERR_READONLY       = $80044072; // MAKE_AVIERR(114)
Const AVIERR_NODATA         = $80044073; // MAKE_AVIERR(115)
Const AVIERR_BUFFERTOOSMALL = $80044074; // MAKE_AVIERR(116)
Const AVIERR_CANTCOMPRESS   = $80044075; // MAKE_AVIERR(117)
Const AVIERR_USERABORT      = $800440C6; // MAKE_AVIERR(198)
Const AVIERR_ERROR          = $800440C7; // MAKE_AVIERR(199)


Function bbavi3_Err( err )

   Select err
      Case AVIERR_OK
         Return True
      Case AVIERR_UNSUPPORTED
         DebugLog "Fail UNSUPPORTED"
      Case AVIERR_BADFORMAT
         DebugLog "Fail BADFORMAT"
      Case AVIERR_MEMORY
         DebugLog "Fail MEMORY"
      Case AVIERR_INTERNAL
         DebugLog "Fail INTERNAL"
      Case AVIERR_BADFLAGS
         DebugLog "Fail BADFLAGS"
      Case AVIERR_BADPARAM
         DebugLog "Fail BADPARAM"
      Case AVIERR_BADSIZE
         DebugLog "Fail BADSIZE"
      Case AVIERR_BADHANDLE
         DebugLog "Fail BADHANDLE"
      Case AVIERR_FILEREAD
         DebugLog "Fail FILEREAD"
      Case AVIERR_FILEWRITE
         DebugLog "Fail FILEWRITE"
      Case AVIERR_FILEOPEN
         DebugLog "Fail FILEOPEN"
      Case AVIERR_COMPRESSOR
         DebugLog "Fail COMPRESSOR"
      Case AVIERR_NOCOMPRESSOR
         DebugLog "Fail NOCOMPRESSOR"
      Case AVIERR_READONLY
         DebugLog "Fail READONLY"
      Case AVIERR_NODATA
         DebugLog "Fail NODATA"
      Case AVIERR_BUFFERTOOSMALL
         DebugLog "Fail BUFFERTOOSMALL"
      Case AVIERR_CANTCOMPRESS
         DebugLog "Fail CANTCOMPRESS"
      Case AVIERR_USERABORT
         DebugLog "Fail USERABORT"
      Case AVIERR_ERROR
         DebugLog "Fail ERROR"
   End Select
   Return False

End Function


Type bbavi
   Field file$
   Field image
   Field vflip
   Field firstFrame
   Field numFrames
   Field dwWidth
   Field dwHeight
   Field dwRate#
   Field avi_file
   Field avi_streamVideo
   Field avi_file_info
   Field avi_streamVideo_info
   Field BitMapInfoHeader
   Field piBitcount
   Field BlockAlign
   Field Channels
   Field BitsPerSample
   Field AvgBytesPerSec
   Field pAVIFile
   Field pAVIStreamVideo
   Field pGetFrameObj
   Field DIBLine
   Field lpBuffer
   Field pointer
End Type

;--> avifileinfo structure 108 Bytes (http://msdn.microsoft.com/en-us/library/ms706413(VS.85).aspx)
;DWORD dwMaxBytesPerSec         0
;DWORD dwFlags               4
;DWORD dwCaps                  8
;DWORD dwStreams               12
;DWORD dwSuggestedBufferSize   16
;DWORD dwWidth               20
;DWORD dwHeight               24
;DWORD dwScale               28
;DWORD dwRate                  32
;DWORD dwLength               36
;DWORD dwEditCount            40
;TCHAR szFileType[64]         44

;--> avistreaminfo structure 144 Bytes (http://msdn.microsoft.com/en-us/library/ms706741(VS.85).aspx)
;DWORD fccType               0
;DWORD fccHandler               4
;DWORD dwFlags               8
;DWORD dwCaps                  12
;WORD  wPriority               16
;WORD  wLanguage               18
;DWORD dwScale               20
;DWORD dwRate                  24
;DWORD dwStart               28
;DWORD dwLength               32
;DWORD dwInitialFrames         36
;DWORD dwSuggestedBufferSize   40
;DWORD dwQuality               44
;DWORD dwSampleSize            48
;Rect  rcFrame               52
;DWORD dwEditCount            68
;DWORD dwFormatChangeCount      72
;TCHAR szName[64]               76

;--> bitmapinfoheader structure 40 Bytes (http://msdn.microsoft.com/en-us/library/ms532290.aspx)
;DWORD  biSize            0
;LONG   biWidth            4
;LONG   biHeight            8
;WORD   biPlanes            12
;WORD   biBitCount         14
;DWORD  biCompression      16
;DWORD  biSizeImage         20
;LONG   biXPelsPerMeter      24
;LONG   biYPelsPerMeter      28
;DWORD  biClrUsed            32
;DWORD  biClrImportant      36

;================================================================================
; DEI DECLS DATEI:
;================================================================================
;bbavi3 Wrapper (c)'2008 by East-Power-Soft (www.east-power-soft.de)
;================================================================================

;.lib " "
;bbavi3_Open%( File$, vFlip ) : ""
;bbavi3_SetFrame%( hImage%, Frame% ) : ""
;bbavi3_GetRate%( hImage% ) : ""
;bbavi3_GetNumFrames%( hImage% ) : ""

;.lib "kernel32.dll"
;bbavi3_RtlMoveMemory(Destination*,Source,Length) : "RtlMoveMemory"
;bbavi3_RtlCopyMemory(Destination,Source*,Length) : "RtlMoveMemory"
;bbavi3_RtlMoveMemoryEx(Destination,Source,Length) : "RtlMoveMemory"

;.lib "avifil32.dll"
;bbavi3_AVIFileInit%() : "AVIFileInit"
;bbavi3_AVIFileOpen%(ppfile*,szFile$,uMode%,lpHandler%) : "AVIFileOpen"
;bbavi3_AVIFileRelease%(pfile%) : "AVIFileRelease"
;bbavi3_AVIFileInfo%(pfile%,pfi*,lSize%) : "AVIFileInfo"
;bbavi3_AVIFileGetStream%(pfile%,ppavi*,fccType%,lParam%) : "AVIFileGetStream"
;bbavi3_AVIFileExit%() : "AVIFileExit"
;bbavi3_AVIFileCreateStream%(pfile%, ppavi*, psi*) : "AVIFileCreateStream"
;bbavi3_AVIStreamInfo%(pStream%,pfi*,lSize%) : "AVIStreamInfo"
;bbavi3_AVIStreamStart%(pavi%) : "AVIStreamStart"
;bbavi3_AVIStreamRelease%(pavi%) : "AVIStreamRelease"
;bbavi3_AVIStreamLength%(pavi%) : "AVIStreamLength"
;bbavi3_AVIStreamGetFrameOpen%(pavi%,lpbiWanted%) : "AVIStreamGetFrameOpen"
;bbavi3_AVIStreamGetFrame%(pFrame%,index%) : "AVIStreamGetFrame"
;bbavi3_AVIStreamGetFrameClose%(pFrame%) : "AVIStreamGetFrameClose"
;bbavi3_AVIStreamReadFormat%(pavi%, lPos%, lpFormat%, lpcbFormat*) : "AVIStreamReadFormat"
;bbavi3_AVIStreamSetFormat%(pavi%, lPos%, lpFormat*, cbFormat%) : "AVIStreamSetFormat"
;bbavi3_AVIStreamRead%(pavi%, lStart%, lSamples%, lpBuffer%, cbBuffer%, plBytes*, plSamples*) : "AVIStreamRead"
;bbavi3_AVIStreamWrite%(pavi%, lStart%, lSamples%, lpBuffer*, cbBuffer%, dwflags%, plSampWritten%, plBytesWritten%) : "AVIStreamWrite"
;bbavi3_AVIStreamSampleToTime(pavi%, lSample%) : "AVIStreamSampleToTime"
;bbavi3_AVISaveOptions%(hwnd%, uiFlags%, nStreams%, ppavi*, plpOptions*) : "AVISaveOptions"
;bbavi3_AVISaveOptionsFree%(nstreams%, plpOptions*) : "AVISaveOptionsFree"
;bbavi3_AVIMakeCompressedStream%(ppsCompressed*, psSource%, lpOptions%, pclsidHandler%) : "AVIMakeCompressedStream"
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group