[Mediaportal-svn] r24921 - in trunk/mediaportal: Core.cpp Core.cpp/DirectShowHelper/bin/Debug Core
Turn your PC into a very advanced MediaCenter/HTPC
Brought to you by:
gereonheitmann,
morpheus_xx
From: <tou...@te...> - 2010-01-31 09:34:59
|
Author: tourettes_ Date: 2010-01-31 10:37:22 +0100 (Sun, 31 Jan 2010) New Revision: 24921 Added: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/ trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/Win7RefreshRateHelper.sln trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/Win7RefreshRateHelper.vcproj trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/ trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Debug/ trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Debug/Win7RefreshRateHelper.dll trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Debug/Win7RefreshRateHelper.pdb trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Debug/vc90.pdb trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Release/ trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Release/Win7RefreshRateHelper.dll trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Release/vc90.idb trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/ trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.cpp trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.def trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.h Modified: trunk/mediaportal/Core.cpp/Core.cpp.sln trunk/mediaportal/Core.cpp/DirectShowHelper/bin/Debug/dshowhelper.dll trunk/mediaportal/Core.cpp/DirectShowHelper/bin/Debug/dshowhelper.pdb trunk/mediaportal/Core.cpp/DirectShowHelper/bin/Debug/vc90.pdb trunk/mediaportal/Core.cpp/DirectShowHelper/bin/Release/dshowhelper.dll trunk/mediaportal/Core.cpp/DirectShowHelper/source/EVRCustomPresenter.cpp trunk/mediaportal/Core.cpp/DirectShowHelper/source/EVRCustomPresenter.h trunk/mediaportal/Core.cpp/DirectShowHelper/source/dshowhelper.cpp trunk/mediaportal/Core.cpp/DirectShowHelper/source/dshowhelper.h trunk/mediaportal/Setup/setup.nsi trunk/mediaportal/xbmc/PostBuild.bat Log: Fixed Mantis issue: 0002670: EVR presenter doesn't see the real refresh rate Modified: trunk/mediaportal/Core.cpp/Core.cpp.sln =================================================================== --- trunk/mediaportal/Core.cpp/Core.cpp.sln 2010-01-30 23:42:39 UTC (rev 24920) +++ trunk/mediaportal/Core.cpp/Core.cpp.sln 2010-01-31 09:37:22 UTC (rev 24921) @@ -6,6 +6,8 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fontEngine", "fontEngine\fontEngine.vcproj", "{C3CD9ACF-E025-465C-8B07-4F53CF33003F}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Win7RefreshRateHelper", "Win7RefreshRateHelper\Win7RefreshRateHelper.vcproj", "{CDE13610-062F-4DC8-B2BE-99EECA9AAA3E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Modified: trunk/mediaportal/Core.cpp/DirectShowHelper/bin/Debug/dshowhelper.dll =================================================================== (Binary files differ) Modified: trunk/mediaportal/Core.cpp/DirectShowHelper/bin/Debug/dshowhelper.pdb =================================================================== (Binary files differ) Modified: trunk/mediaportal/Core.cpp/DirectShowHelper/bin/Debug/vc90.pdb =================================================================== (Binary files differ) Modified: trunk/mediaportal/Core.cpp/DirectShowHelper/bin/Release/dshowhelper.dll =================================================================== (Binary files differ) Modified: trunk/mediaportal/Core.cpp/DirectShowHelper/source/EVRCustomPresenter.cpp =================================================================== --- trunk/mediaportal/Core.cpp/DirectShowHelper/source/EVRCustomPresenter.cpp 2010-01-30 23:42:39 UTC (rev 24920) +++ trunk/mediaportal/Core.cpp/DirectShowHelper/source/EVRCustomPresenter.cpp 2010-01-31 09:37:22 UTC (rev 24921) @@ -15,6 +15,7 @@ // along with MediaPortal. If not, see <http://www.gnu.org/licenses/>. #include "StdAfx.h" + #include <streams.h> #include <atlbase.h> #include <d3dx9.h> @@ -53,17 +54,18 @@ CoTaskMemFree(str); } -MPEVRCustomPresenter::MPEVRCustomPresenter(IVMR9Callback* pCallback, IDirect3DDevice9* direct3dDevice, HMONITOR monitor, IBaseFilter* EVRFilter): +MPEVRCustomPresenter::MPEVRCustomPresenter(IVMR9Callback* pCallback, IDirect3DDevice9* direct3dDevice, HMONITOR monitor, IBaseFilter* EVRFilter, BOOL pIsWin7): m_refCount(1), m_qScheduledSamples(NUM_SURFACES), - m_EVRFilter(EVRFilter) + m_EVRFilter(EVRFilter), + m_bIsWin7(pIsWin7) { timeBeginPeriod(1); if (m_pMFCreateVideoSampleFromSurface != NULL) { HRESULT hr; LogRotate(); - Log("----------v0.5---------------------------"); + Log("----------v0.6---------------------------"); m_hMonitor = monitor; m_pD3DDev = direct3dDevice; hr = m_pDXVA2CreateDirect3DDeviceManager9(&m_iResetToken, &m_pDeviceManager); @@ -1417,7 +1419,7 @@ // TODO add 2nd monitor support ResetTraceStats(); - //EstimateRefreshTimings(); + EstimateRefreshTimings(); break; case MFVP_MESSAGE_ENDSTREAMING: @@ -1657,7 +1659,7 @@ if (m_dD3DRefreshRate == 0) { - GetRefreshRateDwm(); + GetRealRefreshRate(); } // Raster offset target @@ -2026,41 +2028,6 @@ } -// get composition refresh rate -void MPEVRCustomPresenter::GetRefreshRateDwm() -{ - if (m_pDwmGetCompositionTimingInfo) - { - HRESULT hr; - DWM_TIMING_INFO timingInfo; - - ZeroMemory(&timingInfo, sizeof(timingInfo)); - timingInfo.cbSize = sizeof(timingInfo); - hr = m_pDwmGetCompositionTimingInfo(GetActiveWindow(), &timingInfo); - if (SUCCEEDED(hr)) - { - m_dD3DRefreshRate = (double)timingInfo.rateRefresh.uiNumerator / (double)timingInfo.rateRefresh.uiDenominator; - m_dD3DRefreshCycle = 1000.0 / m_dD3DRefreshRate; - - m_dDetectedScanlineTime = m_dD3DRefreshCycle / m_displayMode.Height; - - Log("DwmGetCompositionTimingInfo() returned refresh rate %.3f", m_dD3DRefreshRate); - } - else - { - m_dD3DRefreshRate = (double)m_displayMode.RefreshRate; - m_dD3DRefreshCycle = 1000.0 / m_dD3DRefreshRate; // In ms - Log("DwmGetCompositionTimingInfo() failed - using inaccurate DirectX timing info"); - } - } - else // XP - { - m_dD3DRefreshRate = (double)m_displayMode.RefreshRate; - m_dD3DRefreshCycle = 1000.0 / m_dD3DRefreshRate; // In ms - } -} - - // Update the array m_pllJitter with a new vsync period. Calculate min, max and stddev. void MPEVRCustomPresenter::CalculateJitter(LONGLONG PerfCounter) { @@ -2393,3 +2360,25 @@ } LOG_TRACE("EVR: Time: %f %f %f\n", Time / 10000000.0, SetDuration / 10000000.0, m_DetectedFrameRate); } + + +// get driver refresh rate +void MPEVRCustomPresenter::GetRealRefreshRate() +{ + // Win7 + if (m_bIsWin7 && m_pW7GetRefreshRate) + { + m_dD3DRefreshRate = m_pW7GetRefreshRate(); + + if (m_dD3DRefreshRate == -1) + { + m_dD3DRefreshRate = (double)m_displayMode.RefreshRate; + } + } + else // XP or Vista + { + m_dD3DRefreshRate = (double)m_displayMode.RefreshRate; + } + m_dD3DRefreshCycle = 1000.0 / m_dD3DRefreshRate; // in ms +} + Modified: trunk/mediaportal/Core.cpp/DirectShowHelper/source/EVRCustomPresenter.h =================================================================== --- trunk/mediaportal/Core.cpp/DirectShowHelper/source/EVRCustomPresenter.h 2010-01-30 23:42:39 UTC (rev 24920) +++ trunk/mediaportal/Core.cpp/DirectShowHelper/source/EVRCustomPresenter.h 2010-01-31 09:37:22 UTC (rev 24921) @@ -54,7 +54,6 @@ MP_RENDER_STATE_SHUTDOWN }; - typedef struct _SchedulerParams { MPEVRCustomPresenter* pPresenter; @@ -78,7 +77,7 @@ { public: - MPEVRCustomPresenter(IVMR9Callback* callback, IDirect3DDevice9* direct3dDevice,HMONITOR monitor, IBaseFilter* EVRFilter); + MPEVRCustomPresenter(IVMR9Callback* pCallback, IDirect3DDevice9* direct3dDevice, HMONITOR monitor, IBaseFilter* EVRFilter, BOOL pIsWin7); virtual ~MPEVRCustomPresenter(); //IQualProp (stub) @@ -198,7 +197,7 @@ void ResetStatistics(); HRESULT PresentSample(IMFSample* pSample); void CorrectSampleTime(IMFSample* pSample); - void GetRefreshRateDwm(); + void GetRealRefreshRate(); CComPtr<IDirect3DTexture9> m_pVideoTexture; CComPtr<IDirect3DSurface9> m_pVideoSurface; @@ -305,4 +304,6 @@ double m_DetectedFrameTimeStdDev; bool m_bCorrectedFrameTime; bool m_DetectedLock; + + BOOL m_bIsWin7; }; Modified: trunk/mediaportal/Core.cpp/DirectShowHelper/source/dshowhelper.cpp =================================================================== --- trunk/mediaportal/Core.cpp/DirectShowHelper/source/dshowhelper.cpp 2010-01-30 23:42:39 UTC (rev 24920) +++ trunk/mediaportal/Core.cpp/DirectShowHelper/source/dshowhelper.cpp 2010-01-31 09:37:22 UTC (rev 24921) @@ -33,10 +33,11 @@ using namespace std; -HMODULE m_hModuleDXVA2 = NULL; -HMODULE m_hModuleEVR = NULL; -HMODULE m_hModuleMFPLAT = NULL; -HMODULE m_hModuleDWMAPI = NULL; +HMODULE m_hModuleDXVA2 = NULL; +HMODULE m_hModuleEVR = NULL; +HMODULE m_hModuleMFPLAT = NULL; +HMODULE m_hModuleDWMAPI = NULL; +HMODULE m_hModuleW7Helper = NULL; TDXVA2CreateDirect3DDeviceManager9* m_pDXVA2CreateDirect3DDeviceManager9 = NULL; TMFCreateVideoSampleFromSurface* m_pMFCreateVideoSampleFromSurface = NULL; @@ -44,8 +45,8 @@ TMFCreateMediaType* m_pMFCreateMediaType = NULL; // Vista / Windows 7 only -TDwmEnableMMCSS* m_pDwmEnableMMCSS = NULL; -TDwmGetCompositionTimingInfo* m_pDwmGetCompositionTimingInfo = NULL; +TDwmEnableMMCSS* m_pDwmEnableMMCSS = NULL; +TW7GetRefreshRate* m_pW7GetRefreshRate = NULL; BOOL m_bEVRLoaded = false; char* m_RenderPrefix = "vmr9"; @@ -336,7 +337,34 @@ Log("Vmr9Deinit exit"); } +// http://msdn.microsoft.com/en-us/library/ms725491(VS.85).aspx +BOOL IsWin7() +{ + OSVERSIONINFOEX osvi; + DWORDLONG dwlConditionMask = 0; + int op = VER_GREATER_EQUAL; + // Initialize the OSVERSIONINFOEX structure. + ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + osvi.dwMajorVersion = 6; + osvi.dwMinorVersion = 1; + osvi.wServicePackMajor = 0; + osvi.wServicePackMinor = 0; + + // Initialize the condition mask. + VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, op); + VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, op); + VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMAJOR, op); + VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMINOR, op); + + // Perform the test. + return VerifyVersionInfo( + &osvi, + VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, + dwlConditionMask); +} + void UnloadEVR() { Log("Unloading EVR libraries"); @@ -376,6 +404,15 @@ } m_hModuleDWMAPI = NULL; } + if (m_hModuleW7Helper != NULL) + { + Log("Freeing lib: Win7RefreshRateHelper.dll"); + if (!FreeLibrary(m_hModuleW7Helper)) + { + Log("Win7RefreshRateHelper.dll could not be unloaded"); + } + m_hModuleW7Helper = NULL; + } } @@ -383,10 +420,10 @@ { Log("Loading EVR libraries"); char systemFolder[MAX_PATH]; - char mfDLLFileName[MAX_PATH]; + char DLLFileName[MAX_PATH]; GetSystemDirectory(systemFolder,sizeof(systemFolder)); - sprintf(mfDLLFileName,"%s\\dxva2.dll", systemFolder); - m_hModuleDXVA2=LoadLibrary(mfDLLFileName); + sprintf(DLLFileName,"%s\\dxva2.dll", systemFolder); + m_hModuleDXVA2=LoadLibrary(DLLFileName); if (m_hModuleDXVA2 != NULL) { Log("Found dxva2.dll"); @@ -394,8 +431,8 @@ if (m_pDXVA2CreateDirect3DDeviceManager9 != NULL) { Log("Found method DXVA2CreateDirect3DDeviceManager9"); - sprintf(mfDLLFileName,"%s\\evr.dll", systemFolder); - m_hModuleEVR = LoadLibrary(mfDLLFileName); + sprintf(DLLFileName,"%s\\evr.dll", systemFolder); + m_hModuleEVR = LoadLibrary(DLLFileName); m_pMFCreateVideoSampleFromSurface = (TMFCreateVideoSampleFromSurface*)GetProcAddress(m_hModuleEVR,"MFCreateVideoSampleFromSurface"); if (m_pMFCreateVideoSampleFromSurface) @@ -405,23 +442,41 @@ if(m_pMFCreateVideoMediaType) { Log("Found method MFCreateVideoMediaType"); - sprintf(mfDLLFileName,"%s\\mfplat.dll", systemFolder); - m_hModuleMFPLAT = LoadLibrary(mfDLLFileName); + sprintf(DLLFileName,"%s\\mfplat.dll", systemFolder); + m_hModuleMFPLAT = LoadLibrary(DLLFileName); m_pMFCreateMediaType = (TMFCreateMediaType*)GetProcAddress(m_hModuleMFPLAT,"MFCreateMediaType"); if (m_pMFCreateMediaType) { Log("Found method MFCreateMediaType"); Log("Successfully loaded EVR dlls"); - sprintf(mfDLLFileName,"%s\\dwmapi.dll", systemFolder); - m_hModuleDWMAPI = LoadLibrary(mfDLLFileName); + sprintf(DLLFileName,"%s\\dwmapi.dll", systemFolder); + m_hModuleDWMAPI = LoadLibrary(DLLFileName); // Vista / Windows 7 only, allowed to return NULL. Remember to check agains NULL when using if (m_hModuleDWMAPI) { Log("Successfully loaded DWM dll"); m_pDwmEnableMMCSS = (TDwmEnableMMCSS*)GetProcAddress(m_hModuleDWMAPI,"DwmEnableMMCSS"); - m_pDwmGetCompositionTimingInfo = (TDwmGetCompositionTimingInfo*)GetProcAddress(m_hModuleDWMAPI,"DwmGetCompositionTimingInfo"); } + + if (IsWin7()) + { + sprintf(DLLFileName,"Win7RefreshRateHelper.dll"); + m_hModuleW7Helper = LoadLibrary(DLLFileName); + if (m_hModuleW7Helper) + { + Log("Successfully loaded Win7RefreshRateHelper.dll"); + m_pW7GetRefreshRate = (TW7GetRefreshRate*)GetProcAddress(m_hModuleW7Helper,"W7GetRefreshRate"); + if (m_pW7GetRefreshRate) + { + Log(" W7GetRefreshRate() found"); + } + else + { + Log(" W7GetRefreshRate() not found"); + } + } + } return TRUE; } } @@ -538,7 +593,7 @@ Log("Could not get IMFVideoRenderer"); return FALSE; } - m_evrPresenter = new MPEVRCustomPresenter(callback, m_pDevice, (HMONITOR)monitor, m_pVMR9Filter); + m_evrPresenter = new MPEVRCustomPresenter(callback, m_pDevice, (HMONITOR)monitor, m_pVMR9Filter, IsWin7()); hr = pRenderer->InitializeRenderer(NULL, m_evrPresenter); if (FAILED(hr)) { @@ -1198,3 +1253,4 @@ pWstCodec->Release(); } } + Modified: trunk/mediaportal/Core.cpp/DirectShowHelper/source/dshowhelper.h =================================================================== --- trunk/mediaportal/Core.cpp/DirectShowHelper/source/dshowhelper.h 2010-01-30 23:42:39 UTC (rev 24920) +++ trunk/mediaportal/Core.cpp/DirectShowHelper/source/dshowhelper.h 2010-01-31 09:37:22 UTC (rev 24921) @@ -56,8 +56,8 @@ typedef HRESULT __stdcall TDwmEnableMMCSS(BOOL fEnableMMCSS); extern TDwmEnableMMCSS* m_pDwmEnableMMCSS; -typedef HRESULT __stdcall TDwmGetCompositionTimingInfo(HWND hwnd, DWM_TIMING_INFO *pTimingInfo); -extern TDwmGetCompositionTimingInfo* m_pDwmGetCompositionTimingInfo; +typedef double __stdcall TW7GetRefreshRate(); +extern TW7GetRefreshRate* m_pW7GetRefreshRate; HRESULT MyGetService(IUnknown* punkObject, REFGUID guidService, REFIID riid, LPVOID* ppvObject); Property changes on: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper ___________________________________________________________________ Added: bugtraq:url + http://mantis.team-mediaportal.com/view.php?id=%BUGID% Added: bugtraq:logregex + ([Ii]ssues?|[Mm]antis|[Ff]ix(ed)?(\sfor)?)[\s]?:?(\s*(,|and)?[#|\s]\d+)+|^(\d+): ([1-9]\d+) Added: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/Win7RefreshRateHelper.sln =================================================================== --- trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/Win7RefreshRateHelper.sln (rev 0) +++ trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/Win7RefreshRateHelper.sln 2010-01-31 09:37:22 UTC (rev 24921) @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Win7RefreshRateHelper", "Win7RefreshRateHelper.vcproj", "{CDE13610-062F-4DC8-B2BE-99EECA9AAA3E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CDE13610-062F-4DC8-B2BE-99EECA9AAA3E}.Debug|Win32.ActiveCfg = Debug|Win32 + {CDE13610-062F-4DC8-B2BE-99EECA9AAA3E}.Debug|Win32.Build.0 = Debug|Win32 + {CDE13610-062F-4DC8-B2BE-99EECA9AAA3E}.Release|Win32.ActiveCfg = Release|Win32 + {CDE13610-062F-4DC8-B2BE-99EECA9AAA3E}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal Added: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/Win7RefreshRateHelper.vcproj =================================================================== --- trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/Win7RefreshRateHelper.vcproj (rev 0) +++ trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/Win7RefreshRateHelper.vcproj 2010-01-31 09:37:22 UTC (rev 24921) @@ -0,0 +1,237 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="9,00" + Name="Win7RefreshRateHelper" + ProjectGUID="{CDE13610-062F-4DC8-B2BE-99EECA9AAA3E}" + RootNamespace="Win7RefreshRateHelper" + Keyword="Win32Proj" + TargetFrameworkVersion="131072" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory=".\obj\Debug" + IntermediateDirectory=".\obj\Debug" + ConfigurationType="2" + UseOfMFC="0" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(DSHOW_BASE)"; "$(WINDOWS_SDK)Include\"; "$(DXSDK_DIR)Include"" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;WIN7REFRESHRATEHELPER_EXPORTS" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="0" + PrecompiledHeaderFile=".\obj\Debug\Win7RefreshRateHelper.pch" + AssemblerListingLocation=".\obj\Debug/" + ObjectFile=".\obj\Debug/" + ProgramDataBaseFileName=".\bin\Debug/" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="strmbasd.lib winmm.lib comsupp.lib dxguid.lib d3d9.lib d3dx9.lib mfuuid.lib dxva2.lib evr.lib mf.lib strmiids.lib" + OutputFile="bin\Debug/Win7RefreshRateHelper.dll" + LinkIncremental="2" + AdditionalLibraryDirectories=""$(DSHOW_BASE)Debug_MBCS"; "$(DXSDK_DIR)lib\x86";"$(WINDOWS_SDK)\lib"" + IgnoreDefaultLibraryNames="" + ModuleDefinitionFile="./source/Win7RefreshRateHelper.def" + GenerateDebugInformation="true" + AssemblyDebug="1" + ProgramDatabaseFile="bin\Debug/Win7RefreshRateHelper.pdb" + SubSystem="2" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" + ImportLibrary="bin\Debug/Win7RefreshRateHelper.lib" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory=".\obj\Release" + IntermediateDirectory=".\obj\Release" + ConfigurationType="2" + UseOfMFC="0" + UseOfATL="0" + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + FavorSizeOrSpeed="1" + AdditionalIncludeDirectories=""$(DSHOW_BASE)"; "$(WINDOWS_SDK)Include\"; "$(DXSDK_DIR)Include"" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WIN7REFRESHRATEHELPER_EXPORTS;_CRT_SECURE_NO_WARNINGS" + RuntimeLibrary="2" + UsePrecompiledHeader="0" + PrecompiledHeaderFile=".\obj\Release/Win7RefreshRateHelper.pch" + AssemblerListingLocation=".\obj\Release/" + ObjectFile=".\obj\Release/" + ProgramDataBaseFileName=".\bin\Release/" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="1" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + IgnoreImportLibrary="false" + AdditionalDependencies="strmbase.lib winmm.lib comsupp.lib dxguid.lib d3d9.lib d3dx9.lib mfuuid.lib dxva2.lib evr.lib mf.lib strmiids.lib" + OutputFile="bin\Release/Win7RefreshRateHelper.dll" + LinkIncremental="1" + AdditionalLibraryDirectories=""$(DSHOW_BASE)Release_MBCS"; "$(DXSDK_DIR)lib\x86";"$(WINDOWS_SDK)\lib"" + IgnoreAllDefaultLibraries="false" + IgnoreDefaultLibraryNames="" + ModuleDefinitionFile="./source/Win7RefreshRateHelper.def" + AddModuleNamesToAssembly="" + GenerateDebugInformation="false" + ProgramDatabaseFile="bin\Release/Win7RefreshRateHelper.pdb" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" + ImportLibrary="bin\Release/Win7RefreshRateHelper.lib" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\source\Win7RefreshRateHelper.cpp" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath=".\source\Win7RefreshRateHelper.h" + > + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + <File + RelativePath=".\source\Win7RefreshRateHelper.def" + > + </File> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> Property changes on: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin ___________________________________________________________________ Added: bugtraq:url + http://mantis.team-mediaportal.com/view.php?id=%BUGID% Added: bugtraq:logregex + ([Ii]ssues?|[Mm]antis|[Ff]ix(ed)?(\sfor)?)[\s]?:?(\s*(,|and)?[#|\s]\d+)+|^(\d+): ([1-9]\d+) Property changes on: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Debug ___________________________________________________________________ Added: bugtraq:url + http://mantis.team-mediaportal.com/view.php?id=%BUGID% Added: bugtraq:logregex + ([Ii]ssues?|[Mm]antis|[Ff]ix(ed)?(\sfor)?)[\s]?:?(\s*(,|and)?[#|\s]\d+)+|^(\d+): ([1-9]\d+) Added: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Debug/Win7RefreshRateHelper.dll =================================================================== (Binary files differ) Property changes on: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Debug/Win7RefreshRateHelper.dll ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Debug/Win7RefreshRateHelper.pdb =================================================================== (Binary files differ) Property changes on: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Debug/Win7RefreshRateHelper.pdb ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Debug/vc90.pdb =================================================================== (Binary files differ) Property changes on: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Debug/vc90.pdb ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Release ___________________________________________________________________ Added: bugtraq:url + http://mantis.team-mediaportal.com/view.php?id=%BUGID% Added: bugtraq:logregex + ([Ii]ssues?|[Mm]antis|[Ff]ix(ed)?(\sfor)?)[\s]?:?(\s*(,|and)?[#|\s]\d+)+|^(\d+): ([1-9]\d+) Added: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Release/Win7RefreshRateHelper.dll =================================================================== (Binary files differ) Property changes on: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Release/Win7RefreshRateHelper.dll ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Release/vc90.idb =================================================================== (Binary files differ) Property changes on: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/bin/Release/vc90.idb ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source ___________________________________________________________________ Added: bugtraq:url + http://mantis.team-mediaportal.com/view.php?id=%BUGID% Added: bugtraq:logregex + ([Ii]ssues?|[Mm]antis|[Ff]ix(ed)?(\sfor)?)[\s]?:?(\s*(,|and)?[#|\s]\d+)+|^(\d+): ([1-9]\d+) Added: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.cpp =================================================================== --- trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.cpp (rev 0) +++ trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.cpp 2010-01-31 09:37:22 UTC (rev 24921) @@ -0,0 +1,89 @@ +// Copyright (C) 2005-2010 Team MediaPortal +// http://www.team-mediaportal.com +// +// MediaPortal is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 2 of the License, or +// (at your option) any later version. +// +// MediaPortal is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with MediaPortal. If not, see <http://www.gnu.org/licenses/>. + +#define _WIN32_WINNT 0x0601 + +#include "Win7RefreshRateHelper.h" + +// Get current refresh rate on Win7 +double W7GetRefreshRate() +{ + UINT32 uNumPathArrayElements = 0; + UINT32 uNumModeInfoArrayElements = 0; + DISPLAYCONFIG_PATH_INFO* pPathInfoArray = NULL; + DISPLAYCONFIG_MODE_INFO* pModeInfoArray = NULL; + DISPLAYCONFIG_TOPOLOGY_ID* pCurrentTopologyId = NULL; + LONG result; + LONG numerator; + LONG denominator; + double refreshRate = -1; + + // Get size of buffers for QueryDisplayConfig + result = GetDisplayConfigBufferSizes(QDC_ALL_PATHS, &uNumPathArrayElements, &uNumModeInfoArrayElements); + if (result != 0) + { + return(refreshRate); + } + + // allocate memory for QueryDisplayConfig buffers + pPathInfoArray = (DISPLAYCONFIG_PATH_INFO*)calloc(uNumPathArrayElements, sizeof(DISPLAYCONFIG_PATH_INFO)); + if (pPathInfoArray == NULL ) + { + return(refreshRate); + } + + pModeInfoArray = (DISPLAYCONFIG_MODE_INFO*)calloc(uNumModeInfoArrayElements, sizeof(DISPLAYCONFIG_MODE_INFO)); + if (pPathInfoArray == NULL ) + { + // freeing memory + free(pPathInfoArray); + return(refreshRate); + } + + // get display configuration + result = QueryDisplayConfig(QDC_ALL_PATHS, + &uNumPathArrayElements, pPathInfoArray, + &uNumModeInfoArrayElements, pModeInfoArray, + pCurrentTopologyId); + if (result == 0) + { + // Get information from first active target path + // TODO: add support for multiple displays (presenter doesn't know active display) + for(int i=0; i < (int)uNumPathArrayElements; i++) + { + if (pPathInfoArray[i].flags == DISPLAYCONFIG_PATH_ACTIVE) + { + DISPLAYCONFIG_PATH_TARGET_INFO target; + target = pPathInfoArray[i].targetInfo; + numerator = target.refreshRate.Numerator; + denominator = target.refreshRate.Denominator; + refreshRate = (double)numerator/(double)denominator; + break; + } + } + } + // freeing memory + free(pPathInfoArray); + free(pModeInfoArray); + + return(refreshRate); +} + + +BOOL APIENTRY DllMain(HMODULE hModule, DWORD nReason, LPVOID lpReserved) +{ + return TRUE; +} \ No newline at end of file Added: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.def =================================================================== --- trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.def (rev 0) +++ trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.def 2010-01-31 09:37:22 UTC (rev 24921) @@ -0,0 +1,5 @@ +LIBRARY "Win7RefreshRateHelper" + +EXPORTS + +W7GetRefreshRate @1 Added: trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.h =================================================================== --- trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.h (rev 0) +++ trunk/mediaportal/Core.cpp/Win7RefreshRateHelper/source/Win7RefreshRateHelper.h 2010-01-31 09:37:22 UTC (rev 24921) @@ -0,0 +1,24 @@ +// Copyright (C) 2005-2010 Team MediaPortal +// http://www.team-mediaportal.com +// +// MediaPortal is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 2 of the License, or +// (at your option) any later version. +// +// MediaPortal is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with MediaPortal. If not, see <http://www.gnu.org/licenses/>. + + +#ifdef WIN7REFRESHRATEHELPER_EXPORTS +#define WIN7REFRESHRATEHELPER_API __declspec(dllexport) +#else +#define WIN7REFRESHRATEHELPER_API __declspec(dllimport) +#endif + +#include <windows.h> \ No newline at end of file Modified: trunk/mediaportal/Setup/setup.nsi =================================================================== --- trunk/mediaportal/Setup/setup.nsi 2010-01-30 23:42:39 UTC (rev 24920) +++ trunk/mediaportal/Setup/setup.nsi 2010-01-31 09:37:22 UTC (rev 24921) @@ -463,6 +463,7 @@ File "${svn_MP}\core\bin\${BUILD_TYPE}\DirectShowLib.dll" File "${svn_MP}\core.cpp\fontEngine\bin\${BUILD_TYPE}\fontengine.dll" File "${svn_MP}\core.cpp\DirectShowHelper\bin\${BUILD_TYPE}\dshowhelper.dll" + File "${svn_MP}\core.cpp\Win7RefreshRateHelper\bin\${BUILD_TYPE}\Win7RefreshRateHelper.dll" File "${svn_MP}\core.cpp\DxUtil\bin\${BUILD_TYPE}\dxutil.dll" File "${svn_MP}\core.cpp\mpc-hc_subs\bin\${BUILD_TYPE}\mpcSubs.dll" File "${svn_DirectShowFilters}\DXErr9\bin\${BUILD_TYPE}\Dxerr9.dll" @@ -588,6 +589,7 @@ Delete "$MPdir.Base\DirectShowLib.dll" Delete "$MPdir.Base\fontengine.dll" Delete "$MPdir.Base\dshowhelper.dll" + Delete "$MPdir.Base\Win7RefreshRateHelper.dll" Delete "$MPdir.Base\dxutil.dll" Delete "$MPdir.Base\Dxerr9.dll" Delete "$MPdir.Base\mpcSubs.dll" Modified: trunk/mediaportal/xbmc/PostBuild.bat =================================================================== --- trunk/mediaportal/xbmc/PostBuild.bat 2010-01-30 23:42:39 UTC (rev 24920) +++ trunk/mediaportal/xbmc/PostBuild.bat 2010-01-31 09:37:22 UTC (rev 24921) @@ -86,6 +86,7 @@ REM Copy all dll files from cpp solution xcopy %1\Core.cpp\DirectShowHelper\bin\%2\dshowhelper.dll . +xcopy %1\Core.cpp\Win7RefreshRateHelper\bin\%2\Win7RefreshRateHelper.dll . xcopy %1\Core.cpp\DXUtil\bin\%2\dxutil.dll . xcopy %1\Core.cpp\fontEngine\bin\%2\fontEngine.dll . copy /y %1\Core.cpp\mpc-hc_subs\bin\%2\mpcSubs.dll . |