' -------------------------------------
' Event notification script for ReClock
' -------------------------------------
'
' This script will be called when ReClock change the media adaptation of a played file
' either automatically or after some manual change made in the properties panel
' It is called only for media file which contain a video stream, and when frame rate of this file is known
'
' ---------------------------------------------------------------------------------------------
' The 7 parameters received by this script are explained below:
'
' (1) contains the event name that just occurred:
' - "GREEN" : tray icon just got green (all is fine). Parameter
' - "YELLOW" : tray icon just got yellow. We should make what is necessary
' to change the monitor refresh rate
' - "STOP" : playback just stopped
' - "QUIT" : ReClock is about to quit
'
' Parameters (2), (3), (8) and (9) apply only with "GREEN" and "YELLOW" events. Otherwise they contain "-"
'
' (2) contains the type of media file currently played :
' - "CINEMA" : frame rate of source file is around 24 fps
' - "PAL" : frame rate of source file is around 25 fps
' - "NTSC" : frame rate of source file is around 30 fps
' - "CUSTOM" : frame rate of source file does not fall in previous categories
'
' (3) contains the current sound playback mode (apply only with GREEN/YELLOW event):
' - "PCM" : PCM mode
' - "SPDIF" : AC3 passthrough SPDIF
'
' (4) contains the current monitor selected for playback (1=primary, 2=secondary, etc...)
'
' (5) contains the total monitor count detected in the system
'
' (6) contains the current resolution of your monitor (WIDTHxHEIGHT)
'
' (7) contains the current refresh rate of your monitor (in Hz)
'
' (8) contains the original playback rate of the file (in fps multiplied by 1000)
'
' (9) contains the current playback rate of the file (in fps multiplied by 1000)
'
' (10) contains the filename of the current media file
'
' ---------------------------------------------------------------------------------------------
' Notifications examples:
' - GREEN CINEMA PCM 1 1 1024x768 72 23976 24000 c:\test.avi : all is good
' - GREEN NTSC PCM 1 1 1024x768 60 29970 30000 c:\test.avi : all is good
' - YELLOW PAL SPDIF 1 1 1024x768 72 25000 25000 c:\test.avi : please switch to a multiple of 25 hz since PAL
wants 25 fps
' - YELLOW CINEMA SPDIF 1 1 1024x768 75 23976 23976 c:\test.avi : please switch to 71.928 hz
'
' ---------------------------------------------------------------------------------------------
' Here is a sample in VbScript that will call Powerstrip to change the monitor refresh rate
' using the /T parameter (to obtain the timings parameters go to the timings setup in powerstrip and copy
' them to the clipboard)
' There is a VERY important thing to note. Powerstrip change the timings directly in the hardware, but
' forget to notify Windows applications it did that (including ReClock). So this script MUST exit with
' an exit code of 0 if it did change the configuration with powerstrip. Otherwise the script should
' return 1
' Decode the parameters
Set objArgs = WScript.Arguments
If objArgs.Count < 10 Then
MsgBox "Bad argument count !", MB_OK, "ReClock Event Notification"
' We have done nothing. Return 1 to indicate ReClock that
' the configuration has not changed
WScript.Quit 1
End If
eventName = objArgs(0)
mediaType = objArgs(1)
soundMode = objArgs(2)
currentMonitor = objArgs(3)
totalMonitorCount = objArgs(4)
currentResolution = objArgs(5)
currentRefreshRate = objArgs(6)
originalPlaybackSpeed = objArgs(7)
currentPlaybackSpeed = objArgs(8)
currentMediaFile = objArgs(9)
' If you need to debug, replace false with true in the following line
if false Then MsgBox _
eventName & " " & _
mediaType & " " & _
soundMode & " " & _
currentMonitor & " " & _
totalMonitorCount & " " & _
currentResolution & " " & _
currentRefreshRate & " " & _
originalPlaybackSpeed & " " & _
currentPlaybackSpeed, _
MB_OK, "ReClock Event Notification"
' Here is a sample of what can be done with PowerStrip
Set wshShell = CreateObject("WScript.Shell")
' We will put new timings here if necessary
newTimings = ""
' Obviously we have something to do only if the icon is yellow
If eventName = "YELLOW" Then
If soundMode = "PCM" Then
' Call the profile that match best what we need in PCM mode
Select Case mediaType & ":" & currentResolution
Case "CINEMA:1280x720"
If currentRefreshRate <> "48" Then WshShell.Run "C:\48.lnk"
Case "PAL:1280x720"
If currentRefreshRate <> "50" Then WshShell.Run "C:\50.lnk"
Case "NTSC:1280x720"
If currentRefreshRate <> "60" Then WshShell.Run "C:\60.lnk"
End Select
WScript.Quit 0
ElseIf soundMode = "SPDIF" Then
' In SPDIF mode we need an exact multiple to minimize the drops/repeats
' Note: be careful in NTSC mode, because if "currentRefreshRate" is already "60"
' when we go here then we won't switch but it may be 60 "bad" hz instead of 59.94 "wanted" hz
' The same problem exists for NTSC film (23.976fps)
' A solution is to force settings in the GREEN icon notification, but that would mean a pause
' each time we play a file with SPDIF ...
' That's why we use 59.94 hz and 71.928 hz for PCM too so we will never user 60 and 72 hz
Select Case currentResolution & "x" & originalPlaybackSpeed
Case "CINEMA:1280x720"
If currentRefreshRate <> "48" Then WshShell.Run "C:\48.lnk"
Case "PAL:1280x720"
If currentRefreshRate <> "50" Then WshShell.Run "C:\50.lnk"
Case "NTSC:1280x720"
If currentRefreshRate <> "60" Then WshShell.Run "C:\60.lnk"
End Select
WScript.Quit 0
End if
End If
' Note: This didn't work for me in MediaPortal so I commented it out and now it works just fine.
' We quit the player, restore our favorite refresh rate and/or resolution
' If eventName = "QUIT" Then
'
' Select Case currentResolution
' Case "1280x720"
' If currentRefreshRate <> "60" Then WshShell.Run "C:\60.lnk"
' End Select
'
' End If
' Do we have new timings to apply ?
If newTimings <> "" Then
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(&H26&)
Set objFolderItem = objFolder.Self
' We will call Powerstrip 2 times
' In the second call, we will ask Powerstrip to change refresh rate/resolution
' and wait for it to finish the job. If Powerstrip would not be launched before, it would not
' return from this call leaving this VBS script stuck. That's why we make this first call to
' make sure that it is actually available (but we launch it only if it's not already running)
Do While Not wshShell.AppActivate ("pstrip") ' it has a hidden window called with this name
WshShell.Run """" & objFolderItem.Path & _
"\PowerStrip\pstrip.exe"""
WScript.Sleep(2000)
Loop
' Now run Powerstrip command and wait for it to finish its job
WshShell.Run """" & objFolderItem.Path & _
"\PowerStrip\pstrip.exe"" /TARGET:" & currentMonitor & _
" /T:" & newTimings, 0, true
' In case we did a configuration change we MUST return 0 to
' indicate ReClock it need to recalibrate itself.
' However, I found no way to check that Powerstrip did the job correctly ...
WScript.Quit 0
End If
' We have done nothing. Return 1 to indicate ReClock that
' the configuration has not changed
WScript.Quit 1