Bugs bei RenderMovieFrame

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Bugs bei RenderMovieFrame

Beitrag von Sven »

Ich glaube ein paar Bugs gefunden zu haben, die mit Movie-Befehlen in Zusammenhang mit RenderMovieFrame auftauchen. Wenn ihr das bestätigen könnt, würde ich es im englischen Forum melden (wo eigentlich am besten?):

Code: Alles auswählen

;wenn ein Movie mit RenderMovieFrame auf ein Sprite gerendert wird,
;sind einige der Movie-Funktionen nicht verfügbar
;in der Hilfe ist das nicht erwähnt, soweit ich weiss
;der Fehler tritt auch bei PB3.9 auf

;if a movie is rendered with RenderMovieFrame on a sprite
;some of the Movie-functions are not available
;it's not mentioned in the help-file afaik
;the error occured at PB3.9 to

;MovieLength(0)         OK, returns the number of frames
;PauseMovie(0)          OK
;ResumeMovie(0)         OK
;StopMovie(0)           OK
;MovieSeek(0, 0)        failed, no influence
;MovieAudio(0, 100, 0)  failed, no change in volume
;MovieStatus(0))        failed, always returns 0 (stopped)

;tested with WinXP on 2 PCs, DirectX 9.0c, AVI and MPG-movies
;PB4b6 2006-03-11 Sven

;nice that #Movie is now in all functions, UseMovie no longer needed, thanks

If InitSprite() And InitMovie() And InitKeyboard() 
  ;file.s = "test.AVI"
  file.s = "test.mpg"

  sxw.w = 640  ;Screen-Size
  syw.w = 480
   
  If OpenWindow(0, 10, 10, sxw, syw, "Test") = 0
    End
  EndIf
  If OpenWindowedScreen(WindowID(0), 0, 0, sxw, syw, 0, 0, 0) = 0
    End
  EndIf
    
  If LoadMovie(0, file)
    Sprite.l = CreateSprite(0, sxw, syw) 
    If Sprite 
      ResizeMovie(0, 0, 0, sxw, syw) 
      PlayMovie(0, #PB_Movie_Rendered) 
      
      Debug "Length " + Str(MovieLength(0))
      
      Repeat 
        Delay(1) 
        
        RenderMovieFrame(0, Sprite) 
        DisplaySprite(0, 0, 0) 
        FlipBuffers() 
        
        ExamineKeyboard() 
        If KeyboardPushed(#PB_Key_P)  ;P to pause
          PauseMovie(0)
          Debug "Paused"
        EndIf
        If KeyboardPushed(#PB_Key_R)  ;R to resume
          ResumeMovie(0)
          Debug "Resumed"
        EndIf
        If KeyboardPushed(#PB_Key_Q)  ;Q to stop
          StopMovie(0)
          Debug "Stopped"
        EndIf
        If KeyboardPushed(#PB_Key_S)  ;S to jump to start
          MovieSeek(0, 0)
          Debug "Jump to start"
        EndIf
        If KeyboardPushed(#PB_Key_V)  ;V to set volume
          MovieAudio(0, 100, 0)
          Debug "Volume full"
        EndIf
        If KeyboardPushed(#PB_Key_M)  ;M to mute volume
          MovieAudio(0, 0, 0)
          Debug "Volume mute"
        EndIf
        If KeyboardPushed(#PB_Key_Space)  ;Space to get state (paused, stopped)
          Debug "State " + Str(MovieStatus(0))
        EndIf
      Until KeyboardPushed(#PB_Key_Escape) 
      
      FreeMovie(0)
    EndIf 
  EndIf 
EndIf

Code: Alles auswählen

;bei folgendem Code wird RenderMovieFrame nicht ausgeführt
;und FreeMovie führt zu "Invalid Memory Access", wenn
;die Screen-Größe verringert wird
;die Größe des Sprites ist dabei egal
;IsMovie bringt eine gültige ID <> 0
;der Fehler tritt auch bei PB3.9 auf

;in the following code RenderMovieFrame is not executet
;and FreeMovie leads to "Invalid Memory Access" if
;the screen size is decreased
;the size of the sprite has no effect
;IsMovie returns a valid ID <> 0
;the error occured at PB3.9 to

;tested with WinXP on 2 PCs, DirectX 9.0c
;PB4b6 2006-03-11 Sven
;200x150 dont work with 640x480 AVI
;320x240 dont work with 352x288 MPG

If InitSprite() And InitMovie() And InitKeyboard() 
  ;file.s = "test.AVI"
  file.s = "test.mpg"

  sxw.w = 320  ;400  ;200  ;Screen-Size, test this
  syw.w = 240  ;300  ;150
  
  txw.w = sxw  ;320  ;Sprite-Size
  tyw.w = syw  ;240
  
  If OpenWindow(0, 10, 10, sxw, syw, "Test") = 0
    End
  EndIf
  If OpenWindowedScreen(WindowID(0), 0, 0, sxw, syw, 0, 0, 0) = 0
    End
  EndIf
    
  If LoadMovie(0, file)
    Sprite.l = CreateSprite(0, txw, tyw) 
    If Sprite 
      ResizeMovie(0, 0, 0, txw, tyw) 
      PlayMovie(0, #PB_Movie_Rendered) 
      Debug IsMovie(0)
      
      Repeat 
        Delay(1) 
        
        RenderMovieFrame(0, Sprite) 
        DisplaySprite(0, 0, 0) 
        FlipBuffers() 
        
        ExamineKeyboard() 
      Until KeyboardPushed(#PB_Key_Escape) 
      
      Debug IsMovie(0)
      FreeMovie(0)
    EndIf 
  EndIf 
EndIf
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wenn der Fehler mit allen Movies auftritt, ist es ein Bug. Bei der Vielfalt an
Formaten ist ein Funktionieren mit allen nicht zu verwirklichen.

Teste erstmal mit einem anderen Movie, bevor Du einen Bug meldest.
Bugmeldungen sind immer am besten im engl. Forum angebracht!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

Ich habe es mit mehreren Movies getestet (AVI + MPG, verschiedene Größen). Wenn ich die gleichen Movies normal auf Screen / Window ausgebe, funktioniert es.

Sven
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

Ich habe beide Routinen nochmal mit den Movies getestet, die im DX9 SDK enthalten sind, die Fehler sind reproduzierbar. Bei direkter Ausgabe auf das Window funktioniert alles:

;file.s = "D:\Temp\Movie\CLOCKTXT.avi"
;file.s = "D:\Temp\Movie\highway.avi"
;file.s = "D:\Temp\Movie\ruby.avi"
;file.s = "D:\Temp\Movie\skiing.avi"
file.s = "D:\Temp\Movie\butterfly.mpg"
;file.s = "D:\Temp\Movie\lake.mpg"
;file.s = "D:\Temp\Movie\water.mpg"

Wenn keiner eine Idee hat, was ich falsch mache, werde ich es ins englische Forum stellen.

Sven
Antworten