Hallo,
ich benutze die "avifil32.dll" dll-Datei um AVI Dateien wiederzugeben. Leider finde ich keine Möglichkeit um eine AVI Datei aus dem Arbeitsspeicher (Windows) wiederzugeben. Kennt jemand eine Möglichkeit dazu?
Gruß Michael
Frage, AVI aus dem *Memory (Windows) ausgeben
- mpz
- Beiträge: 505
- Registriert: 14.06.2005 15:53
- Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
- Wohnort: Berlin, Tempelhof
Frage, AVI aus dem *Memory (Windows) ausgeben
Working on
- LibSGD - MP3D Engine - 


Re: Frage, AVI aus dem *Memory (Windows) ausgeben
Geht es dabei um Deine neue Erweiterung Videos auf Sprites? Wenn ja, bitte nicht in die
avifil32 API investieren, damit kann man nur VfW komplatible Videos abspielen. Besser
gleich auf DirectShow wechseln...
avifil32 API investieren, damit kann man nur VfW komplatible Videos abspielen. Besser
gleich auf DirectShow wechseln...
"Papa, ich laufe schneller - dann ist es nicht so weit."
- mpz
- Beiträge: 505
- Registriert: 14.06.2005 15:53
- Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
- Wohnort: Berlin, Tempelhof
Re: Frage, AVI aus dem *Memory (Windows) ausgeben
Hallo dige,
avifil32 ist sehr schnell bzw. läßt sich super einbinden. Ich habe das Gleiche mit der in PB eingebauten Movie Funktion probiert und bekomme nur 1/10 so viele Frames (hier mal der lahme testsource).
Gibt es denn mit DirectShow die Möglichkeit ein Movie aus dem Ram wiederzugeben?
Gruß Michael
avifil32 ist sehr schnell bzw. läßt sich super einbinden. Ich habe das Gleiche mit der in PB eingebauten Movie Funktion probiert und bekomme nur 1/10 so viele Frames (hier mal der lahme testsource).
Gibt es denn mit DirectShow die Möglichkeit ein Movie aus dem Ram wiederzugeben?
Gruß Michael
Code: Alles auswählen
Structure PB_StructureMovie
Movie.IGraphBuilder
MediaControl.IMediaControl
MediaEvent.IMediaEventEx
Window.IVideoWindow
Audio.IBasicAudio
Video.IBasicVideo
MediaSeeking.IMediaSeeking
state.l
EndStructure
Procedure MP_MovieToTexture(MovieNumber, Texture)
Protected *Movie.PB_StructureMovie, *Video.IBasicVideo, *Window.IVideoWindow
Protected *ImageData.BITMAPINFOHEADER, DataSize, Parent, Result
Protected hBmp, w, h, hdc
Protected bmi.BITMAPINFO
*Movie = IsMovie(MovieNumber)
*Window = *Movie\Window
*Video = *Movie\Video
alpha = 1
If alpha = 1
alpha = #D3DFMT_A8R8G8B8
Else
alpha = #D3DFMT_R8G8B8
EndIf
MipLevels = 1
If MipLevels < 0 Or MipLevels > 10
MipLevels = #D3DX_FROM_FILE
EndIf
ForEach TextureM() ; <- MP3D spezifisch, bzw texturstrukture...
If TextureM() = Texture
If *Video\GetCurrentImage(@DataSize, 0) = #S_OK
*ImageData = AllocateMemory(DataSize)
If *ImageData
; ProcedureReturn
If *Video\GetCurrentImage(@DataSize, *ImageData) = #S_OK
Width = MovieWidth(MovieNumber)
Height = MovieHeight(MovieNumber)
If D3DXCreateTextureFromFileInMemoryEx (*D3DDevice, *ImageData, DataSize, Width, Height, MipLevels, 0, alpha , #D3DPOOL_MANAGED, #D3DX_FILTER_TRIANGLE, #D3DX_DEFAULT, 0, 0, 0, @*D3DTexture.IDirect3DTexture9)= #D3D_OK
TextureM()\D3DTexture\Release()
TextureM()\D3DTexture = *D3DTexture
TextureM()\D3DTexture\GetLevelDesc(0,pDesc.D3DSURFACE_DESC)
TextureM()\Format = pDesc\format
TextureM()\width = pDesc\Width
TextureM()\height = pDesc\Height
FreeMemory(*ImageData)
ProcedureReturn TextureM()
Else
;FreeMemory(*bitmap)
error = 18
DeleteElement(TextureM())
ProcedureReturn #False
EndIf
EndIf
FreeMemory(*ImageData)
EndIf
EndIf
EndIf
Next
EndProcedure
#Movie = 0
MP_Graphics3D (640,480,0,3) ; Erstelle ein WindowsFenster mit 3D Funktion #Window = 0
SetWindowTitle(0, "3D Darstellung eine Würfels") ; Setzt einen Fensternamen
;Width = 100
;Height = 100
camera=MP_CreateCamera() ; Kamera erstellen
light=MP_CreateLight(1) ; Es werde Licht
Mesh=MP_CreateCube() ; Und jetzt eine Würfel
MP_PositionEntity (Mesh,0,0,3) ; Position des Würfels
If InitMovie()
FileName$ = OpenFileRequester("Choose Movie","","Movie Files|*.mpg;*.avi;*.mpeg|All Files|*.*", 0)
If LoadMovie(#Movie, FileName$)
Width = MovieWidth(MovieNumber)
Height = MovieHeight(MovieNumber)
Texture = MP_CreateTexture(Width,Height)
MP_MovieToTexture(#Movie,Texture)
MP_EntitySetTexture (Mesh, Texture)
EndIf
EndIf
Max = MovieLength(#Movie)
Debug max
Frame = 300
While Not MP_KeyDown(#PB_Key_Escape) And Not WindowEvent() = #PB_Event_CloseWindow; Esc abfrage oder Windows Schliessen
Frame + 1
If Frame > Max : Frame = -1 : EndIf
MovieSeek(#Movie, Frame)
MP_MovieToTexture(#Movie,Texture)
MP_DrawText (10,10,"FPS: "+Str(MP_FPS ()))
MP_TurnEntity (Mesh,0.1,0.1,0.1) ; dreh den Würfel
MP_RenderWorld() ; Erstelle die Welt
MP_Flip () ; Stelle Sie dar
Wend
Working on
- LibSGD - MP3D Engine - 


Re: Frage, AVI aus dem *Memory (Windows) ausgeben
Ich meinte eher das hier: http://www.purebasic.fr/german/viewtopi ... 73#p269873
(DshowMedia.pbi v1.3 tested with Purebasic v4.51, 2010 by Inc.)
(DshowMedia.pbi v1.3 tested with Purebasic v4.51, 2010 by Inc.)
"Papa, ich laufe schneller - dann ist es nicht so weit."
- mpz
- Beiträge: 505
- Registriert: 14.06.2005 15:53
- Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
- Wohnort: Berlin, Tempelhof
Re: Frage, AVI aus dem *Memory (Windows) ausgeben
Hi,
danke für den Tipp, aber bei directshow erhalte ich 16 FPS und bei AVIFIL32 schlappe 66 FPS. Da hilft auch nicht die tolle Kompatibiliät, bzw ist dann nicht einsetzbar...
Das Problem ist das das BIld auszulesen bei directshow zu lange Zeit kostet. Das in die DX9 Datei reinzuschieben ist vernachlässigbar...
Gruß Michael
danke für den Tipp, aber bei directshow erhalte ich 16 FPS und bei AVIFIL32 schlappe 66 FPS. Da hilft auch nicht die tolle Kompatibiliät, bzw ist dann nicht einsetzbar...
Das Problem ist das das BIld auszulesen bei directshow zu lange Zeit kostet. Das in die DX9 Datei reinzuschieben ist vernachlässigbar...

Gruß Michael
Working on
- LibSGD - MP3D Engine - 

