[B3D] AVI (ohne Audio) abspielen
Übersicht

![]() |
EPSBetreff: [B3D] AVI (ohne Audio) abspielen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group