' ------------------------------------- ' 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