How to control Mplayer

Just starting out? Need help? Post your questions and find answers here.
SiggeSvahn
User
User
Posts: 40
Joined: Wed Oct 06, 2010 9:37 pm

How to control Mplayer

Post by SiggeSvahn »

[Problem solved by myself! I guess I'll have no one else but utter self to thank this time :wink: I'll keep my old conversation as a memorial. The working code example is in the 4th posting below.]
Hello forum! I'm a newbie.
:) I made a breakthrough today. See the third posting in this thread! :)
Perhaps I should ask the Mplayer-team for advice but i fear that they don't understand PB so here we go. My example is controlling the Mplayer in slavemode. I want to show the video on the Purebasic window, perhaps on an imagegadget or canvasgadget.
In my next posting is a longer testprog with ten different ID-options where none is working. You may prefer the first posting for starters.

Questions:
1) What kind of ID is needed in the mplayer command -wid aka WindowID.

Thanks in advance// Sigge

Code: Select all

EnableExplicit

Define.s sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath,sFile,sOutput
Define lEvent,FlagLatestButton,hndMplayer,hndImage_MEDIA,hndVideoWindow,lResult,ElapsedTime,StartTime,ctr

#DVD_Browser=1
#WinW = 777
#MarginR = 22

Enumeration;Windows
#Window
#VideoWindow
EndEnumeration

Enumeration    ; Gadgets
  #sgdMplayerPath
  #btnBrowseMplayerPath
  #sgdMp3Path
  #btnBrowseMp3Path
  #sgdDVDpath
  #btnDVDPath
  #sgdAVIpath
  #btnAVIPath
  #sgdMpegpath
  #btnMpegPath
  
  #btnPlayMp3
  #btnPlayDVD
  #btnPlayAVI
  #btnPlayMpeg
  
  #btnPlay
  #btnPause
  #btnStop
  #btnCloseMplayer
  
  #chbFlushing
  #StringGadgetFlush
  #EditorGadget
  #imgGdtMovie  
EndEnumeration

Enumeration;Images
  #imgMovie_MEDIA
EndEnumeration

