Page 1 sur 2

MovieStatus()=0

Publié : lun. 13/déc./2004 22:09
par Pingtix
Quand je lis une video, la commande MovieStatus() me retourne toujours 0.
Pourtant avec la démo je n'avais pas ce problème, que dois-je faire ?

Publié : lun. 13/déc./2004 22:22
par Chris
Exact, il y a un bug!

FREEEEEEEEEDDDD!!!!! :lol:

Publié : mar. 14/déc./2004 8:21
par Chris
Ben non, pas de bug :lol:

Vérifie que ta boucle contient WindowEvent(), et pas WaitWindowEvent()

Code : Tout sélectionner

;/Constantes Window
Enumeration
  #Window_0
EndEnumeration

If InitMovie() = 0
  End
EndIf

Movie$  = OpenFileRequester("Sélectionner une vidéo","","Fichiers vidéo (avi, wmv,mpg)|*.avi;*.wmv;*.mpg",0)
If Movie$ : LoadMovie(0,Movie$) : Else : End : EndIf

If OpenWindow(#Window_0, 300, 300, 100, 100, #PB_Window_SystemMenu, "Fenêtre 1",0)
  ResizeWindow(MovieWidth(),MovieHeight())
  
  Repeat
    Etat = MovieStatus() : SetWindowTitle(#Window_0, Str(Etat)+ " : ''Return'' = Start/Stop : ''P'' = Pause/Resume")
    
  Select WindowEvent() ;<---- et non WaitWindowEvent()...
      Case #WM_KEYDOWN
        Select EventwParam()
          Case #VK_P
            If Etat = -1
              ResumeMovie()
            ElseIf Etat > 0
              PauseMovie()
            EndIf
            
          Case #VK_RETURN
            If Etat > 0
               StopMovie()
            ElseIf Etat = 0
              PlayMovie(0, WindowID(#Window_0))
            EndIf
        EndSelect
        
      Case #PB_EventCloseWindow
        FreeMovie(0) : quit = #True
    EndSelect
  Until quit
  End
EndIf
Perso, j'aime pas trop cette méthode qui consiste à tester l'état de la vidéo directement dans la boucle, mais bon...!
Je préfère mettre ça dans une procédure dédiée a un Timer.

Publié : mar. 14/déc./2004 10:19
par Fred
Quand on utilise WindowEvent(), surtout ne pas oublier Delay(20) au cas ou WindowEvent() retourne 0 sinon on bouffe tout le temps processeur.

Publié : mar. 14/déc./2004 10:54
par Backup
Quand on utilise WindowEvent(), surtout ne pas oublier Delay(20)
pourquoi je constate chez moi que delay(1) suffit (pas 20) ??

Publié : mar. 14/déc./2004 11:54
par Fred
parce que delay(1) est deja amplement suffisant (1 ms est enorme pour un processeur). Surtout que le temps de latence entre les processes sous windows est de l'ordre de 20 ms (d'apres mes vieux souvenirs).

Publié : mar. 14/déc./2004 12:09
par Chris
Ca marche bien, j'ai testé sur mon début de lecteur Mci, je passe de 100% de temps CPU à +- 12%
http://purebasic.hmt-forum.com/viewtopic.php?t=1984

Par contre, la fenêtre avec les commandes est beaucoup plus longue à ouvrir avec 20 ms, et même avec 1 ms, on voit nettement le temps d'attente entre l'affichage de la fenêtre, et celui des gadgets.

Le delay(), il faut bien le mettre dans le boucle des évènements, tout de suite après le Repeat, ou à la fin, juste avant Until.

C'est bien ça?

Publié : mar. 14/déc./2004 12:31
par Fred
Pour la position du delay, voir ma reponse sur l'autre thread :)

Publié : mar. 14/déc./2004 12:32
par Pingtix
Euh, Chris, sur ton programe aussi, ca reste à 0

Publié : mar. 14/déc./2004 12:39
par Chris
Ta as appuyé sur "Enter", pour lancer la lecture???

Publié : mar. 14/déc./2004 12:44
par Pingtix
Oui, mais ca reste a 0.
J'ai resté de compiler le programme sur le PC de mon frere (suffit de pas lui dire ^^) et là, ca marche...
Je me demande si ça n'est pas un problème de codec.

Publié : mar. 14/déc./2004 12:46
par Chris
Bizarre ça! 8O

Tu est sûr d'avoir les codecs pour lire le film que tu veux ouvrir.
Sinon, je ne vois pas!

Publié : mar. 14/déc./2004 12:47
par Pingtix
Oui, je n'ai jamais eu de problème.

Publié : mar. 14/déc./2004 12:52
par Chris
Alors, je ne vois pas ce qu'il y a de spécial dans ton PC.

Pique celui de ton frère, il s'en apercevra peut-être pas :lol:

Publié : mar. 14/déc./2004 13:03
par Pingtix
Je pense que ca vient des codecs que j'ai installés, car j'ai installé un pack de codecs sur mon PC et lui non. Le probleme c'est que si je l'enleve je ne peux plus rien lire....