Video Playback via MCI sans Overlay

Programmation d'applications complexes
Niffo
Messages : 108
Inscription : dim. 29/août/2004 15:51

Video Playback via MCI sans Overlay

Message par Niffo »

Hello,

Je joue de la vidéo via MCI avec le code suivant :

mciSendString_("OPEN myfile TYPE MPEGVIDEO ALIAS MCI_0", 0, 0, 0)
mciSendString_("PLAY MCI_0", 0, 0, 0)


Savez-vous comment désactiver l'Overlay ?
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

désactive l'accélération matérielle de Windows
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Code pour capturer des vidéos ( désactive / réactive automatiquement l'overlay )

Codé en PB 3.94 / Droopy Lib 1.31
La partie MCI a été piquée sur le forum.

Voilà la version compilée : File:1->MCI-SnapShot.exe
Image

Code : Tout sélectionner

;/ PureBasic 3.94 / Droopy Lib 1.31
;/ Pour les FLV necessite le splitter FLV ( Copier FLVSplitter.ax dans C:\Windows\system32 + regsvr32 FLVSplitter.ax )

;{/ MCI Constantes & Commandes

Enumeration 0 
  #MCI_Unknown 
  #MCI_Stopped 
  #MCI_Playing 
  #MCI_Paused 
EndEnumeration 

Enumeration 
  #Forward 
  #Backward 
EndEnumeration 

; Commandes d'état de la vidéo 
Procedure MCI_GetStatus(Nb)   ; Renvoie l'état de la vidéo: En pause, en lecture, ou stoppée 
  Result=#MCI_Unknown 
  a$=Space(#MAX_PATH) 
  i=mciSendString_("status MCI_"+Str(Nb)+" mode",@a$,#MAX_PATH,0) 
  If i=0 
    Select a$ 
      Case "stopped":Result=#MCI_Stopped 
      Case "playing":Result=#MCI_Playing 
      Case "paused":Result=#MCI_Paused 
    EndSelect 
  EndIf 
  ProcedureReturn Result 
EndProcedure 

Procedure MCI_GetSpeed(Nb)    ; Renvoie la vitesse de lecture 
  a$=Space(#MAX_PATH) 
  i=mciSendString_("status MCI_"+Str(Nb)+" Speed",@a$,#MAX_PATH,0) 
  ProcedureReturn Val(a$) 
EndProcedure 

Procedure MCI_GetLength(Nb)   ; Renvoie la longueur de la vidéo 
  a$=Space(#MAX_PATH) 
  i=mciSendString_("status MCI_"+Str(Nb)+" length",@a$,#MAX_PATH,0) 
  ProcedureReturn Val(a$) 
EndProcedure 

Procedure MCI_GetPosition(Nb) ; Renvoie la position du film 
  a$=Space(#MAX_PATH) 
  i=mciSendString_("status MCI_"+Str(Nb)+" position",@a$,#MAX_PATH,0) 
  ProcedureReturn Val(a$) 
EndProcedure 

Procedure MCI_GetVolume(Nb)   ; Renvoie le volume 
  a$=Space(#MAX_PATH) 
  i=mciSendString_("status MCI_"+Str(Nb)+" volume",@a$,#MAX_PATH,0) 
  ProcedureReturn Val(a$) 
EndProcedure 

Procedure.s MCI_GetRect(Nb)   ; Renvoie la taille du film 
  a$=Space(#MAX_PATH) 
  i=mciSendString_("where MCI_"+Str(Nb)+" source",@a$,#MAX_PATH,0) 
  ProcedureReturn StringField(a$,3," ")+" "+StringField(a$,4," ") 
EndProcedure 

Procedure MCI_GetHandle(Nb)   ; Renvoie le handle de la fenêtre d'affichage 
  a$=Space(#MAX_PATH) 
  i=mciSendString_("status MCI_"+Str(Nb)+" window handle",@a$,#MAX_PATH,0) 
  ProcedureReturn Val(a$) 
EndProcedure 

; Commandes de contrôle de la vidéo 
Procedure MCI_Load(Nb,file.s) 
  i=mciSendString_("OPEN "+Chr(34)+file+Chr(34)+" Type MPEGVIDEO ALIAS MCI_"+Str(Nb),0,0,0) 
  If i=0 
    ProcedureReturn #True 
  Else 
    ProcedureReturn #False 
  EndIf 
EndProcedure 

Procedure MCI_Play(Nb) 
  i=mciSendString_("play MCI_"+Str(Nb),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_PlayStart(Nb) 
  i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(0),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_PlayPart(Nb,start,endPos) 
  i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(start)+" to "+Str(endPos),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_Pause(Nb) 
  i=mciSendString_("pause MCI_"+Str(Nb),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_Resume(Nb) 
  i=mciSendString_("resume MCI_"+Str(Nb),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_Stop(Nb) 
  i=mciSendString_("stop MCI_"+Str(Nb),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_Free(Nb) 
  i=mciSendString_("close MCI_"+Str(Nb),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_SetVolume(Nb,volume) 
  i=mciSendString_("SetAudio MCI_"+Str(Nb)+" volume to "+Str(volume),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_SetSpeed(Nb,Tempo) 
  i=mciSendString_("set MCI_"+Str(Nb)+" Speed "+Str(Tempo),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_SetTimeMSFormat(Nb) 
  i=mciSendString_("set MCI_"+Str(Nb)+" time format milliseconds",0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_SetCaption(Nb, Caption$) 
  i=mciSendString_("Window MCI_"+Str(Nb)+" text "+Chr(34)+Caption$+Chr(34),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_Seek(Nb,pos) 
  i=mciSendString_("Seek MCI_"+Str(Nb)+" to "+Str(pos),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_SeekToStart(Nb) 
  i=mciSendString_("Seek MCI_"+Str(Nb)+" to start",0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_SeekToEnd(Nb) 
  i=mciSendString_("Seek MCI_"+Str(Nb)+" to end",0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_SeekTo(Nb, pos) 
  i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(pos),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_Parent(Nb, Hnd) 
  i=mciSendString_("Window MCI_"+Str(Nb)+" handle "+Str(Hnd),0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_Full(Nb) 
  i=mciSendString_("play MCI_"+Str(Nb)+" fullscreen ",0,0,0) 
  ProcedureReturn i 
EndProcedure 

Procedure MCI_Restore(Nb) 
  i=mciSendString_("play MCI_"+Str(Nb)+" window ",0,0,0) 
  ProcedureReturn i 
EndProcedure 
  
Procedure MCI_Step(Nb,NumFrames,Dir) 
  If Dir = #Forward ; en avant 
    i=mciSendString_("step MCI_"+Str(Nb)+" by "+Str(NumFrames),0,0,0) 
  ElseIf Dir = #Backward ; en arrière 
    i=mciSendString_("step MCI_"+Str(Nb)+" by "+Str(NumFrames)+" reverse",0,0,0) 
  EndIf 
  ProcedureReturn i 
EndProcedure 

Procedure.s MCI_TimeString(time) 
  time/1000 
  sek=time%60:time/60 
  min=time%60:time/60 
  ProcedureReturn RSet(Str(time),2,"0")+":"+RSet(Str(min),2,"0")+":"+RSet(Str(sek),2,"0") 
EndProcedure 

Procedure MCI_ShowWindow(Nb) 
  i=mciSendString_("Window MCI_"+Str(Nb)+" state show ",0,0,0) 
  ProcedureReturn i 
EndProcedure

;}

Procedure EnableOverlay(state.l)
  
  ;/ 1° Trouver la position de la carte video
  Carte.s=RegGetValue("HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO","\Device\Video0",".")
  
  ;/ Trouve ou taper pour la carte
  Cle.s=ReplaceString(Carte,"\Registry\Machine","HKEY_LOCAL_MACHINE")
  
  ;/ 3 Ecrit la valeur
  If state
    RegDeleteValue(Cle,"Acceleration.Level",".")
  Else
    RegSetValue(Cle,"Acceleration.Level","5",#REG_DWORD,".")
  EndIf
  
  ;/ 4  Let Windows reload the display settings by using the following code:
  DEVMODE.DEVMODE
  success=EnumDisplaySettings_(#Null,-1,DEVMODE)
  If success
    ret=ChangeDisplaySettings_(DEVMODE,1073741824) ; 0 = Succès
  EndIf
  
  If ret =0
    ProcedureReturn 1
  EndIf
  
EndProcedure

Enumeration
  #Track
  #Bouton
  #Status
  #Play
EndEnumeration

UseJPEGImageDecoder()
UseJPEGImageEncoder()

Movie.s = OpenFileRequester("Choose the movie to play", "D:\9Go Seagate\MP3\", "*.*", 0)
If Movie=""
  End
EndIf

ImageSauvegardee.s=Movie+".jpg"

EnableOverlay(#False)

If MCI_Load(0,Movie)=#False
  MessageRequester("Erreur","Pas une vidéo !")
  End
EndIf

MCI_Play(0)
Longueur=MCI_GetLength(0)
temp.s=MCI_GetRect(0)
Largeur=Val(StringField(temp,1," "))
hauteur=Val(StringField(temp,2," "))

hid=OpenWindow(0,0,0,Largeur,hauteur*2+70,#PB_Window_SystemMenu|#PB_Window_ScreenCentered ,"PureVideoSnapshot")
CreateGadgetList(WindowID(0))
MCI_Parent(0,hid) ; Positionne la vidéo dans ma fenêtre en tant que fenêtre fille
TrackBarGadget(#Track,10,hauteur+10,Largeur-20,20,0,10000)
ButtonImageGadget(#Bouton,0,hauteur+40,Largeur,hauteur,0)
CreateStatusBar(#Status,WindowID(0))
AddStatusBarField(Largeur/2)
AddStatusBarField(Largeur/2)

Repeat
  evt=WindowEvent()
  BarBouge=#False
  
  If evt=#PB_Event_Gadget
    Select EventGadgetID()
      Case #Track
        BarBouge=#True
        t.f=GetGadgetState(#Track)/10000
        t*100
        t=Longueur*t/100
        MCI_SeekTo(0,t)
        
      Case #Bouton
        ;/ Capture
        CaptureWindow(hid)
        SaveCapture(ImageSauvegardee,#PB_ImagePlugin_JPEG,10)
        id1=LoadImage(#PB_Any,ImageSauvegardee)
        id2=GrabImage(id1,#PB_Any,2,30,Largeur,hauteur)
        SetGadgetState(#Bouton,UseImage(id2))
        SaveImage(id2,ImageSauvegardee,#PB_ImagePlugin_JPEG,10)
        StatusBarText(#Status,1," Shot @"+Str(t))
    EndSelect
  EndIf
  
  Position=MCI_GetPosition(0)
  tt.f=Position/Longueur*100
  tt=10000*tt/100
  
  If BarBouge=#False
    ;/ Calcule et positionne le trackbar
    SetGadgetState(#Track,tt)
  EndIf
  
  StatusBarText(#Status,0," "+Str(Position)+" / "+Str(Longueur))
  
  
  
  
  sleep_(1)
  
Until evt = #PB_Event_CloseWindow

CloseWindow(0)
MCI_Free(0)
EnableOverlay(#True)
Répondre