Procedure.l HandleError(Result.l, WarningText.s, lResume=#False)
If Result = 0
 MessageRequester("Error", WarningText, #PB_MessageRequester_Ok)
 If lResume=#False
   End;Stop programme!
 EndIf
EndIf
ProcedureReturn Result
EndProcedure


Procedure.l GetLatestPaths(sAppPath.s);sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)  
 Define lResult
 Shared sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath
 ;Opens too read from the ini-file of the form.
  lResult = OpenPreferences(sAppPath+"MplayerTest.ini")
If lResult
  PreferenceGroup("Latest_Paths")
   sMplayerPath = ReadPreferenceString("sMplayerPath", "")
   sMp3Path = ReadPreferenceString("sMp3Path", "")
   sDVDpath = ReadPreferenceString("sDVDpath", "")
   sAVIpath = ReadPreferenceString("sAVIpath", "")
   sMpegPath = ReadPreferenceString("sMpegPath", "")
   
   SetGadgetText(#sgdMplayerPath,sMplayerPath)
   SetGadgetText(#sgdMp3Path,sMp3Path)
   SetGadgetText(#sgdDVDpath,sDVDpath)
   SetGadgetText(#sgdAVIpath,sAVIpath)
   SetGadgetText(#sgdMpegpath,sMpegPath)
   
   
   ClosePreferences()
EndIf;OpenPreferences

ProcedureReturn lResult
 
EndProcedure

Procedure.l SetLatestPaths(sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)  
 Define lResult.l
  ;Opens to read from the ini-file of the form.
  lResult = OpenPreferences(sAppPath+"MplayerTest.ini")
 If lResult
    PreferenceGroup("Latest_Paths")
     
    WritePreferenceString("sMplayerPath",sMplayerPath)
    WritePreferenceString("sMp3Path",sMp3Path)
    WritePreferenceString("sDVDpath",sDVDpath)
    WritePreferenceString("sAVIpath",sAVIpath)
    WritePreferenceString("sMpegPath",sMpegPath)
          
    ClosePreferences()
  Else
    MessageRequester("Err","OpenPreferences(sAppPath + MplayerTest.ini)")
 EndIf;lResult OpenPreferences
  
  ProcedureReturn lResult
EndProcedure

Procedure.s Browse(sStandardFile.s,sPattern.s)
  Define Pattern.l, sFile.s
  ;sStandardFile is mostly = sAppPath  ; set initial file+path to display
  ; With next string we will set the search patterns ("|" as separator) for file displaying:
  ;  1st: "Text (*.txt)" as name, ".txt" and ".bat" as allowed extension
  ;  2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
  ;  3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
  ;sPattern = "Text (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|All files (*.*)|*.*"
  If sPattern <>Str(#DVD_Browser)
    Pattern = 0    ; use the first of the three possible patterns as standard
    sFile = OpenFileRequester("Please select file!", sStandardFile, sPattern, Pattern)
  Else;#DVD_Browser
    sFile = PathRequester("Please select DVD-Unit!",sStandardFile)
  EndIf
  If sFile = ""
    MessageRequester("Information", "The requester was canceled.", 0) 
  EndIf
ProcedureReturn sFile
EndProcedure

Procedure AssignPathToString(sFile.s,lStrGadget.l,sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)
If sFile
  SetGadgetText(lStrGadget,sFile)
EndIf
SetLatestPaths(sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath)

EndProcedure

Procedure.s ShortPath(sFile.s)
  ;DOS-format for For mplayer and FFmeg etc
Define sBuffer.s, ResultLength.l, s.s
  sBuffer = Space(255)
  ResultLength = GetShortPathName_(sFile, @sBuffer, 255)
  s = Left(sBuffer, ResultLength)
  ProcedureReturn s
  
EndProcedure


Procedure LoungeMplayer(sFile.s,sMplayerPath.s)
  Shared hndMplayer,hndImage_MEDIA,hndVideoWindow
If sMplayerPath
  If sFile
    If Right(sFile,1)="\";Not a file but a folder, probably the DVD root.
     ;RunProgram("H:\Programvara\VideoProgram\Mplayer 2007\GUI\MPUI\mplayer.exe", "-slave -identify -wid " + Str(hndImage_MEDIA) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","");
     RunProgram(sMplayerPath, "-slave -identify -wid " + Str(hndImage_MEDIA) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","")
     ;RunProgram(sMplayerPath, "-slave -identify -wid " + Str(hndVideoWindow) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","")
     ;RunProgram(sMplayerPath, "-slave -quiet -dvd-device " + ShortPath(sFile) + " dvd:\\","")
     Else
       ;RunProgram(sMplayerPath, ShortPath(sFile),"")
       hndMplayer = RunProgram(sMplayerPath, " -slave " + ShortPath(sFile),"",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
     EndIf;Right(sFile,1)
  EndIf;sFile
Else
  MessageRequester("Err","Please locate the sMplayerPath!")
EndIf;sMplayerPath
EndProcedure 

Procedure CleanUpMplayer(hndMplayer.l)
  StopDrawing()
  If IsProgram(hndMplayer)
   KillProgram(hndMplayer);Terminator
   CloseProgram(hndMplayer);Closes the connection.
 EndIf
EndProcedure  

;hndVideoWindow = OpenWindow(#VideoWindow, 0, 0, 777, 555, "VideoWindow", #PB_Window_SystemMenu)
;hndVideoWindow =StartDrawing(WindowOutput(#VideoWindow))
If OpenWindow(#Window, 0, 0, 777, 555, "MplayerTest", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  CompilerIf #PB_Compiler_Debugger
      sAppPath = GetCurrentDirectory()
  CompilerElse
      sAppPath = GetPathPart(ProgramFilename())
  CompilerEndIf
  
    
  StringGadget(#sgdMplayerPath,10,10,555,18,sMplayerPath)
  ButtonGadget(#btnBrowseMplayerPath,566,10,200,18,"BrowseMplayerPath")
  
  StringGadget(#sgdMp3Path,10,30,555,18,sMp3Path)
  ButtonGadget(#btnBrowseMp3Path,566,30,200,18,"BrowseMp3Path")
  
  StringGadget(#sgdDVDpath,10,50,555,18,sDVDpath)
  ButtonGadget(#btnDVDPath,566,50,200,18,"BrowseDVD_Path")
  
  StringGadget(#sgdAVIpath,10,70,555,18,sAVIpath)
  ButtonGadget(#btnAVIPath,566,70,200,18,"BrowseAVI_Path")
  
  StringGadget(#sgdMpegpath,10,90,555,18,sMpegPath)
  ButtonGadget(#btnMpegPath,566,90,200,18,"BrowseMpegPath")
  
  ButtonGadget(#btnPlayMp3,10,122,200,33,"PlayMp3")
  ButtonGadget(#btnPlayDVD,10,172,200,33,"PlayDVD")
  ButtonGadget(#btnPlayAVI,10,222,200,33,"PlayAVI")
  ButtonGadget(#btnPlayMpeg,10,272,200,33,"PlayMpeg")
  
  ButtonGadget(#btnPlay,10,322,66,33,"Play")
  ButtonGadget(#btnPause,66,322,66,33,"Pause")
  ButtonGadget(#btnStop,132,322,66,33,"Stop")
  
  ButtonGadget(#btnCloseMplayer,10,372,200,33,"Close Mplayer")
  
  CheckBoxGadget(#chbFlushing,240,122,99,22,"Allow flushing!")
  SetGadgetState(#chbFlushing,#PB_Checkbox_Checked)
  GadgetToolTip(#chbFlushing,"Same result as moving mouse!?")
  
  
  StringGadget(#StringGadgetFlush,350,122,#WinW-350-#MarginR,22,"Why need flushing ReadprogramString OR move mouse!?")
  EditorGadget(#EditorGadget,240,152,#WinW-240-#MarginR,133)
  CreateImage(#imgMovie_MEDIA,296,222)
;=============================================
hndImage_MEDIA = ImageID(#imgMovie_MEDIA);   = NECESSARY AND I DONT KNOW WHY!:-<
;=============================================
  hndImage_MEDIA=StartDrawing(ImageOutput(#imgMovie_MEDIA))
  ImageGadget(#imgGdtMovie,240,312, 296,222,ImageID(#imgMovie_MEDIA),#PB_Image_Border)
   
  
 If FileSize(sAppPath+"MplayerTest.ini") <> -1
    GetLatestPaths(sAppPath);sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath)
   Else
    CreatePreferences(sAppPath+"MplayerTest.ini")
  EndIf
  
  
  
  Repeat
    lEvent=WaitWindowEvent(500)
  
    Select EventGadget()
       
      ;BROWSER_BUTTONS
      Case  #btnBrowseMplayerPath
        sFile = Browse(sAppPath,"mplayer.exe|mplayer.exe|All files (*.*)|*.*")
        If sFile: sMplayerPath=sFile: AssignPathToString(sFile,#sgdMplayerPath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnBrowseMp3Path
        sFile = Browse(sAppPath,"AudioFile (*.mp3)|*.mp3|All files (*.*)|*.*")
        If sFile: sMp3Path=sFile: AssignPathToString(sFile,#sgdMp3Path,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnDVDPath
        sFile = Browse("C:\",Str(#DVD_Browser))
        If sFile: sDVDpath=sFile: AssignPathToString(sFile,#sgdDVDpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnAVIPath
        sFile = Browse(sAppPath,"VideoFile (*.avi)|*.avi|All files (*.*)|*.*")
        If sFile: sAVIpath=sFile: AssignPathToString(sFile,#sgdAVIpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnMpegPath
        sFile = Browse(sAppPath,"VideoFile (*.mpg)|*.mpg|All files (*.*)|*.*")
        If sFile: sMpegPath=sFile: AssignPathToString(sFile,#sgdMpegpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
      ;PLAY_BUTTONS
      Case #btnPlayMp3
        If FlagLatestButton<>#btnPlayMp3
         LoungeMplayer(sMp3Path,sMplayerPath)
          FlagLatestButton=#btnPlayMp3
        EndIf
        
      Case #btnPlayAVI
        If FlagLatestButton<>#btnPlayAVI
          LoungeMplayer(sAVIpath,sMplayerPath)
          FlagLatestButton=#btnPlayAVI
        EndIf
      Case #btnPlayDVD
        If FlagLatestButton<>#btnPlayDVD
          LoungeMplayer(sDVDpath,sMplayerPath)
          FlagLatestButton=#btnPlayDVD
        EndIf
         
      Case #btnPlayMpeg
         If FlagLatestButton<>#btnPlayMpeg
           LoungeMplayer(sMpegPath,sMplayerPath)
           FlagLatestButton=#btnPlayMpeg
        EndIf
        
      Case #btnPlay
       If FlagLatestButton<>#btnPlay
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "play")
         Debug Str(lResult) + " play"
       EndIf
       FlagLatestButton=#btnPlay
      EndIf;FlagLatestButton<>#btnPlay
    
      Case #btnPause
       If FlagLatestButton<>#btnPause
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "pause")
         Debug Str(lResult) + " pause"
       EndIf
       FlagLatestButton=#btnPause
      EndIf;FlagLatestButton<>#btnPause
      
    Case #btnStop
       If FlagLatestButton<>#btnStop
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "stop")
         Debug Str(lResult) + " stop"
       EndIf
       FlagLatestButton=#btnStop
      EndIf;FlagLatestButton<>#btnStop
    
      Case #btnCloseMplayer
       CleanUpMplayer(hndMplayer)
    EndSelect
    
   If IsProgram(hndMplayer)
    If ProgramRunning(hndMplayer)
      If AvailableProgramOutput(hndMplayer)
        sOutput = ReadProgramString(hndMplayer) + Chr(13)
        If Left(sOutput,2) = "A:";Filtering the recurring msgs.
          If GetGadgetState(#chbFlushing)
            SetGadgetText(#StringGadgetFlush, sOutput)
          EndIf
         Else
            AddGadgetItem(#EditorGadget, 0, sOutput)
        EndIf
      EndIf;AvailableProgramOutput(hndMplayer)  
     Else;Not programRunning(hndMplayer)
      CloseProgram(hndMplayer);Closes the connection.
    EndIf;ProgramRunning
  EndIf;IsProgram(hndMplayer)
   
  Until lEvent = #PB_Event_CloseWindow
EndIf; OpenWindow
CleanUpMplayer(hndMplayer)
End
Last edited by SiggeSvahn on Mon Apr 25, 2011 5:29 pm, edited 2 times in total.
Newbie
SiggeSvahn
User
User
Posts: 40
Joined: Wed Oct 06, 2010 9:37 pm

Re: How to control Mplayer

Post by SiggeSvahn »

Same question - longer code:
1) What kind of ID is needed in the mplayer command -wid aka WindowID.

Thanks in advance// Sigge

Code: Select all

EnableExplicit

Define.s sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath,sFile,sOutput
Define lEvent,FlagLatestButton,hndMplayer,hndImage_MEDIA,hndVideoWindow,hndMainWindow,lResult
Define ElapsedTime,StartTime,hndTest
Define hndWindowedScreen, FlagWindowedScreen
#DVD_Browser=1
#WinW = 777
#MarginR = 22
#StartDrawing=#True
#DontStartDrawing=#False

Enumeration;Windows
#Window
#VideoWindow
#imgScreen
EndEnumeration

Enumeration
  #mp3=1
  #DVD
  #AVI
  #Mpeg
EndEnumeration

Enumeration    ; Gadgets
  #sgdMplayerPath
  #btnBrowseMplayerPath
  #sgdMp3Path
  #btnBrowseMp3Path
  #sgdDVDpath
  #btnDVDPath
  #sgdAVIpath
  #btnAVIPath
  #sgdMpegpath
  #btnMpegPath
  
  #btnPlayMp3
  #btnPlayDVD
  #btnPlayAVI
  #btnPlayMpeg
  
  #btnPlay
  #btnPause
  #btnStop
  #btnCloseMplayer
  
  #chbFlushing
  #StringGadgetFlush
  #EditorGadget
  ;Testing different HANDLES for displaying Mplayer video.
  #optImage_MEDIA
  #optImage_MEDIA_ID
  #optImageOutput_ID
  #optImage_MEDIA_startdrawing_ID
  #optImageGadget_ID
  #optScreen
  #optWindow_ID
  #optWindowOutput_ID
  #optWindowStartdrawing_ID
  #optDeviceContext
  #optDeviceIndependentBitmap
  
  #imgGdtMovie  
EndEnumeration

Enumeration;Images
  #imgMovie_MEDIA=1
EndEnumeration

Procedure.l HandleError(Result.l, WarningText.s, lResume=#False)
If Result = 0
 MessageRequester("Error", WarningText, #PB_MessageRequester_Ok)
 If lResume=#False
   End;Stop programme!
 EndIf
EndIf
ProcedureReturn Result
EndProcedure


Procedure.l GetLatestPaths(sAppPath.s);sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)  
 Define lResult
 Shared sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath
 ;Opens too read from the ini-file of the form.
  lResult = OpenPreferences(sAppPath+"MplayerTest.ini")
If lResult
  PreferenceGroup("Latest_Paths")
   sMplayerPath = ReadPreferenceString("sMplayerPath", "")
   sMp3Path = ReadPreferenceString("sMp3Path", "")
   sDVDpath = ReadPreferenceString("sDVDpath", "")
   sAVIpath = ReadPreferenceString("sAVIpath", "")
   sMpegPath = ReadPreferenceString("sMpegPath", "")
   
   SetGadgetText(#sgdMplayerPath,sMplayerPath)
   SetGadgetText(#sgdMp3Path,sMp3Path)
   SetGadgetText(#sgdDVDpath,sDVDpath)
   SetGadgetText(#sgdAVIpath,sAVIpath)
   SetGadgetText(#sgdMpegpath,sMpegPath)
   
   
   ClosePreferences()
EndIf;OpenPreferences

ProcedureReturn lResult
 
EndProcedure

Procedure.l SetLatestPaths(sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)  
 Define lResult.l
  ;Opens to read from the ini-file of the form.
  lResult = OpenPreferences(sAppPath+"MplayerTest.ini")
 If lResult
    PreferenceGroup("Latest_Paths")
     
    WritePreferenceString("sMplayerPath",sMplayerPath)
    WritePreferenceString("sMp3Path",sMp3Path)
    WritePreferenceString("sDVDpath",sDVDpath)
    WritePreferenceString("sAVIpath",sAVIpath)
    WritePreferenceString("sMpegPath",sMpegPath)
          
    ClosePreferences()
  Else
    MessageRequester("Err","OpenPreferences(sAppPath + MplayerTest.ini)")
 EndIf;lResult OpenPreferences
  
  ProcedureReturn lResult
EndProcedure

Procedure.s Browse(sStandardFile.s,sPattern.s)
  Define Pattern.l, sFile.s
  ;sStandardFile is mostly = sAppPath  ; set initial file+path to display
  ; With next string we will set the search patterns ("|" as separator) for file displaying:
  ;  1st: "Text (*.txt)" as name, ".txt" and ".bat" as allowed extension
  ;  2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
  ;  3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
  ;sPattern = "Text (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|All files (*.*)|*.*"
  If sPattern <>Str(#DVD_Browser)
    Pattern = 0    ; use the first of the three possible patterns as standard
    sFile = OpenFileRequester("Please select file!", sStandardFile, sPattern, Pattern)
  Else;#DVD_Browser
    sFile = PathRequester("Please select DVD-Unit!",sStandardFile)
  EndIf
  If sFile = ""
    MessageRequester("Information", "The requester was canceled.", 0) 
  EndIf
ProcedureReturn sFile
EndProcedure

Procedure AssignPathToString(sFile.s,lStrGadget.l,sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)
If sFile
  SetGadgetText(lStrGadget,sFile)
EndIf
SetLatestPaths(sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath)

EndProcedure

Procedure.l AntiGlitches(PressedButton.l)
  Define lResult
  Shared FlagLatestButton
  If PressedButton<>FlagLatestButton
    FlagLatestButton=PressedButton
    lResult=#True
  Else
    lResult=#False
  EndIf
  ProcedureReturn lResult
  
EndProcedure

Procedure.s ShortPath(sFile.s)
  ;DOS-format for For mplayer and FFmeg etc
Define sBuffer.s, ResultLength.l, s.s
  sBuffer = Space(255)
  ResultLength = GetShortPathName_(sFile, @sBuffer, 255)
  s = Left(sBuffer, ResultLength)
  ProcedureReturn s
  
EndProcedure


Procedure LoungeMplayer(sFile.s,sMplayerPath.s,FlagMediaType.l)
  Shared hndMplayer,hndImage_MEDIA,hndVideoWindow,hndWindowedScreen,hndTest
If sMplayerPath
  If sFile
    Select FlagMediaType
        Case #DVD;Not a file but a folder, probably the DVD root.
     ;RunProgram("H:\Programvara\VideoProgram\Mplayer 2007\GUI\MPUI\mplayer.exe", "-slave -identify -wid " + Str(hndImage_MEDIA) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","");
     RunProgram(sMplayerPath, "-slave -identify -wid " + Str(hndWindowedScreen) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
     ;RunProgram(sMplayerPath, "-slave -identify -wid " + Str(hndVideoWindow) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","")
     ;RunProgram(sMplayerPath, "-slave -quiet -dvd-device " + ShortPath(sFile) + " dvd:\\","")
        Default;#mp3, #AVI, #Mpeg
       ;RunProgram(sMplayerPath, ShortPath(sFile),"")
       ;hndMplayer = RunProgram(sMplayerPath, " -slave -wid " + Str(hndWindowedScreen) + ShortPath(sFile),"",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
       hndMplayer=RunProgram(sMplayerPath, " -slave -wid " + Str(hndTest) + " -vo directx -nocolorkey " + ShortPath(sFile),"",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
     EndSelect;FlagMediaType
  EndIf;sFile
Else
  MessageRequester("Err","Please locate the sMplayerPath!")
EndIf;sMplayerPath
EndProcedure 

Procedure CleanUpMplayer(hndMplayer.l)
  StopDrawing()
  If IsProgram(hndMplayer)
   KillProgram(hndMplayer);Terminator
   CloseProgram(hndMplayer);Closes the connection.
 EndIf
EndProcedure  

Procedure CreateWindowedScreen()
  Shared hndWindowedScreen,lResult,FlagWindowedScreen
  FreeGadget(#imgGdtMovie);deleting! I need the space for my WindowedScreen.
  
If InitSprite() = 0;NEEDED FOR WINDOWED SCREEN!
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
    End
EndIf
hndWindowedScreen=WindowID(#Window)
lResult = OpenWindowedScreen(hndWindowedScreen, 240,312, #WinW-240-#MarginR,222, #False, 0, 0)
FlagWindowedScreen=#True
EndProcedure

Procedure CreateImageGadget(FlagStartDrawing.l=#True)
  Shared FlagWindowedScreen,hndImage_MEDIA
If FlagWindowedScreen = #False
  CreateImage(#imgMovie_MEDIA,296,222)
;=============================================
hndImage_MEDIA = ImageID(#imgMovie_MEDIA);   = NECESSARY AND I DONT KNOW WHY!:-<
;=============================================
  If FlagStartDrawing
    StopDrawing();dirty code
    hndImage_MEDIA=StartDrawing(ImageOutput(#imgMovie_MEDIA))
  EndIf
    ImageGadget(#imgGdtMovie,240,312, 296,222,ImageID(#imgMovie_MEDIA),#PB_Image_Border)
Else
  MessageRequester("","There is a windowed screen that i dont know how to delete! Please restart the prog! Sorry!")
EndIf
  
EndProcedure

Procedure CreateDIB()
  
  
  
EndProcedure

;hndVideoWindow = OpenWindow(#VideoWindow, 0, 0, 777, 555, "VideoWindow", #PB_Window_SystemMenu)
;hndVideoWindow =StartDrawing(WindowOutput(#VideoWindow))

hndMainWindow = OpenWindow(#Window, 0, 0, 777, 555, "MplayerTest", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If hndMainWindow
  CompilerIf #PB_Compiler_Debugger
      sAppPath = GetCurrentDirectory()
  CompilerElse
      sAppPath = GetPathPart(ProgramFilename())
  CompilerEndIf
  
    
  StringGadget(#sgdMplayerPath,10,10,555,18,sMplayerPath)
  ButtonGadget(#btnBrowseMplayerPath,566,10,200,18,"BrowseMplayerPath")
  
  StringGadget(#sgdMp3Path,10,30,555,18,sMp3Path)
  ButtonGadget(#btnBrowseMp3Path,566,30,200,18,"BrowseMp3Path")
  
  StringGadget(#sgdDVDpath,10,50,555,18,sDVDpath)
  ButtonGadget(#btnDVDPath,566,50,200,18,"BrowseDVD_Path")
  
  StringGadget(#sgdAVIpath,10,70,555,18,sAVIpath)
  ButtonGadget(#btnAVIPath,566,70,200,18,"BrowseAVI_Path")
  
  StringGadget(#sgdMpegpath,10,90,555,18,sMpegPath)
  ButtonGadget(#btnMpegPath,566,90,200,18,"BrowseMpegPath")
  
  ButtonGadget(#btnPlayMp3,10,122,200,33,"PlayMp3")
  ButtonGadget(#btnPlayDVD,10,172,200,33,"PlayDVD")
  ButtonGadget(#btnPlayAVI,10,222,200,33,"PlayAVI")
  ButtonGadget(#btnPlayMpeg,10,272,200,33,"PlayMpeg")
  
  ButtonGadget(#btnPlay,10,322,66,33,"Play")
  ButtonGadget(#btnPause,66,322,66,33,"Pause")
  ButtonGadget(#btnStop,132,322,66,33,"Stop")
  
  ButtonGadget(#btnCloseMplayer,10,372,200,33,"Close Mplayer")
  
  OptionGadget(#optImage_MEDIA,10,410,99,22,"-wid Image")
  GadgetToolTip(#optImage_MEDIA,"Trying different types of ID for displaying video from Mplayer!")
  OptionGadget(#optImage_MEDIA_ID,110,410,99,22,"ImageID")
  OptionGadget(#optImageOutput_ID,10,440,99,22,"ImageOutput_ID")
  OptionGadget(#optImage_MEDIA_startdrawing_ID,110,440,99,22,"Image_startdrawing_ID")
  OptionGadget(#optImageGadget_ID,10,470,99,22,"ImgGadget")
  OptionGadget(#optWindow_ID,110,470,99,22,"Window_ID")
  OptionGadget(#optWindowOutput_ID,10,500,99,22,"WindowOutput")
  OptionGadget(#optWindowStartdrawing_ID,110,500,99,22,"WindowStartdrawing")
  OptionGadget(#optScreen,10,530,99,22,"WindowedScreen")
  OptionGadget(#optDeviceContext,110,530,99,22,"DC")
  GadgetToolTip(#optDeviceContext, "DC aka DeviceContext")
;   OptionGadget(#optDeviceIndependentBitmap,110,530,99,22,"DIB ala BitBlt")
;   GadgetToolTip(#optDeviceIndependentBitmap, "DeviceIndependentBitmap")
;   
  CheckBoxGadget(#chbFlushing,240,122,99,22,"Allow flushing!")
  SetGadgetState(#chbFlushing,#PB_Checkbox_Checked)
  GadgetToolTip(#chbFlushing,"Same result as moving mouse!?")
  
  
  StringGadget(#StringGadgetFlush,350,122,#WinW-350-#MarginR,22,"Why need flushing ReadprogramString OR move mouse!?")
  EditorGadget(#EditorGadget,240,152,#WinW-240-#MarginR,133)
  
     
 If FileSize(sAppPath+"MplayerTest.ini") <> -1
    GetLatestPaths(sAppPath);sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath)
   Else
    CreatePreferences(sAppPath+"MplayerTest.ini")
 EndIf
  
  
  
  Repeat
    lEvent=WaitWindowEvent(500)
  
    Select EventGadget()
       
      ;BROWSER_BUTTONS
      Case  #btnBrowseMplayerPath
        sFile = Browse(sAppPath,"mplayer.exe|mplayer.exe|All files (*.*)|*.*")
        If sFile: sMplayerPath=sFile: AssignPathToString(sFile,#sgdMplayerPath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnBrowseMp3Path
        sFile = Browse(sAppPath,"AudioFile (*.mp3)|*.mp3|All files (*.*)|*.*")
        If sFile: sMp3Path=sFile: AssignPathToString(sFile,#sgdMp3Path,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnDVDPath
        sFile = Browse("C:\",Str(#DVD_Browser))
        If sFile: sDVDpath=sFile: AssignPathToString(sFile,#sgdDVDpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnAVIPath
        sFile = Browse(sAppPath,"VideoFile (*.avi)|*.avi|All files (*.*)|*.*")
        If sFile: sAVIpath=sFile: AssignPathToString(sFile,#sgdAVIpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnMpegPath
        sFile = Browse(sAppPath,"VideoFile (*.mpg)|*.mpg|All files (*.*)|*.*")
        If sFile: sMpegPath=sFile: AssignPathToString(sFile,#sgdMpegpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
      ;PLAY_BUTTONS
      Case #btnPlayMp3
        If AntiGlitches(#btnPlayMp3)
         LoungeMplayer(sMp3Path,sMplayerPath,#mp3)
        EndIf
        
      Case #btnPlayAVI
        If AntiGlitches(#btnPlayAVI)
          LoungeMplayer(sAVIpath,sMplayerPath,#AVI)
        EndIf
      Case #btnPlayDVD
        If AntiGlitches(#btnPlayDVD)
          LoungeMplayer(sDVDpath,sMplayerPath,#DVD)
        EndIf
         
      Case #btnPlayMpeg
         If AntiGlitches(#btnPlayMpeg)
           LoungeMplayer(sMpegPath,sMplayerPath,#Mpeg)
        EndIf
        
      Case #btnPlay
       If AntiGlitches(#btnPlay)
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "play")
         Debug Str(lResult) + " play"
       EndIf
      EndIf;FlagLatestButton<>#btnPlay
    
      Case #btnPause
       If AntiGlitches(#btnPause)
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "pause")
         Debug Str(lResult) + " pause"
       EndIf
      EndIf;FlagLatestButton<>#btnPause
      
    Case #btnStop
       If AntiGlitches(#btnStop)
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "stop")
         Debug Str(lResult) + " stop"
       EndIf
      EndIf;FlagLatestButton<>#btnStop
    
      Case #btnCloseMplayer
        CleanUpMplayer(hndMplayer)
        
      Case #optImage_MEDIA
        If AntiGlitches(#optImage_MEDIA)
          CreateImageGadget(#DontStartDrawing)
          hndTest = #imgMovie_MEDIA:Debug "hndTest = #imgMovie_MEDIA = " + Str(hndTest)
        EndIf
        
      Case #optImage_MEDIA_ID
        If AntiGlitches(#optImage_MEDIA_ID)
          CreateImageGadget(#DontStartDrawing)
          hndTest=hndImage_MEDIA:Debug "hndTest = Image_MEDIA_ID = " + Str(hndTest)
        EndIf
        
      Case #optImageOutput_ID
        If AntiGlitches(#optImageOutput_ID)
          ;CreateImageGadget(#StartDrawing)
          CreateImage(#imgMovie_MEDIA,296,222)
          hndTest=ImageOutput(#imgMovie_MEDIA):Debug "hndTest = #optImageOutput_ID = " + Str(hndTest)
        EndIf
        
     Case #optImage_MEDIA_startdrawing_ID
        If AntiGlitches(#optImage_MEDIA_startdrawing_ID)
          CreateImageGadget()
          hndTest = hndImage_MEDIA: Debug "hndTest = #optImage_MEDIA_startdrawing_ID = " + Str(hndTest)
        EndIf
        
      Case #optImageGadget_ID
        If AntiGlitches(#optImageGadget_ID)
          CreateImageGadget()
          hndTest=hndImage_MEDIA:Debug "hndTest = #optImageGadget_ID = " + Str(hndTest)
        EndIf
        
      Case #optWindow_ID
        If AntiGlitches(#optWindow_ID)
          ;CreateImageGadget()
          hndTest=#Window:Debug "hndTest = #optWindow_ID = " + Str(hndTest)
        EndIf
        
        
      Case #optWindowOutput_ID
        If AntiGlitches(#optWindowOutput_ID)
          ;CreateImageGadget()
          hndTest = WindowOutput(#Window): Debug "hndTest = WindowOutput(#Window) = " + Str(hndTest)
        EndIf
        
     Case #optWindowStartdrawing_ID
        If AntiGlitches(#optWindowStartdrawing_ID)
          CreateImageGadget()
          StopDrawing();Dirty code.
          hndTest = StartDrawing(WindowOutput(#Window)): Debug "hndTest = #optWindowStartdrawing_ID = " + Str(hndTest)
        EndIf
        
    Case #optScreen
        If AntiGlitches(#optScreen)
          CreateWindowedScreen()
          Debug "hndTest = WindowedScreen_ID = " + Str(hndTest)
        EndIf
        
    Case #optDeviceContext
      If AntiGlitches(#optDeviceContext)
        CreateImageGadget()
        hndTest = GetDC_(GadgetID(#imgGdtMovie))
        Debug "hndTest = #optDeviceContext = " + Str(hndTest)
        EndIf    
        
;     Case #optDeviceIndependentBitmap
;       If AntiGlitches(#optDeviceIndependentBitmap)
;         CreateImageGadget()
;         CreateDIB()
;         Debug "hndTest = #optDeviceIndependentBitmap = " + Str(hndTest)
;         EndIf    
                
    EndSelect
    
   If IsProgram(hndMplayer)
    If ProgramRunning(hndMplayer)
      If AvailableProgramOutput(hndMplayer)
        sOutput = ReadProgramString(hndMplayer) + Chr(13)
        If Left(sOutput,2) = "A:";Filtering the recurring msgs.
          If GetGadgetState(#chbFlushing)
            SetGadgetText(#StringGadgetFlush, sOutput)
          EndIf
         Else
            AddGadgetItem(#EditorGadget, 0, sOutput)
        EndIf
      EndIf;AvailableProgramOutput(hndMplayer)  
     Else;Not programRunning(hndMplayer)
      CloseProgram(hndMplayer);Closes the connection.
    EndIf;ProgramRunning
  EndIf;IsProgram(hndMplayer)
   
  Until lEvent = #PB_Event_CloseWindow
EndIf; OpenWindow
CleanUpMplayer(hndMplayer)
End
Newbie
SiggeSvahn
User
User
Posts: 40
Joined: Wed Oct 06, 2010 9:37 pm

Re: How to control Mplayer

Post by SiggeSvahn »

:) Finally a breakthrough!
1a) Try the option WindowCreation_ID.
2a) Start your video by pressing PlayAVI.
3a) Press Clear_Screen.
4a) Behold the video on your PureBasic window!!

Then restart and...
1b) Try the option ImgGdgCreation_ID.
Image
2b) Start your video by pressing PlayAVI.
3b) Behold the video through(!) the Mplayer window scaled to the size of the ImageGadget!!
ImageClick to enlarge!
Come on you experienced guys! What is happening here technically speaking?

Code: Select all

EnableExplicit

Define.s sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath,sFile,sOutput
Define lEvent,FlagLatestButton,hndMplayer,hndImage_MEDIA,hndVideoWindow,hndMainWindow,lResult
Define ElapsedTime,StartTime,hndTest
Define hndWindowedScreen, FlagWindowedScreen
#DVD_Browser=1
#WinW = 777
#MarginR = 22
#StartDrawing=#True
#DontStartDrawing=#False
#GethndImageCreation=#True

Enumeration;Windows
#Window
#VideoWindow
#imgScreen
EndEnumeration

Enumeration
  #mp3=1
  #DVD
  #AVI
  #Mpeg
EndEnumeration

Enumeration    ; Gadgets
  #sgdMplayerPath
  #btnBrowseMplayerPath
  #sgdMp3Path
  #btnBrowseMp3Path
  #sgdDVDpath
  #btnDVDPath
  #sgdAVIpath
  #btnAVIPath
  #sgdMpegpath
  #btnMpegPath
  
  #btnPlayMp3
  #btnPlayDVD
  #btnPlayAVI
  #btnPlayMpeg
  
  #btnPlay
  #btnPause
  #btnStop
  #btnCloseMplayer
  #btnClearScreen
  
  #chbFlushing
  #StringGadgetFlush
  #EditorGadget
  ;Testing different HANDLES for displaying Mplayer video.
  #optImage_MEDIA
  #optImage_MEDIACreationID
  #optImage_MEDIA_ID
  #optImageOutput_ID
  #optImage_MEDIA_startdrawing_ID
  
  #optImageGadget
  #optImageGadgetCreation_ID
  #optScreen
  
  #optWindow
  #optWindowCreation_ID
  #optWindowOutput_ID
  #optWindowStartdrawing_ID
  
  #optDeviceContext
  #optDeviceIndependentBitmap
  
  #optCanvasGadget
  #optCanvasGdgCreation_ID
  #optCanvasGadgetOutput
  #optCanvasGadgetStartdrawing
  
  #imgGdtMovie
  #CanvasGdg
EndEnumeration

Enumeration;Images
  #imgMovie_MEDIA=1
EndEnumeration

Procedure.l HandleError(Result.l, WarningText.s, lResume=#False)
If Result = 0
 MessageRequester("Error", WarningText, #PB_MessageRequester_Ok)
 If lResume=#False
   End;Stop programme!
 EndIf
EndIf
ProcedureReturn Result
EndProcedure


Procedure.l GetLatestPaths(sAppPath.s);sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)  
 Define lResult
 Shared sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath
 ;Opens too read from the ini-file of the form.
  lResult = OpenPreferences(sAppPath+"MplayerTest.ini")
If lResult
  PreferenceGroup("Latest_Paths")
   sMplayerPath = ReadPreferenceString("sMplayerPath", "")
   sMp3Path = ReadPreferenceString("sMp3Path", "")
   sDVDpath = ReadPreferenceString("sDVDpath", "")
   sAVIpath = ReadPreferenceString("sAVIpath", "")
   sMpegPath = ReadPreferenceString("sMpegPath", "")
   
   SetGadgetText(#sgdMplayerPath,sMplayerPath)
   SetGadgetText(#sgdMp3Path,sMp3Path)
   SetGadgetText(#sgdDVDpath,sDVDpath)
   SetGadgetText(#sgdAVIpath,sAVIpath)
   SetGadgetText(#sgdMpegpath,sMpegPath)
   
   
   ClosePreferences()
EndIf;OpenPreferences

ProcedureReturn lResult
 
EndProcedure

Procedure.l SetLatestPaths(sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)  
 Define lResult.l
  ;Opens to read from the ini-file of the form.
  lResult = OpenPreferences(sAppPath+"MplayerTest.ini")
 If lResult
    PreferenceGroup("Latest_Paths")
     
    WritePreferenceString("sMplayerPath",sMplayerPath)
    WritePreferenceString("sMp3Path",sMp3Path)
    WritePreferenceString("sDVDpath",sDVDpath)
    WritePreferenceString("sAVIpath",sAVIpath)
    WritePreferenceString("sMpegPath",sMpegPath)
          
    ClosePreferences()
  Else
    MessageRequester("Err","OpenPreferences(sAppPath + MplayerTest.ini)")
 EndIf;lResult OpenPreferences
  
  ProcedureReturn lResult
EndProcedure

Procedure.s Browse(sStandardFile.s,sPattern.s)
  Define Pattern.l, sFile.s
  ;sStandardFile is mostly = sAppPath  ; set initial file+path to display
  ; With next string we will set the search patterns ("|" as separator) for file displaying:
  ;  1st: "Text (*.txt)" as name, ".txt" and ".bat" as allowed extension
  ;  2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
  ;  3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
  ;sPattern = "Text (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|All files (*.*)|*.*"
  If sPattern <>Str(#DVD_Browser)
    Pattern = 0    ; use the first of the three possible patterns as standard
    sFile = OpenFileRequester("Please select file!", sStandardFile, sPattern, Pattern)
  Else;#DVD_Browser
    sFile = PathRequester("Please select DVD-Unit!",sStandardFile)
  EndIf
  If sFile = ""
    MessageRequester("Information", "The requester was canceled.", 0) 
  EndIf
ProcedureReturn sFile
EndProcedure

Procedure AssignPathToString(sFile.s,lStrGadget.l,sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)
If sFile
  SetGadgetText(lStrGadget,sFile)
EndIf
SetLatestPaths(sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath)

EndProcedure

Procedure.l AntiGlitches(PressedButton.l)
  Define lResult
  Shared FlagLatestButton
  If PressedButton<>FlagLatestButton
    FlagLatestButton=PressedButton
    lResult=#True
  Else
    lResult=#False
  EndIf
  ProcedureReturn lResult
  
EndProcedure

Procedure.s ShortPath(sFile.s)
  ;DOS-format for For mplayer and FFmeg etc
Define sBuffer.s, ResultLength.l, s.s
  sBuffer = Space(255)
  ResultLength = GetShortPathName_(sFile, @sBuffer, 255)
  s = Left(sBuffer, ResultLength)
  ProcedureReturn s
  
EndProcedure


Procedure LoungeMplayer(sFile.s,sMplayerPath.s,FlagMediaType.l)
  Shared hndMplayer,hndImage_MEDIA,hndVideoWindow,hndWindowedScreen,hndTest
If sMplayerPath
  If sFile
    Select FlagMediaType
        Case #DVD;Not a file but a folder, probably the DVD root.
     ;RunProgram("H:\Programvara\VideoProgram\Mplayer 2007\GUI\MPUI\mplayer.exe", "-slave -identify -wid " + Str(hndImage_MEDIA) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","");
     RunProgram(sMplayerPath, "-slave -identify -wid " + Str(hndWindowedScreen) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
     ;RunProgram(sMplayerPath, "-slave -identify -wid " + Str(hndVideoWindow) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","")
     ;RunProgram(sMplayerPath, "-slave -quiet -dvd-device " + ShortPath(sFile) + " dvd:\\","")
        Default;#mp3, #AVI, #Mpeg
       ;RunProgram(sMplayerPath, ShortPath(sFile),"")
       ;hndMplayer = RunProgram(sMplayerPath, " -slave -wid " + Str(hndWindowedScreen) + ShortPath(sFile),"",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
       hndMplayer=RunProgram(sMplayerPath, " -slave -wid " + Str(hndTest) + " -vo directx -nocolorkey " + ShortPath(sFile),"",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
     EndSelect;FlagMediaType
  EndIf;sFile
Else
  MessageRequester("Err","Please locate the sMplayerPath!")
EndIf;sMplayerPath
EndProcedure 

Procedure CleanUpMplayer(hndMplayer.l)
  StopDrawing()
  If IsProgram(hndMplayer)
   KillProgram(hndMplayer);Terminator
   CloseProgram(hndMplayer);Closes the connection.
 EndIf
EndProcedure  

Procedure CreateWindowedScreen()
  Shared hndWindowedScreen,lResult,FlagWindowedScreen
  FreeGadget(#imgGdtMovie);deleting! I need the space for my WindowedScreen.
  
If InitSprite() = 0;NEEDED FOR WINDOWED SCREEN!
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
    End
EndIf
hndWindowedScreen=WindowID(#Window)
lResult = OpenWindowedScreen(hndWindowedScreen, 240,312, #WinW-240-#MarginR,222, #False, 0, 0)
FlagWindowedScreen=#True
EndProcedure

Procedure.l CreateImageGadget(FlagStartDrawing.l=#True,GethndImageCreation=#False)
  Define hndImageCreation
  Shared FlagWindowedScreen,hndImage_MEDIA
If FlagWindowedScreen = #False
 hndImageCreation = CreateImage(#imgMovie_MEDIA,296,222)
;=============================================
hndImage_MEDIA = ImageID(#imgMovie_MEDIA);   = NECESSARY AND I DONT KNOW WHY!:-<
;=============================================
  If FlagStartDrawing
    StopDrawing();dirty code
    hndImage_MEDIA=StartDrawing(ImageOutput(#imgMovie_MEDIA))
  EndIf
    ImageGadget(#imgGdtMovie,240,312, 296,222,ImageID(#imgMovie_MEDIA),#PB_Image_Border)
Else
  MessageRequester("","There is a windowed screen that i dont know how to delete! Please restart the prog! Sorry!")
EndIf

If GethndImageCreation
  ProcedureReturn hndImageCreation
EndIf

EndProcedure

Procedure CreateDIB()
  
  
  
EndProcedure

Procedure CreateCanvasGadget(FlagStartDrawing.l=#True)
  Shared FlagWindowedScreen,hndImage_MEDIA
If FlagWindowedScreen = #False
  CreateImage(#imgMovie_MEDIA,296,222)
;=============================================
hndImage_MEDIA = ImageID(#imgMovie_MEDIA);   = NECESSARY AND I DONT KNOW WHY!:-<
;=============================================
  If FlagStartDrawing
    StopDrawing();dirty code
    hndImage_MEDIA=StartDrawing(ImageOutput(#imgMovie_MEDIA))
  EndIf
    ImageGadget(#imgGdtMovie,240,312, 296,222,ImageID(#imgMovie_MEDIA),#PB_Image_Border)
Else
  MessageRequester("","There is a windowed screen that i dont know how to delete! Please restart the prog! Sorry!")
EndIf
  
EndProcedure

;hndVideoWindow = OpenWindow(#VideoWindow, 0, 0, 777, 555, "VideoWindow", #PB_Window_SystemMenu)
;hndVideoWindow =StartDrawing(WindowOutput(#VideoWindow))

hndMainWindow = OpenWindow(#Window, 0, 0, 777, 777, "MplayerTest", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If hndMainWindow
  CompilerIf #PB_Compiler_Debugger
      sAppPath = GetCurrentDirectory()
  CompilerElse
      sAppPath = GetPathPart(ProgramFilename())
  CompilerEndIf
  
    
  StringGadget(#sgdMplayerPath,10,10,555,18,sMplayerPath)
  ButtonGadget(#btnBrowseMplayerPath,566,10,200,18,"BrowseMplayerPath")
  
  StringGadget(#sgdMp3Path,10,30,555,18,sMp3Path)
  ButtonGadget(#btnBrowseMp3Path,566,30,200,18,"BrowseMp3Path")
  
  StringGadget(#sgdDVDpath,10,50,555,18,sDVDpath)
  ButtonGadget(#btnDVDPath,566,50,200,18,"BrowseDVD_Path")
  
  StringGadget(#sgdAVIpath,10,70,555,18,sAVIpath)
  ButtonGadget(#btnAVIPath,566,70,200,18,"BrowseAVI_Path")
  
  StringGadget(#sgdMpegpath,10,90,555,18,sMpegPath)
  ButtonGadget(#btnMpegPath,566,90,200,18,"BrowseMpegPath")
  
  ButtonGadget(#btnPlayMp3,10,122,200,33,"PlayMp3")
  ButtonGadget(#btnPlayDVD,10,172,200,33,"PlayDVD")
  ButtonGadget(#btnPlayAVI,10,222,200,33,"PlayAVI")
  ButtonGadget(#btnPlayMpeg,10,272,200,33,"PlayMpeg")
  
  ButtonGadget(#btnPlay,10,322,66,33,"Play")
  ButtonGadget(#btnPause,66,322,66,33,"Pause")
  ButtonGadget(#btnStop,132,322,66,33,"Stop")
  
  ButtonGadget(#btnCloseMplayer,10,372,90,33,"Close Mplayer")
  ButtonGadget(#btnClearScreen,120,372,90,33,"Clear Screen")
  
  OptionGadget(#optImage_MEDIA,10,410,99,22,"-wid Image")
  GadgetToolTip(#optImage_MEDIA,"Trying different types of ID for displaying video from Mplayer!")
  OptionGadget(#optImage_MEDIA_ID,110,410,99,22,"ImageID")
  
  OptionGadget(#optImage_MEDIACreationID,10,440,99,22,"ImageCreationID")
  
  OptionGadget(#optImageOutput_ID,110,440,99,22,"ImageOutput_ID")
  OptionGadget(#optImage_MEDIA_startdrawing_ID,10,470,99,22,"Image_startdrawing_ID")
  OptionGadget(#optImageGadget,110,470,99,22,"ImgGadget")
  OptionGadget(#optImageGadgetCreation_ID,10,500,99,22,"ImgGdgCreationID")
  
  OptionGadget(#optWindow,110,500,99,22,"Window_ID")
  OptionGadget(#optWindowCreation_ID,10,530,99,22,"WinCreation_ID")
  GadgetToolTip(#optWindowCreation_ID,"Please press CLEAR_SCREEN :-)")
  OptionGadget(#optWindowOutput_ID,110,530,99,22,"WindowOutput")
  OptionGadget(#optWindowStartdrawing_ID,10,560,99,22,"WindowStartdrawing")
  
  OptionGadget(#optScreen,110,560,99,22,"WindowedScreen")
  OptionGadget(#optDeviceContext,10,590,99,22,"DC")
  GadgetToolTip(#optDeviceContext, "DC aka DeviceContext")
  
  OptionGadget(#optDeviceIndependentBitmap,110,590,99,22,"DIB ala BitBlt")
  DisableGadget(#optDeviceIndependentBitmap,1)
  GadgetToolTip(#optDeviceIndependentBitmap, "DeviceIndependentBitmap")
  
  OptionGadget(#optCanvasGadget,10,620,99,22,"CanvasGadget")
  OptionGadget(#optCanvasGdgCreation_ID,110,620,99,22,"CanvasGdgCreationID")
  GadgetToolTip(#optCanvasGdgCreation_ID,"#optCanvasGdgCreation_ID")
  OptionGadget(#optCanvasGadgetoutput,10,650,99,22,"CanvasOutput")
  OptionGadget(#optCanvasGadgetStartdrawing,110,650,99,22,"CanvasStartdrawing")


  CheckBoxGadget(#chbFlushing,240,122,99,22,"Allow flushing!")
  SetGadgetState(#chbFlushing,#PB_Checkbox_Checked)
  GadgetToolTip(#chbFlushing,"Same result as moving mouse!?")
  
  
  StringGadget(#StringGadgetFlush,350,122,#WinW-350-#MarginR,22,"Why need flushing ReadprogramString OR move mouse!?")
  EditorGadget(#EditorGadget,240,152,#WinW-240-#MarginR,133)
  
     
 If FileSize(sAppPath+"MplayerTest.ini") <> -1
    GetLatestPaths(sAppPath);sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath)
   Else
    CreatePreferences(sAppPath+"MplayerTest.ini")
 EndIf
  
  
  
  Repeat
    lEvent=WaitWindowEvent(500)
  
    Select EventGadget()
       
      ;BROWSER_BUTTONS
      Case  #btnBrowseMplayerPath
        sFile = Browse(sAppPath,"mplayer.exe|mplayer.exe|All files (*.*)|*.*")
        If sFile: sMplayerPath=sFile: AssignPathToString(sFile,#sgdMplayerPath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnBrowseMp3Path
        sFile = Browse(sAppPath,"AudioFile (*.mp3)|*.mp3|All files (*.*)|*.*")
        If sFile: sMp3Path=sFile: AssignPathToString(sFile,#sgdMp3Path,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnDVDPath
        sFile = Browse("C:\",Str(#DVD_Browser))
        If sFile: sDVDpath=sFile: AssignPathToString(sFile,#sgdDVDpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnAVIPath
        sFile = Browse(sAppPath,"VideoFile (*.avi)|*.avi|All files (*.*)|*.*")
        If sFile: sAVIpath=sFile: AssignPathToString(sFile,#sgdAVIpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnMpegPath
        sFile = Browse(sAppPath,"VideoFile (*.mpg)|*.mpg|All files (*.*)|*.*")
        If sFile: sMpegPath=sFile: AssignPathToString(sFile,#sgdMpegpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
      ;PLAY_BUTTONS
      Case #btnPlayMp3
        If AntiGlitches(#btnPlayMp3)
         LoungeMplayer(sMp3Path,sMplayerPath,#mp3)
        EndIf
        
      Case #btnPlayAVI
        If AntiGlitches(#btnPlayAVI)
          LoungeMplayer(sAVIpath,sMplayerPath,#AVI)
        EndIf
      Case #btnPlayDVD
        If AntiGlitches(#btnPlayDVD)
          LoungeMplayer(sDVDpath,sMplayerPath,#DVD)
        EndIf
         
      Case #btnPlayMpeg
         If AntiGlitches(#btnPlayMpeg)
           LoungeMplayer(sMpegPath,sMplayerPath,#Mpeg)
        EndIf
        
      Case #btnPlay
       If AntiGlitches(#btnPlay)
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "play")
         Debug Str(lResult) + " play"
       EndIf
      EndIf;FlagLatestButton<>#btnPlay
    
      Case #btnPause
       If AntiGlitches(#btnPause)
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "pause")
         Debug Str(lResult) + " pause"
       EndIf
      EndIf;FlagLatestButton<>#btnPause
      
    Case #btnStop
       If AntiGlitches(#btnStop)
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "stop")
         Debug Str(lResult) + " stop"
       EndIf
      EndIf;FlagLatestButton<>#btnStop
    
      Case #btnCloseMplayer
        CleanUpMplayer(hndMplayer)
        ;Trying different ID's for displaying video.=============================       
        
      Case #btnClearScreen
        If StartDrawing(WindowOutput(#Window))
          Box(0,0,777,777,#Black)
          StopDrawing()
        EndIf

      Case #optImage_MEDIA
        If AntiGlitches(#optImage_MEDIA)
          CreateImageGadget(#DontStartDrawing)
          hndTest = #imgMovie_MEDIA:Debug "hndTest = #imgMovie_MEDIA = " + Str(hndTest)
        EndIf
        
      Case #optImage_MEDIACreationID
        If AntiGlitches(#optImage_MEDIACreationID)
          hndTest=CreateImageGadget(#DontStartDrawing,#GethndImageCreation)
          Debug "hndTest = Image_MEDIACreationID = " + Str(hndTest)
        EndIf 
       
      Case #optImage_MEDIA_ID
        If AntiGlitches(#optImage_MEDIA_ID)
          CreateImageGadget(#DontStartDrawing)
          hndTest=hndImage_MEDIA:Debug "hndTest = Image_MEDIA_ID = " + Str(hndTest)
        EndIf
        
      Case #optImageOutput_ID
        If AntiGlitches(#optImageOutput_ID)
          ;CreateImageGadget(#StartDrawing)
          CreateImage(#imgMovie_MEDIA,296,222)
          hndTest=ImageOutput(#imgMovie_MEDIA):Debug "hndTest = #optImageOutput_ID = " + Str(hndTest)
        EndIf
        
     Case #optImage_MEDIA_startdrawing_ID
        If AntiGlitches(#optImage_MEDIA_startdrawing_ID)
          CreateImageGadget()
          hndTest = hndImage_MEDIA: Debug "hndTest = #optImage_MEDIA_startdrawing_ID = " + Str(hndTest)
        EndIf
        
      Case #optImageGadget
        If AntiGlitches(#optImageGadget)
          CreateImageGadget()
          hndTest=hndImage_MEDIA:Debug "hndTest = #optImageGadget = " + Str(hndTest)
        EndIf
        
     Case #optImageGadgetCreation_ID
        If AntiGlitches(#optImageGadgetCreation_ID)
          CreateImageGadget()
          hndTest=ImageGadget(#imgGdtMovie,240,312, 296,222,0,#PB_Image_Border)
          Debug "hndTest = #optImageGadgetCreation_ID = " + Str(hndTest)
        EndIf
        
      Case #optWindow
        If AntiGlitches(#optWindow)
          ;CreateImageGadget()
          hndTest=#Window:Debug "hndTest = #optWindow = " + Str(hndTest)
        EndIf
        
        
      Case #optWindowCreation_ID
        If AntiGlitches(#optWindowCreation_ID)
          ;CreateImageGadget()
          hndTest=hndMainWindow:Debug "hndTest = WindowCreation_ID = " + Str(hndTest)
        EndIf       
        
      Case #optWindowOutput_ID
        If AntiGlitches(#optWindowOutput_ID)
          ;CreateImageGadget()
          hndTest = WindowOutput(#Window): Debug "hndTest = WindowOutput(#Window) = " + Str(hndTest)
        EndIf
        
     Case #optWindowStartdrawing_ID
        If AntiGlitches(#optWindowStartdrawing_ID)
          CreateImageGadget()
          StopDrawing();Dirty code.
          hndTest = StartDrawing(WindowOutput(#Window)): Debug "hndTest = #optWindowStartdrawing_ID = " + Str(hndTest)
        EndIf
        
    Case #optScreen
        If AntiGlitches(#optScreen)
          CreateWindowedScreen()
          Debug "hndTest = WindowedScreen_ID = " + Str(hndTest)
        EndIf
        
    Case #optDeviceContext
      If AntiGlitches(#optDeviceContext)
        CreateImageGadget()
        hndTest = GetDC_(GadgetID(#imgGdtMovie))
        Debug "hndTest = #optDeviceContext = " + Str(hndTest)
        EndIf    
        
;     Case #optDeviceIndependentBitmap
;       If AntiGlitches(#optDeviceIndependentBitmap)
;         CreateImageGadget()
;         CreateDIB()
;         Debug "hndTest = #optDeviceIndependentBitmap = " + Str(hndTest)
;         EndIf    

      Case #optCanvasGadget
        If AntiGlitches(#optCanvasGadget)
          CanvasGadget(#CanvasGdg,240,312, 296,222,#PB_Canvas_Border)
          hndTest=#CanvasGdg:Debug "hndTest = #CanvasGdg = " + Str(hndTest)
        EndIf
        
        
      Case #optCanvasGdgCreation_ID
        If AntiGlitches(#optCanvasGdgCreation_ID)
          hndTest = CanvasGadget(#CanvasGdg,240,312, 296,222,#PB_Canvas_Border)
          Debug "hndTest = #optCanvasGdgCreation_ID = " + Str(hndTest)
        EndIf
        
     Case #optCanvasGadgetOutput
       If AntiGlitches(#optCanvasGadgetOutput)
         CanvasGadget(#CanvasGdg,240,312, 296,222,#PB_Canvas_Border)
          hndTest = CanvasOutput(#CanvasGdg): Debug "hndTest = CanvasOutput(#CanvasGdg) = " + Str(hndTest)
        EndIf


    EndSelect
    
   If IsProgram(hndMplayer)
    If ProgramRunning(hndMplayer)
      If AvailableProgramOutput(hndMplayer)
        sOutput = ReadProgramString(hndMplayer) + Chr(13)
        If Left(sOutput,2) = "A:";Filtering the recurring msgs.
          If GetGadgetState(#chbFlushing)
            SetGadgetText(#StringGadgetFlush, sOutput)
          EndIf
         Else
            AddGadgetItem(#EditorGadget, 0, sOutput)
        EndIf
      EndIf;AvailableProgramOutput(hndMplayer)  
     Else;Not programRunning(hndMplayer)
      CloseProgram(hndMplayer);Closes the connection.
    EndIf;ProgramRunning
  EndIf;IsProgram(hndMplayer)
   
  Until lEvent = #PB_Event_CloseWindow
EndIf; OpenWindow
CleanUpMplayer(hndMplayer)
End
Newbie
SiggeSvahn
User
User
Posts: 40
Joined: Wed Oct 06, 2010 9:37 pm

Re: How to control Mplayer

Post by SiggeSvahn »

Problem solved. The instruction is in the presecutive post. Feel free to make lots of creative GUIs for mplayer / mencoder now. :D

Code: Select all

EnableExplicit

Define.s sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath,sFile,sOutput
Define lEvent,FlagLatestButton,hndMplayer,hndImage_MEDIA,hndVideoWindow,hndMainWindow,lResult
Define ElapsedTime,StartTime,hndTest
Define hndWindowedScreen, FlagWindowedScreen
#DVD_Browser=1
#WinW = 777
#MarginR = 22
#ImgGadgetW = 296
#ImgGadgetH = 236

#StartDrawing=#True
#DontStartDrawing=#False
#GethndImageCreation=#True

Enumeration;Windows
#Window
#VideoWindow
#imgScreen
EndEnumeration

Enumeration
  #mp3=1
  #DVD
  #AVI
  #Mpeg
EndEnumeration

Enumeration    ; Gadgets
  #sgdMplayerPath
  #btnBrowseMplayerPath
  #sgdMp3Path
  #btnBrowseMp3Path
  #sgdDVDpath
  #btnDVDPath
  #sgdAVIpath
  #btnAVIPath
  #sgdMpegpath
  #btnMpegPath
  
  #btnPlayMp3
  #btnPlayDVD
  #btnPlayAVI
  #btnPlayMpeg
  
  #btnPlay
  #btnPause
  #btnStop
  #btnCloseMplayer
  #btnClearScreen
  
  #chbFlushing
  #StringGadgetFlush
  #EditorGadget
  #spnZoom
  ;Testing different HANDLES for displaying Mplayer video.
  #optImage_MEDIA
  #optImage_MEDIACreationID
  #optImage_MEDIA_ID
  #optImageOutput_ID
  #optImage_MEDIA_startdrawing_ID
  
  #optImageGadget
  #optImageGadgetCreation_ID
  #optScreen
  
  #optWindow
  #optWindowCreation_ID
  #optWindowOutput_ID
  #optWindowStartdrawing_ID
  
  #optDeviceContext
  #optDeviceIndependentBitmap
  
  #optCanvasGadget
  #optCanvasGdgCreation_ID
  #optCanvasGadgetOutput
  #optCanvasGadgetStartdrawing
  
  #imgGdtMovie
  #CanvasGdg
EndEnumeration

Enumeration;Images
  #imgMovie_MEDIA=1
EndEnumeration

Procedure.l HandleError(Result.l, WarningText.s, lResume=#False)
If Result = 0
 MessageRequester("Error", WarningText, #PB_MessageRequester_Ok)
 If lResume=#False
   End;Stop programme!
 EndIf
EndIf
ProcedureReturn Result
EndProcedure


Procedure.l GetLatestPaths(sAppPath.s);sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)  
 Define lResult
 Shared sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath
 ;Opens too read from the ini-file of the form.
  lResult = OpenPreferences(sAppPath+"MplayerTest.ini")
If lResult
  PreferenceGroup("Latest_Paths")
   sMplayerPath = ReadPreferenceString("sMplayerPath", "")
   sMp3Path = ReadPreferenceString("sMp3Path", "")
   sDVDpath = ReadPreferenceString("sDVDpath", "")
   sAVIpath = ReadPreferenceString("sAVIpath", "")
   sMpegPath = ReadPreferenceString("sMpegPath", "")
   
   SetGadgetText(#sgdMplayerPath,sMplayerPath)
   SetGadgetText(#sgdMp3Path,sMp3Path)
   SetGadgetText(#sgdDVDpath,sDVDpath)
   SetGadgetText(#sgdAVIpath,sAVIpath)
   SetGadgetText(#sgdMpegpath,sMpegPath)
   
   
   ClosePreferences()
EndIf;OpenPreferences

ProcedureReturn lResult
 
EndProcedure

Procedure.l SetLatestPaths(sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)  
 Define lResult.l
  ;Opens to read from the ini-file of the form.
  lResult = OpenPreferences(sAppPath+"MplayerTest.ini")
 If lResult
    PreferenceGroup("Latest_Paths")
     
    WritePreferenceString("sMplayerPath",sMplayerPath)
    WritePreferenceString("sMp3Path",sMp3Path)
    WritePreferenceString("sDVDpath",sDVDpath)
    WritePreferenceString("sAVIpath",sAVIpath)
    WritePreferenceString("sMpegPath",sMpegPath)
          
    ClosePreferences()
  Else
    MessageRequester("Err","OpenPreferences(sAppPath + MplayerTest.ini)")
 EndIf;lResult OpenPreferences
  
  ProcedureReturn lResult
EndProcedure

Procedure.s Browse(sStandardFile.s,sPattern.s)
  Define Pattern.l, sFile.s
  ;sStandardFile is mostly = sAppPath  ; set initial file+path to display
  ; With next string we will set the search patterns ("|" as separator) for file displaying:
  ;  1st: "Text (*.txt)" as name, ".txt" and ".bat" as allowed extension
  ;  2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
  ;  3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
  ;sPattern = "Text (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|All files (*.*)|*.*"
  If sPattern <>Str(#DVD_Browser)
    Pattern = 0    ; use the first of the three possible patterns as standard
    sFile = OpenFileRequester("Please select file!", sStandardFile, sPattern, Pattern)
  Else;#DVD_Browser
    sFile = PathRequester("Please select DVD-Unit!",sStandardFile)
  EndIf
  If sFile = ""
    MessageRequester("Information", "The requester was canceled.", 0) 
  EndIf
ProcedureReturn sFile
EndProcedure

Procedure AssignPathToString(sFile.s,lStrGadget.l,sMplayerPath.s,sMp3Path.s,sDVDpath.s,sAVIpath.s,sMpegPath.s,sAppPath.s)
If sFile
  SetGadgetText(lStrGadget,sFile)
EndIf
SetLatestPaths(sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath)

EndProcedure

Procedure.l AntiGlitches(PressedButton.l)
  Define lResult
  Shared FlagLatestButton
  If PressedButton<>FlagLatestButton
    FlagLatestButton=PressedButton
    lResult=#True
  Else
    lResult=#False
  EndIf
  ProcedureReturn lResult
  
EndProcedure

Procedure.s ShortPath(sFile.s)
  ;DOS-format for For mplayer and FFmeg etc
Define sBuffer.s, ResultLength.l, s.s
  sBuffer = Space(255)
  ResultLength = GetShortPathName_(sFile, @sBuffer, 255)
  s = Left(sBuffer, ResultLength)
  ProcedureReturn s
  
EndProcedure


Procedure LoungeMplayer(sFile.s,sMplayerPath.s,FlagMediaType.l)
  Shared hndMplayer,hndImage_MEDIA,hndVideoWindow,hndWindowedScreen,hndTest
If sMplayerPath
  If sFile
    Select FlagMediaType
        Case #DVD;Not a file but a folder, probably the DVD root.
     ;RunProgram("H:\Programvara\VideoProgram\Mplayer 2007\GUI\MPUI\mplayer.exe", "-slave -identify -wid " + Str(hndImage_MEDIA) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","");
     RunProgram(sMplayerPath, "-slave -identify -wid " + Str(hndWindowedScreen) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
     ;RunProgram(sMplayerPath, "-slave -identify -wid " + Str(hndVideoWindow) + " -colorkey 0x101010 -nokeepaspect -framedrop -autosync 100 -vf screenshot -font C:\WINDOWS\Fonts\Arial.ttf -priority abovenormal -ao dsound:device=0 -autoq 10 -vf-add pp -dvd-device E:\ dvd://","")
     ;RunProgram(sMplayerPath, "-slave -quiet -dvd-device " + ShortPath(sFile) + " dvd:\\","")
      Case #mp3
        hndMplayer = RunProgram(sMplayerPath, ShortPath(sFile),"")
     Default;#AVI, #Mpeg
       ;hndMplayer = RunProgram(sMplayerPath, " -slave -wid " + Str(hndTest) + " -vo directx -nocolorkey " + ShortPath(sFile),"",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
       hndMplayer = RunProgram(sMplayerPath, " -slave -wid " + Str(hndTest) + " -geometry 240:312" + " -vo directx -nocolorkey -xy "+ Str(#ImgGadgetW) + " " + ShortPath(sFile),"",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
     EndSelect;FlagMediaType
  EndIf;sFile
Else
  MessageRequester("Err","Please locate the sMplayerPath!")
EndIf;sMplayerPath
EndProcedure 

Procedure CleanUpMplayer(hndMplayer.l)
  StopDrawing()
  If IsProgram(hndMplayer)
   KillProgram(hndMplayer);Terminator
   CloseProgram(hndMplayer);Closes the connection.
 EndIf
EndProcedure  

Procedure CreateWindowedScreen()
  Shared hndWindowedScreen,lResult,FlagWindowedScreen
  FreeGadget(#imgGdtMovie);deleting! I need the space for my WindowedScreen.
  
If InitSprite() = 0;NEEDED FOR WINDOWED SCREEN!
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
    End
EndIf
hndWindowedScreen=WindowID(#Window)
lResult = OpenWindowedScreen(hndWindowedScreen, 240,312, #WinW-240-#MarginR,222, #False, 0, 0)
FlagWindowedScreen=#True
EndProcedure

Procedure.l CreateImageGadget(FlagStartDrawing.l=#True,GethndImageCreation=#False)
  Define hndImageCreation
  Shared FlagWindowedScreen,hndImage_MEDIA
If FlagWindowedScreen = #False
 hndImageCreation = CreateImage(#imgMovie_MEDIA,296,222)
;=============================================
hndImage_MEDIA = ImageID(#imgMovie_MEDIA);   = NECESSARY AND I DONT KNOW WHY!:-<
;=============================================
  If FlagStartDrawing
    StopDrawing();dirty code
    hndImage_MEDIA=StartDrawing(ImageOutput(#imgMovie_MEDIA))
  EndIf
    ImageGadget(#imgGdtMovie,240,312, 296,236,ImageID(#imgMovie_MEDIA),#PB_Image_Border)
Else
  MessageRequester("","There is a windowed screen that i dont know how to delete! Please restart the prog! Sorry!")
EndIf

If GethndImageCreation
  ProcedureReturn hndImageCreation
EndIf

EndProcedure

Procedure CreateDIB()
  
  
  
EndProcedure

Procedure CreateCanvasGadget(FlagStartDrawing.l=#True)
  Shared FlagWindowedScreen,hndImage_MEDIA
If FlagWindowedScreen = #False
  CreateImage(#imgMovie_MEDIA,296,222)
;=============================================
hndImage_MEDIA = ImageID(#imgMovie_MEDIA);   = NECESSARY AND I DONT KNOW WHY!:-<
;=============================================
  If FlagStartDrawing
    StopDrawing();dirty code
    hndImage_MEDIA=StartDrawing(ImageOutput(#imgMovie_MEDIA))
  EndIf
    ImageGadget(#imgGdtMovie,240,312, 296,222,ImageID(#imgMovie_MEDIA),#PB_Image_Border)
Else
  MessageRequester("","There is a windowed screen that i dont know how to delete! Please restart the prog! Sorry!")
EndIf
  
EndProcedure

;hndVideoWindow = OpenWindow(#VideoWindow, 0, 0, 777, 555, "VideoWindow", #PB_Window_SystemMenu)
;hndVideoWindow =StartDrawing(WindowOutput(#VideoWindow))

hndMainWindow = OpenWindow(#Window, 0, 0, 777, 777, "MplayerTest", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If hndMainWindow
  CompilerIf #PB_Compiler_Debugger
      sAppPath = GetCurrentDirectory()
  CompilerElse
      sAppPath = GetPathPart(ProgramFilename())
  CompilerEndIf
  
    
  StringGadget(#sgdMplayerPath,10,10,555,18,sMplayerPath)
  ButtonGadget(#btnBrowseMplayerPath,566,10,200,18,"BrowseMplayerPath")
  
  StringGadget(#sgdMp3Path,10,30,555,18,sMp3Path)
  ButtonGadget(#btnBrowseMp3Path,566,30,200,18,"BrowseMp3Path")
  
  StringGadget(#sgdDVDpath,10,50,555,18,sDVDpath)
  ButtonGadget(#btnDVDPath,566,50,200,18,"BrowseDVD_Path")
  
  StringGadget(#sgdAVIpath,10,70,555,18,sAVIpath)
  ButtonGadget(#btnAVIPath,566,70,200,18,"BrowseAVI_Path")
  
  StringGadget(#sgdMpegpath,10,90,555,18,sMpegPath)
  ButtonGadget(#btnMpegPath,566,90,200,18,"BrowseMpegPath")
  
  ButtonGadget(#btnPlayMp3,10,122,200,33,"PlayMp3")
  ButtonGadget(#btnPlayDVD,10,172,200,33,"PlayDVD")
  ButtonGadget(#btnPlayAVI,10,222,200,33,"PlayAVI")
  ButtonGadget(#btnPlayMpeg,10,272,200,33,"PlayMpeg")
  
  ButtonGadget(#btnPlay,10,322,66,33,"Play")
  ButtonGadget(#btnPause,66,322,66,33,"Pause")
  ButtonGadget(#btnStop,132,322,66,33,"Stop")
  
  ButtonGadget(#btnCloseMplayer,10,372,90,33,"Close Mplayer")
  ButtonGadget(#btnClearScreen,120,372,90,33,"Clear Screen")
  
  OptionGadget(#optImage_MEDIA,10,410,99,22,"-wid Image")
  GadgetToolTip(#optImage_MEDIA,"Trying different types of ID for displaying video from Mplayer!")
  OptionGadget(#optImage_MEDIA_ID,110,410,99,22,"ImageID")
  
  OptionGadget(#optImage_MEDIACreationID,10,440,99,22,"ImageCreationID")
  
  OptionGadget(#optImageOutput_ID,110,440,99,22,"ImageOutput_ID")
  OptionGadget(#optImage_MEDIA_startdrawing_ID,10,470,99,22,"Image_startdrawing_ID")
  OptionGadget(#optImageGadget,110,470,99,22,"ImgGadget")
  OptionGadget(#optImageGadgetCreation_ID,10,500,99,22,"ImgGdgCreationID")
  
  OptionGadget(#optWindow,110,500,99,22,"Window_ID")
  OptionGadget(#optWindowCreation_ID,10,530,99,22,"WinCreation_ID")
  GadgetToolTip(#optWindowCreation_ID,"Please press CLEAR_SCREEN :-)")
  OptionGadget(#optWindowOutput_ID,110,530,99,22,"WindowOutput")
  OptionGadget(#optWindowStartdrawing_ID,10,560,99,22,"WindowStartdrawing")
  
  OptionGadget(#optScreen,110,560,99,22,"WindowedScreen")
  OptionGadget(#optDeviceContext,10,590,99,22,"DC")
  GadgetToolTip(#optDeviceContext, "DC aka DeviceContext")
  
  OptionGadget(#optDeviceIndependentBitmap,110,590,99,22,"DIB ala BitBlt")
  DisableGadget(#optDeviceIndependentBitmap,1)
  GadgetToolTip(#optDeviceIndependentBitmap, "DeviceIndependentBitmap")
  
  OptionGadget(#optCanvasGadget,10,620,99,22,"CanvasGadget")
  OptionGadget(#optCanvasGdgCreation_ID,110,620,99,22,"CanvasGdgCreationID")
  GadgetToolTip(#optCanvasGdgCreation_ID,"#optCanvasGdgCreation_ID")
  OptionGadget(#optCanvasGadgetoutput,10,650,99,22,"CanvasOutput")
  OptionGadget(#optCanvasGadgetStartdrawing,110,650,99,22,"CanvasStartdrawing")


  CheckBoxGadget(#chbFlushing,240,122,99,22,"Allow flushing!")
  SetGadgetState(#chbFlushing,#PB_Checkbox_Checked)
  GadgetToolTip(#chbFlushing,"Same result as moving mouse!?")
  
  
  StringGadget(#StringGadgetFlush,350,122,#WinW-350-#MarginR,22,"Why need flushing ReadprogramString OR move mouse!?")
  EditorGadget(#EditorGadget,240,152,#WinW-240-#MarginR,133)
  SpinGadget(#spnZoom,240, 152+133+12,44,22,1,8,#PB_Spin_ReadOnly | #PB_Spin_Numeric)
  GadgetToolTip(#spnZoom,"Zoom video from 1 to 8!")
  SetGadgetState(#spnZoom,2)
  
     
 If FileSize(sAppPath+"MplayerTest.ini") <> -1
    GetLatestPaths(sAppPath);sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath)
   Else
    CreatePreferences(sAppPath+"MplayerTest.ini")
 EndIf
  
  
  
  Repeat
    lEvent=WaitWindowEvent(500)
  
    Select EventGadget()
       
      ;BROWSER_BUTTONS
      Case  #btnBrowseMplayerPath
        sFile = Browse(sAppPath,"mplayer.exe|mplayer.exe|All files (*.*)|*.*")
        If sFile: sMplayerPath=sFile: AssignPathToString(sFile,#sgdMplayerPath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnBrowseMp3Path
        sFile = Browse(sAppPath,"AudioFile (*.mp3)|*.mp3|All files (*.*)|*.*")
        If sFile: sMp3Path=sFile: AssignPathToString(sFile,#sgdMp3Path,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnDVDPath
        sFile = Browse("C:\",Str(#DVD_Browser))
        If sFile: sDVDpath=sFile: AssignPathToString(sFile,#sgdDVDpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnAVIPath
        sFile = Browse(sAppPath,"VideoFile (*.avi)|*.avi|All files (*.*)|*.*")
        If sFile: sAVIpath=sFile: AssignPathToString(sFile,#sgdAVIpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
        
      Case #btnMpegPath
        sFile = Browse(sAppPath,"VideoFile (*.mpg)|*.mpg|All files (*.*)|*.*")
        If sFile: sMpegPath=sFile: AssignPathToString(sFile,#sgdMpegpath,sMplayerPath,sMp3Path,sDVDpath,sAVIpath,sMpegPath,sAppPath):EndIf
      ;PLAY_BUTTONS
      Case #btnPlayMp3
        If AntiGlitches(#btnPlayMp3)
         LoungeMplayer(sMp3Path,sMplayerPath,#mp3)
        EndIf
        
      Case #btnPlayAVI
        If AntiGlitches(#btnPlayAVI)
          LoungeMplayer(sAVIpath,sMplayerPath,#AVI)
        EndIf
      Case #btnPlayDVD
        If AntiGlitches(#btnPlayDVD)
          LoungeMplayer(sDVDpath,sMplayerPath,#DVD)
        EndIf
         
      Case #btnPlayMpeg
         If AntiGlitches(#btnPlayMpeg)
           LoungeMplayer(sMpegPath,sMplayerPath,#Mpeg)
        EndIf
        
      Case #btnPlay
       If AntiGlitches(#btnPlay)
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "play")
         Debug Str(lResult) + " play"
       EndIf
      EndIf;FlagLatestButton<>#btnPlay
    
      Case #btnPause
       If AntiGlitches(#btnPause)
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "pause")
         Debug Str(lResult) + " pause"
       EndIf
      EndIf;FlagLatestButton<>#btnPause
      
    Case #btnStop
       If AntiGlitches(#btnStop)
        If IsProgram(hndMplayer)
         lResult=WriteProgramStringN(hndMplayer, "stop")
         Debug Str(lResult) + " stop"
       EndIf
      EndIf;FlagLatestButton<>#btnStop
    
      Case #btnCloseMplayer
        CleanUpMplayer(hndMplayer)
        ;Trying different ID's for displaying video.=============================       
        
      Case #btnClearScreen
        If StartDrawing(WindowOutput(#Window))
          ;Box(0,0,777,777,#Black)
          Box(240,312,#ImgGadgetW,#ImgGadgetH,#Black)
          StopDrawing()
        EndIf

      Case #optImage_MEDIA
        If AntiGlitches(#optImage_MEDIA)
          CreateImageGadget(#DontStartDrawing)
          hndTest = #imgMovie_MEDIA:Debug "hndTest = #imgMovie_MEDIA = " + Str(hndTest)
        EndIf
        
      Case #optImage_MEDIACreationID
        If AntiGlitches(#optImage_MEDIACreationID)
          hndTest=CreateImageGadget(#DontStartDrawing,#GethndImageCreation)
          Debug "hndTest = Image_MEDIACreationID = " + Str(hndTest)
        EndIf 
       
      Case #optImage_MEDIA_ID
        If AntiGlitches(#optImage_MEDIA_ID)
          CreateImageGadget(#DontStartDrawing)
          hndTest=hndImage_MEDIA:Debug "hndTest = Image_MEDIA_ID = " + Str(hndTest)
        EndIf
        
      Case #optImageOutput_ID
        If AntiGlitches(#optImageOutput_ID)
          ;CreateImageGadget(#StartDrawing)
          CreateImage(#imgMovie_MEDIA,296,222)
          hndTest=ImageOutput(#imgMovie_MEDIA):Debug "hndTest = #optImageOutput_ID = " + Str(hndTest)
        EndIf
        
     Case #optImage_MEDIA_startdrawing_ID
        If AntiGlitches(#optImage_MEDIA_startdrawing_ID)
          CreateImageGadget()
          hndTest = hndImage_MEDIA: Debug "hndTest = #optImage_MEDIA_startdrawing_ID = " + Str(hndTest)
        EndIf
        
      Case #optImageGadget
        If AntiGlitches(#optImageGadget)
          CreateImageGadget()
          hndTest=hndImage_MEDIA:Debug "hndTest = #optImageGadget = " + Str(hndTest)
        EndIf
        
     Case #optImageGadgetCreation_ID
        If AntiGlitches(#optImageGadgetCreation_ID)
          CreateImageGadget()
          hndTest=ImageGadget(#imgGdtMovie,240,312, 296,222,0,#PB_Image_Border)
          Debug "hndTest = #optImageGadgetCreation_ID = " + Str(hndTest)
        EndIf
        
      Case #optWindow
        If AntiGlitches(#optWindow)
          ;CreateImageGadget()
          hndTest=#Window:Debug "hndTest = #optWindow = " + Str(hndTest)
        EndIf
        
        
      Case #optWindowCreation_ID
        If AntiGlitches(#optWindowCreation_ID)
          ;CreateImageGadget()
          hndTest=hndMainWindow:Debug "hndTest = WindowCreation_ID = " + Str(hndTest)
        EndIf       
        
      Case #optWindowOutput_ID
        If AntiGlitches(#optWindowOutput_ID)
          ;CreateImageGadget()
          hndTest = WindowOutput(#Window): Debug "hndTest = WindowOutput(#Window) = " + Str(hndTest)
        EndIf
        
     Case #optWindowStartdrawing_ID
        If AntiGlitches(#optWindowStartdrawing_ID)
          CreateImageGadget()
          StopDrawing();Dirty code.
          hndTest = StartDrawing(WindowOutput(#Window)): Debug "hndTest = #optWindowStartdrawing_ID = " + Str(hndTest)
        EndIf
        
    Case #optScreen
        If AntiGlitches(#optScreen)
          CreateWindowedScreen()
          Debug "hndTest = WindowedScreen_ID = " + Str(hndTest)
        EndIf
        
    Case #optDeviceContext
      If AntiGlitches(#optDeviceContext)
        CreateImageGadget()
        hndTest = GetDC_(GadgetID(#imgGdtMovie))
        Debug "hndTest = #optDeviceContext = " + Str(hndTest)
        EndIf    
        
;     Case #optDeviceIndependentBitmap
;       If AntiGlitches(#optDeviceIndependentBitmap)
;         CreateImageGadget()
;         CreateDIB()
;         Debug "hndTest = #optDeviceIndependentBitmap = " + Str(hndTest)
;         EndIf    

      Case #optCanvasGadget
        If AntiGlitches(#optCanvasGadget)
          CanvasGadget(#CanvasGdg,240,312, 296,222,#PB_Canvas_Border)
          hndTest=#CanvasGdg:Debug "hndTest = #CanvasGdg = " + Str(hndTest)
        EndIf
        
        
      Case #optCanvasGdgCreation_ID
        If AntiGlitches(#optCanvasGdgCreation_ID)
          hndTest = CanvasGadget(#CanvasGdg,240,312, 296,222,#PB_Canvas_Border)
          Debug "hndTest = #optCanvasGdgCreation_ID = " + Str(hndTest)
        EndIf
        
     Case #optCanvasGadgetOutput
       If AntiGlitches(#optCanvasGadgetOutput)
         CanvasGadget(#CanvasGdg,240,312, 296,222,#PB_Canvas_Border)
          hndTest = CanvasOutput(#CanvasGdg): Debug "hndTest = CanvasOutput(#CanvasGdg) = " + Str(hndTest)
        EndIf


    EndSelect
    
   If IsProgram(hndMplayer)
    If ProgramRunning(hndMplayer)
      If AvailableProgramOutput(hndMplayer)
        sOutput = ReadProgramString(hndMplayer) + Chr(13)
        If Left(sOutput,2) = "A:";Filtering the recurring msgs.
          If GetGadgetState(#chbFlushing)
            SetGadgetText(#StringGadgetFlush, sOutput)
          EndIf
         Else
            AddGadgetItem(#EditorGadget, 0, sOutput)
        EndIf
      EndIf;AvailableProgramOutput(hndMplayer)  
     Else;Not programRunning(hndMplayer)
      CloseProgram(hndMplayer);Closes the connection.
    EndIf;ProgramRunning
  EndIf;IsProgram(hndMplayer)
   
  Until lEvent = #PB_Event_CloseWindow
EndIf; OpenWindow
CleanUpMplayer(hndMplayer)
End
Newbie
User avatar
utopiomania
Addict
Addict
Posts: 1655
Joined: Tue May 10, 2005 10:00 pm
Location: Norway

Re: How to control Mplayer

Post by utopiomania »

Thanks!

But, it reports an incorrect number of parameters in this api call:

Code: Select all

            If PtInRect_(@ExplorerBarGadget_Groups()\HotSpot, pt\x, pt\y)
Edit, I use 4.51
SiggeSvahn
User
User
Posts: 40
Joined: Wed Oct 06, 2010 9:37 pm

Re: How to control Mplayer

Post by SiggeSvahn »

@utopiomania: I'm a newbie. What does that API-call do? It does not exist in my code so it must be your own creation. (By the way I use PB4.60 Beta 1)
Newbie
User avatar
utopiomania
Addict
Addict
Posts: 1655
Joined: Tue May 10, 2005 10:00 pm
Location: Norway

Re: How to control Mplayer

Post by utopiomania »

Sorry, had several tabs w code open and clicked run with the wrong one accidentally opened. :oops:

Thanks again for the code samples :)
SiggeSvahn
User
User
Posts: 40
Joined: Wed Oct 06, 2010 9:37 pm

Re: How to control Mplayer

Post by SiggeSvahn »

You're welcome
// Sigge
Newbie
Post Reply