Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/mpc-hc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsansnom05 <sansnom05@users.sourceforge.net>2010-12-16 16:53:08 +0300
committersansnom05 <sansnom05@users.sourceforge.net>2010-12-16 16:53:08 +0300
commitf0d88a6ff96770b10031dcc59447cca2c7dbc91c (patch)
treee188e4e733fcf6fc9b00dc349618c19f4d47a7c9 /src/filters/renderer
parent5067b0b48d4d15b24669c8032b28e90e45202801 (diff)
legacy branch: merge r2662-r2759
git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/branches/legacy@2778 10f7b99b-c216-0410-bff0-8a66a9350fd8
Diffstat (limited to 'src/filters/renderer')
-rw-r--r--src/filters/renderer/MpcAudioRenderer/IMpcAudioRendererFilter.h37
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.cpp138
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.h23
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcproj14
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcxproj3
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcxproj.filters9
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.cpp104
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.h65
-rw-r--r--src/filters/renderer/MpcAudioRenderer/resource.h2
-rw-r--r--src/filters/renderer/VideoRenderers/RenderersSettings.cpp72
-rw-r--r--src/filters/renderer/VideoRenderers/RenderersSettings.h69
-rw-r--r--src/filters/renderer/VideoRenderers/SyncRenderer.cpp106
12 files changed, 461 insertions, 181 deletions
diff --git a/src/filters/renderer/MpcAudioRenderer/IMpcAudioRendererFilter.h b/src/filters/renderer/MpcAudioRenderer/IMpcAudioRendererFilter.h
new file mode 100644
index 000000000..e4f46fa9b
--- /dev/null
+++ b/src/filters/renderer/MpcAudioRenderer/IMpcAudioRendererFilter.h
@@ -0,0 +1,37 @@
+/*
+ * $Id$
+ *
+ * (C) 2006-2010 see AUTHORS
+ *
+ * This file is part of mplayerc.
+ *
+ * Mplayerc 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Mplayerc 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+#pragma once
+
+
+interface __declspec(uuid("495D2C66-D430-439b-9DEE-40F9B7929BBA"))
+IMpcAudioRendererFilter :
+public IUnknown
+{
+ STDMETHOD(Apply()) = 0;
+
+ STDMETHOD(SetWasapiMode(BOOL nValue)) = 0;
+ STDMETHOD_(BOOL, GetWasapiMode()) = 0;
+ STDMETHOD(SetMuteFastForward(BOOL nValue)) = 0;
+ STDMETHOD_(BOOL, GetMuteFastForward()) = 0;
+};
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.cpp b/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.cpp
index 03b054272..208c8b9db 100644
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.cpp
+++ b/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.cpp
@@ -83,7 +83,7 @@ const AMOVIESETUP_FILTER sudFilter[] =
CFactoryTemplate g_Templates[] =
{
{sudFilter[0].strName, &__uuidof(CMpcAudioRenderer), CreateInstance<CMpcAudioRenderer>, NULL, &sudFilter[0]},
- //{L"CMpcAudioRendererPropertyPage", &__uuidof(CMpcAudioRendererSettingsWnd), CreateInstance<CInternalPropertyPageTempl<CMpcAudioRendererSettingsWnd> >},
+ {L"CMpcAudioRendererPropertyPage", &__uuidof(CMpcAudioRendererSettingsWnd), CreateInstance<CInternalPropertyPageTempl<CMpcAudioRendererSettingsWnd> >},
};
int g_cTemplates = countof(g_Templates);
@@ -117,7 +117,8 @@ CMpcAudioRenderer::CMpcAudioRenderer(LPUNKNOWN punk, HRESULT *phr)
, pMMDevice (NULL)
, pAudioClient (NULL )
, pRenderClient (NULL )
- , useWASAPI (true )
+ , m_useWASAPI (true )
+ , m_bMuteFastForward(false)
, nFramesInBuffer (0 )
, hnsPeriod (0 )
, hTask (NULL )
@@ -129,6 +130,16 @@ CMpcAudioRenderer::CMpcAudioRenderer(LPUNKNOWN punk, HRESULT *phr)
{
HMODULE hLib;
+ CRegKey key;
+ if(ERROR_SUCCESS == key.Open(HKEY_CURRENT_USER, _T("Software\\Gabest\\Filters\\MPC Audio Renderer"), KEY_READ))
+ {
+ DWORD dw;
+ if(ERROR_SUCCESS == key.QueryDWORDValue(_T("UseWasapi"), dw)) m_useWASAPI = dw;
+ if(ERROR_SUCCESS == key.QueryDWORDValue(_T("MuteFastForward"), dw)) m_bMuteFastForward = dw;
+ }
+ m_useWASAPIAfterRestart = m_useWASAPI;
+
+
// Load Vista specifics DLLs
hLib = LoadLibrary (L"AVRT.dll");
if (hLib != NULL)
@@ -137,10 +148,10 @@ CMpcAudioRenderer::CMpcAudioRenderer(LPUNKNOWN punk, HRESULT *phr)
pfAvRevertMmThreadCharacteristics = (PTR_AvRevertMmThreadCharacteristics) GetProcAddress (hLib, "AvRevertMmThreadCharacteristics");
}
else
- useWASAPI = false; // Wasapi not available below Vista
+ m_useWASAPI = false; // Wasapi not available below Vista
TRACE(_T("CMpcAudioRenderer constructor"));
- if (!useWASAPI)
+ if (!m_useWASAPI)
{
m_pSoundTouch = new soundtouch::SoundTouch();
*phr = DirectSoundCreate8 (NULL, &m_pDS, NULL);
@@ -200,7 +211,7 @@ HRESULT CMpcAudioRenderer::CheckMediaType(const CMediaType *pmt)
return VFW_E_TYPE_NOT_ACCEPTED;
}
- if(useWASAPI)
+ if(m_useWASAPI)
{
hr=CheckAudioClient((WAVEFORMATEX *)NULL);
if (FAILED(hr))
@@ -230,7 +241,7 @@ HRESULT CMpcAudioRenderer::CheckMediaType(const CMediaType *pmt)
void CMpcAudioRenderer::OnReceiveFirstSample(IMediaSample *pMediaSample)
{
- if (!useWASAPI)
+ if (!m_useWASAPI)
ClearBuffer();
}
@@ -280,7 +291,7 @@ BOOL CMpcAudioRenderer::ScheduleSample(IMediaSample *pMediaSample)
HRESULT CMpcAudioRenderer::DoRenderSample(IMediaSample *pMediaSample)
{
- if (useWASAPI)
+ if (m_useWASAPI)
return DoRenderSampleWasapi(pMediaSample);
else
return DoRenderSampleDirectSound(pMediaSample);
@@ -301,6 +312,18 @@ STDMETHODIMP CMpcAudioRenderer::NonDelegatingQueryInterface(REFIID riid, void **
{
return GetInterface(static_cast<IBasicAudio*>(this), ppv);
}
+ else if (riid == __uuidof(ISpecifyPropertyPages))
+ {
+ return GetInterface(static_cast<ISpecifyPropertyPages*>(this), ppv);
+ }
+ else if (riid == __uuidof(ISpecifyPropertyPages2))
+ {
+ return GetInterface(static_cast<ISpecifyPropertyPages2*>(this), ppv);
+ }
+ else if (riid == __uuidof(IMpcAudioRendererFilter))
+ {
+ return GetInterface(static_cast<IMpcAudioRendererFilter*>(this), ppv);
+ }
return CBaseRenderer::NonDelegatingQueryInterface (riid, ppv);
}
@@ -311,7 +334,7 @@ HRESULT CMpcAudioRenderer::SetMediaType(const CMediaType *pmt)
int size = 0;
TRACE(_T("CMpcAudioRenderer::SetMediaType"));
- if (useWASAPI)
+ if (m_useWASAPI)
{
// New media type set but render client already initialized => reset it
if (pRenderClient!=NULL)
@@ -341,7 +364,7 @@ HRESULT CMpcAudioRenderer::SetMediaType(const CMediaType *pmt)
memcpy(m_pWaveFileFormat, pwf, size);
- if (!useWASAPI && m_pSoundTouch && (pwf->nChannels <= 2))
+ if (!m_useWASAPI && m_pSoundTouch && (pwf->nChannels <= 2))
{
m_pSoundTouch->setSampleRate (pwf->nSamplesPerSec);
m_pSoundTouch->setChannels (pwf->nChannels);
@@ -358,12 +381,12 @@ HRESULT CMpcAudioRenderer::CompleteConnect(IPin *pReceivePin)
HRESULT hr = S_OK;
TRACE(_T("CMpcAudioRenderer::CompleteConnect"));
- if (!useWASAPI && ! m_pDS) return E_FAIL;
+ if (!m_useWASAPI && ! m_pDS) return E_FAIL;
if (SUCCEEDED(hr)) hr = CBaseRenderer::CompleteConnect(pReceivePin);
if (SUCCEEDED(hr)) hr = InitCoopLevel();
- if (!useWASAPI)
+ if (!m_useWASAPI)
{
if (SUCCEEDED(hr)) hr = CreateDSBuffer();
}
@@ -377,7 +400,7 @@ STDMETHODIMP CMpcAudioRenderer::Run(REFERENCE_TIME tStart)
if (m_State == State_Running) return NOERROR;
- if (useWASAPI)
+ if (m_useWASAPI)
{
hr=CheckAudioClient(m_pWaveFileFormat);
if (FAILED(hr))
@@ -406,10 +429,18 @@ STDMETHODIMP CMpcAudioRenderer::Run(REFERENCE_TIME tStart)
if (FAILED (hr)) return hr;
}
else
- {
- hr = m_pDSBuffer->SetFrequency ((long)m_pWaveFileFormat->nSamplesPerSec);
- m_pSoundTouch->setRateChange((float)(m_dRate-1.0)*100);
- }
+ {
+ hr = m_pDSBuffer->SetFrequency ((long)m_pWaveFileFormat->nSamplesPerSec);
+ m_pSoundTouch->setRateChange((float)(m_dRate-1.0)*100);
+
+ if (m_bMuteFastForward)
+ {
+ if (m_dRate == 1.0)
+ m_pDSBuffer->SetVolume(m_lVolume);
+ else
+ m_pDSBuffer->SetVolume(DSBVOLUME_MIN);
+ }
+ }
}
ClearBuffer();
@@ -462,7 +493,7 @@ STDMETHODIMP CMpcAudioRenderer::Invoke(DISPID dispidMember, REFIID riid, LCID lc
STDMETHODIMP CMpcAudioRenderer::put_Volume(long lVolume)
{
m_lVolume = lVolume;
- if (!useWASAPI && m_pDSBuffer)
+ if (!m_useWASAPI && m_pDSBuffer)
return m_pDSBuffer->SetVolume(lVolume);
return S_OK;
@@ -470,7 +501,7 @@ STDMETHODIMP CMpcAudioRenderer::put_Volume(long lVolume)
STDMETHODIMP CMpcAudioRenderer::get_Volume(long *plVolume)
{
- if (!useWASAPI && m_pDSBuffer)
+ if (!m_useWASAPI && m_pDSBuffer)
return m_pDSBuffer->GetVolume(plVolume);
return S_OK;
@@ -478,7 +509,7 @@ STDMETHODIMP CMpcAudioRenderer::get_Volume(long *plVolume)
STDMETHODIMP CMpcAudioRenderer::put_Balance(long lBalance)
{
- if (!useWASAPI && m_pDSBuffer)
+ if (!m_useWASAPI && m_pDSBuffer)
return m_pDSBuffer->SetPan(lBalance);
return S_OK;
@@ -486,12 +517,77 @@ STDMETHODIMP CMpcAudioRenderer::put_Balance(long lBalance)
STDMETHODIMP CMpcAudioRenderer::get_Balance(long *plBalance)
{
- if (!useWASAPI && m_pDSBuffer)
+ if (!m_useWASAPI && m_pDSBuffer)
return m_pDSBuffer->GetPan(plBalance);
return S_OK;
}
+// === ISpecifyPropertyPages2
+STDMETHODIMP CMpcAudioRenderer::GetPages(CAUUID* pPages)
+{
+ CheckPointer(pPages, E_POINTER);
+
+ pPages->cElems = 1;
+
+ pPages->pElems = (GUID*)CoTaskMemAlloc(sizeof(GUID) * pPages->cElems);
+ pPages->pElems[0] = __uuidof(CMpcAudioRendererSettingsWnd);
+
+ return S_OK;
+}
+
+STDMETHODIMP CMpcAudioRenderer::CreatePage(const GUID& guid, IPropertyPage** ppPage)
+{
+ CheckPointer(ppPage, E_POINTER);
+
+ if(*ppPage != NULL) return E_INVALIDARG;
+
+ HRESULT hr;
+
+ if(guid == __uuidof(CMpcAudioRendererSettingsWnd))
+ {
+ (*ppPage = DNew CInternalPropertyPageTempl<CMpcAudioRendererSettingsWnd>(NULL, &hr))->AddRef();
+ }
+
+ return *ppPage ? S_OK : E_FAIL;
+}
+
+// === IMpcAudioRendererFilter
+STDMETHODIMP CMpcAudioRenderer::Apply()
+{
+ CRegKey key;
+ if(ERROR_SUCCESS == key.Create(HKEY_CURRENT_USER, _T("Software\\Gabest\\Filters\\MPC Audio Renderer")))
+ {
+ key.SetDWORDValue(_T("UseWasapi"), m_useWASAPIAfterRestart);
+ key.SetDWORDValue(_T("MuteFastForward"), m_bMuteFastForward);
+ }
+
+ return S_OK;
+}
+
+STDMETHODIMP CMpcAudioRenderer::SetWasapiMode(BOOL nValue)
+{
+ CAutoLock cAutoLock(&m_csProps);
+ m_useWASAPIAfterRestart = nValue;
+ return S_OK;
+}
+STDMETHODIMP_(BOOL) CMpcAudioRenderer::GetWasapiMode()
+{
+ CAutoLock cAutoLock(&m_csProps);
+ return m_useWASAPIAfterRestart;
+}
+
+STDMETHODIMP CMpcAudioRenderer::SetMuteFastForward(BOOL nValue)
+{
+ CAutoLock cAutoLock(&m_csProps);
+ m_bMuteFastForward = nValue;
+ return S_OK;
+}
+STDMETHODIMP_(BOOL) CMpcAudioRenderer::GetMuteFastForward()
+{
+ CAutoLock cAutoLock(&m_csProps);
+ return m_bMuteFastForward;
+}
HRESULT CMpcAudioRenderer::GetReferenceClockInterface(REFIID riid, void **ppv)
{
@@ -632,7 +728,7 @@ HRESULT CMpcAudioRenderer::InitCoopLevel()
}
ATLASSERT(hWnd != NULL);
- if (!useWASAPI)
+ if (!m_useWASAPI)
hr = m_pDS->SetCooperativeLevel(hWnd, DSSCL_PRIORITY);
else if (hTask == NULL)
{
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.h b/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.h
index 4e8744642..414dc1df9 100644
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.h
+++ b/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.h
@@ -32,7 +32,7 @@
#include <audioclient.h>
#include <Endpointvolume.h>
-
+#include "MpcAudioRendererSettingsWnd.h"
#include "SoundTouch/Include/SoundTouch.h"
// REFERENCE_TIME time units per second and per millisecond
@@ -44,7 +44,10 @@
#define AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED AUDCLNT_ERR(0x019)
class __declspec(uuid("601D2A2B-9CDE-40bd-8650-0485E3522727"))
- CMpcAudioRenderer : public CBaseRenderer, public IBasicAudio
+ CMpcAudioRenderer : public CBaseRenderer
+ , public IBasicAudio
+ , public ISpecifyPropertyPages2
+ , public IMpcAudioRendererFilter
{
public:
CMpcAudioRenderer(LPUNKNOWN punk, HRESULT *phr);
@@ -84,6 +87,17 @@ public:
STDMETHOD(put_Balance) (long lBalance);
STDMETHOD(get_Balance) (long *plBalance);
+ // === ISpecifyPropertyPages2
+ STDMETHODIMP GetPages(CAUUID* pPages);
+ STDMETHODIMP CreatePage(const GUID& guid, IPropertyPage** ppPage);
+
+ // === IMpcAudioRendererFilter
+ STDMETHODIMP Apply();
+ STDMETHODIMP SetWasapiMode(BOOL nValue);
+ STDMETHODIMP_(BOOL) GetWasapiMode();
+ STDMETHODIMP SetMuteFastForward(BOOL nValue);
+ STDMETHODIMP_(BOOL) GetMuteFastForward();
+
// CMpcAudioRenderer
private:
@@ -104,6 +118,7 @@ private:
double m_dRate;
long m_lVolume;
soundtouch::SoundTouch* m_pSoundTouch;
+ CCritSec m_csProps;
// CMpcAudioRenderer WASAPI methods
HRESULT GetDefaultAudioDevice(IMMDevice **ppMMDevice);
@@ -116,7 +131,9 @@ private:
// WASAPI variables
- bool useWASAPI;
+ bool m_useWASAPI;
+ bool m_useWASAPIAfterRestart;
+ bool m_bMuteFastForward;
IMMDevice *pMMDevice;
IAudioClient *pAudioClient;
IAudioRenderClient *pRenderClient;
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcproj b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcproj
index 6be3b05a4..ddf8916ce 100644
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcproj
+++ b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="windows-1250"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9.00"
+ Version="9,00"
Name="MpcAudioRendererFilter"
ProjectGUID="{D0620EF4-1313-40D5-9069-A82F6FE26994}"
RootNamespace="MpcAudioRenderer"
@@ -561,6 +561,10 @@
>
</File>
<File
+ RelativePath=".\MpcAudioRendererSettingsWnd.cpp"
+ >
+ </File>
+ <File
RelativePath=".\stdafx.cpp"
>
<FileConfiguration
@@ -634,10 +638,18 @@
Filter="h;hpp;hxx;hm;inl;inc"
>
<File
+ RelativePath=".\IMpcAudioRendererFilter.h"
+ >
+ </File>
+ <File
RelativePath=".\MpcAudioRenderer.h"
>
</File>
<File
+ RelativePath=".\MpcAudioRendererSettingsWnd.h"
+ >
+ </File>
+ <File
RelativePath=".\resource.h"
>
</File>
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcxproj b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcxproj
index e52e4f060..7912d9e62 100644
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcxproj
+++ b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcxproj
@@ -270,6 +270,7 @@
<ItemGroup>
<ClCompile Include="..\..\FilterApp.cpp" />
<ClCompile Include="MpcAudioRenderer.cpp" />
+ <ClCompile Include="MpcAudioRendererSettingsWnd.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">Create</PrecompiledHeader>
@@ -307,7 +308,9 @@
<None Include="MpcAudioRenderer.def" />
</ItemGroup>
<ItemGroup>
+ <ClInclude Include="IMpcAudioRendererFilter.h" />
<ClInclude Include="MpcAudioRenderer.h" />
+ <ClInclude Include="MpcAudioRendererSettingsWnd.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="SoundTouch\include\BPMDetect.h" />
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcxproj.filters b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcxproj.filters
index d2ff0f30d..675e6c959 100644
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcxproj.filters
+++ b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererFilter.vcxproj.filters
@@ -69,6 +69,9 @@
<ClCompile Include="SoundTouch\source\TDStretch.cpp">
<Filter>SoundTouch\source</Filter>
</ClCompile>
+ <ClCompile Include="MpcAudioRendererSettingsWnd.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="MpcAudioRenderer.def">
@@ -118,6 +121,12 @@
<ClInclude Include="SoundTouch\source\TDStretch.h">
<Filter>SoundTouch\source</Filter>
</ClInclude>
+ <ClInclude Include="IMpcAudioRendererFilter.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="MpcAudioRendererSettingsWnd.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="MpcAudioRenderer.rc">
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.cpp b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.cpp
new file mode 100644
index 000000000..d934e278f
--- /dev/null
+++ b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.cpp
@@ -0,0 +1,104 @@
+/*
+ * $Id$
+ *
+ * (C) 2006-2010 see AUTHORS
+ *
+ * This file is part of mplayerc.
+ *
+ * Mplayerc 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Mplayerc 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "stdafx.h"
+#include "resource.h"
+#include "MpcAudioRendererSettingsWnd.h"
+#include "../../../DSUtil/DSUtil.h"
+
+#include "../../../apps/mplayerc/internal_filter_config.h"
+
+// ==>>> Resource identifier from "resource.h" present in mplayerc project!
+#define ResStr(id) CString(MAKEINTRESOURCE(id))
+
+#define LEFT_SPACING 25
+#define VERTICAL_SPACING 25
+
+
+CMpcAudioRendererSettingsWnd::CMpcAudioRendererSettingsWnd(void)
+{
+}
+
+
+bool CMpcAudioRendererSettingsWnd::OnConnect(const CInterfaceList<IUnknown, &IID_IUnknown>& pUnks)
+{
+ ASSERT(!m_pMAR);
+
+ m_pMAR.Release();
+
+ POSITION pos = pUnks.GetHeadPosition();
+ while(pos && !(m_pMAR = pUnks.GetNext(pos)));
+
+ if(!m_pMAR) return false;
+
+ return true;
+}
+
+void CMpcAudioRendererSettingsWnd::OnDisconnect()
+{
+ m_pMAR.Release();
+}
+
+bool CMpcAudioRendererSettingsWnd::OnActivate()
+{
+ int nPosY = 10;
+ GUID* DxvaGui = NULL;
+
+ m_grpDefault.Create (_T(""), WS_VISIBLE|WS_CHILD | BS_GROUPBOX, CRect (10, nPosY, 350, nPosY+300), this, (UINT)IDC_STATIC);
+ nPosY += VERTICAL_SPACING;
+ m_cbWasapiMode.Create (ResStr (IDS_ARS_WASAPI_MODE), WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX|BS_LEFTTEXT, CRect (LEFT_SPACING, nPosY, 315, nPosY+15), this, IDC_PP_WASAPI_MODE);
+ nPosY += VERTICAL_SPACING;
+ m_cbMuteFastForward.Create (ResStr (IDS_ARS_MUTE_FAST_FORWARD), WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX|BS_LEFTTEXT, CRect (LEFT_SPACING, nPosY, 315, nPosY+15), this, IDC_PP_MUTE_FAST_FORWARD);
+
+ m_cbWasapiMode.SetCheck(m_pMAR->GetWasapiMode());
+ m_cbMuteFastForward.SetCheck(m_pMAR->GetMuteFastForward());
+
+
+ for(CWnd* pWnd = GetWindow(GW_CHILD); pWnd; pWnd = pWnd->GetNextWindow())
+ pWnd->SetFont(&m_font, FALSE);
+
+ return true;
+}
+
+void CMpcAudioRendererSettingsWnd::OnDeactivate()
+{
+}
+
+bool CMpcAudioRendererSettingsWnd::OnApply()
+{
+ OnDeactivate();
+
+ if(m_pMAR)
+ {
+ m_pMAR->SetWasapiMode(m_cbWasapiMode.GetCheck());
+ m_pMAR->SetMuteFastForward(m_cbMuteFastForward.GetCheck());
+ m_pMAR->Apply();
+ }
+
+ return true;
+}
+
+
+BEGIN_MESSAGE_MAP(CMpcAudioRendererSettingsWnd, CInternalPropertyPageWnd)
+END_MESSAGE_MAP()
+
+
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.h b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.h
new file mode 100644
index 000000000..c643adca3
--- /dev/null
+++ b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.h
@@ -0,0 +1,65 @@
+/*
+ * $Id$
+ *
+ * (C) 2006-2010 see AUTHORS
+ *
+ * This file is part of mplayerc.
+ *
+ * Mplayerc 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Mplayerc 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include "../../InternalPropertyPage.h"
+#include "IMpcAudioRendererFilter.h"
+#include <afxcmn.h>
+
+class __declspec(uuid("1E53BA32-3BCC-4dff-9342-34E46BE3F5A5"))
+ CMpcAudioRendererSettingsWnd : public CInternalPropertyPageWnd
+{
+private :
+ CComQIPtr<IMpcAudioRendererFilter> m_pMAR;
+
+ CButton m_grpDefault;
+
+ CStatic m_txtWasapiMode;
+ CButton m_cbWasapiMode;
+ CButton m_cbMuteFastForward;
+
+ enum
+ {
+ IDC_PP_WASAPI_MODE = 10000,
+ IDC_PP_MUTE_FAST_FORWARD,
+ };
+
+public:
+ CMpcAudioRendererSettingsWnd(void);
+
+
+ bool OnConnect(const CInterfaceList<IUnknown, &IID_IUnknown>& pUnks);
+ void OnDisconnect();
+ bool OnActivate();
+ void OnDeactivate();
+ bool OnApply();
+
+ static LPCTSTR GetWindowTitle() {
+ return _T("Settings");
+ }
+ static CSize GetWindowSize() {
+ return CSize(350, 325);
+ }
+
+ DECLARE_MESSAGE_MAP()
+};
diff --git a/src/filters/renderer/MpcAudioRenderer/resource.h b/src/filters/renderer/MpcAudioRenderer/resource.h
index fd81d8a9a..09a3cb7a5 100644
--- a/src/filters/renderer/MpcAudioRenderer/resource.h
+++ b/src/filters/renderer/MpcAudioRenderer/resource.h
@@ -17,6 +17,8 @@
#define IDS_MPA_2F_2R 33154
#define IDS_MPA_3F_2R 33155
#define IDS_MPA_DYNRANGE 33156
+#define IDS_ARS_WASAPI_MODE 33436
+#define IDS_ARS_MUTE_FAST_FORWARD 33437
// Next default values for new objects
//
diff --git a/src/filters/renderer/VideoRenderers/RenderersSettings.cpp b/src/filters/renderer/VideoRenderers/RenderersSettings.cpp
index 9b63655b9..274a60fc1 100644
--- a/src/filters/renderer/VideoRenderers/RenderersSettings.cpp
+++ b/src/filters/renderer/VideoRenderers/RenderersSettings.cpp
@@ -23,8 +23,80 @@
#include "stdafx.h"
#include "RenderersSettings.h"
+#include "../../../apps/mplayerc/mplayerc.h"
#include <d3dx9.h>
+void CRenderersSettings::UpdateData(bool fSave)
+{
+ AfxGetAppSettings().UpdateRenderersData(fSave);
+}
+
+void CRenderersSettings::CRendererSettingsShared::SetDefault()
+{
+ fVMR9AlterativeVSync = 0;
+ iVMR9VSyncOffset = 0;
+ iVMR9VSyncAccurate = 1;
+ iVMR9FullscreenGUISupport = 0;
+ iVMR9VSync = 1;
+ iVMR9FullFloatingPointProcessing = 0;
+ iVMR9ColorManagementEnable = 0;
+ iVMR9ColorManagementInput = VIDEO_SYSTEM_UNKNOWN;
+ iVMR9ColorManagementAmbientLight = AMBIENT_LIGHT_BRIGHT;
+ iVMR9ColorManagementIntent = COLOR_RENDERING_INTENT_PERCEPTUAL;
+ iVMRDisableDesktopComposition = 0;
+ iVMRFlushGPUBeforeVSync = 1;
+ iVMRFlushGPUAfterPresent = 1;
+ iVMRFlushGPUWait = 0;
+ bSynchronizeVideo = 0;
+ bSynchronizeDisplay = 0;
+ bSynchronizeNearest = 1;
+ iLineDelta = 0;
+ iColumnDelta = 0;
+ fCycleDelta = 0.0012;
+ fTargetSyncOffset = 12.0;
+ fControlLimit = 2.0;
+}
+
+void CRenderersSettings::CRendererSettingsShared::SetOptimal()
+{
+ fVMR9AlterativeVSync = 1;
+ iVMR9VSyncAccurate = 1;
+ iVMR9VSync = 1;
+ iVMR9FullFloatingPointProcessing = 1;
+ iVMR9ColorManagementEnable = 0;
+ iVMR9ColorManagementInput = VIDEO_SYSTEM_UNKNOWN;
+ iVMR9ColorManagementAmbientLight = AMBIENT_LIGHT_BRIGHT;
+ iVMR9ColorManagementIntent = COLOR_RENDERING_INTENT_PERCEPTUAL;
+ iVMRDisableDesktopComposition = 1;
+ iVMRFlushGPUBeforeVSync = 1;
+ iVMRFlushGPUAfterPresent = 1;
+ iVMRFlushGPUWait = 0;
+ bSynchronizeVideo = 0;
+ bSynchronizeDisplay = 0;
+ bSynchronizeNearest = 1;
+ iLineDelta = 0;
+ iColumnDelta = 0;
+ fCycleDelta = 0.0012;
+ fTargetSyncOffset = 12.0;
+ fControlLimit = 2.0;
+}
+
+void CRenderersSettings::CRendererSettingsEVR::SetDefault()
+{
+ CRendererSettingsShared::SetDefault();
+ iEVRHighColorResolution = 0;
+ iEVRForceInputHighColorResolution = 0;
+ iEVREnableFrameTimeCorrection = 0;
+ iEVROutputRange = 0;
+}
+
+void CRenderersSettings::CRendererSettingsEVR::SetOptimal()
+{
+ CRendererSettingsShared::SetOptimal();
+ iEVRHighColorResolution = 0;
+ iEVRForceInputHighColorResolution = 0;
+}
+
/////////////////////////////////////////////////////////////////////////////
// CRenderersData construction
diff --git a/src/filters/renderer/VideoRenderers/RenderersSettings.h b/src/filters/renderer/VideoRenderers/RenderersSettings.h
index cc7371aaa..75dde7747 100644
--- a/src/filters/renderer/VideoRenderers/RenderersSettings.h
+++ b/src/filters/renderer/VideoRenderers/RenderersSettings.h
@@ -112,55 +112,9 @@ public:
double fCycleDelta;
double fTargetSyncOffset;
double fControlLimit;
-
- void SetDefault()
- {
- fVMR9AlterativeVSync = 0;
- iVMR9VSyncOffset = 0;
- iVMR9VSyncAccurate = 1;
- iVMR9FullscreenGUISupport = 0;
- iVMR9VSync = 1;
- iVMR9FullFloatingPointProcessing = 0;
- iVMR9ColorManagementEnable = 0;
- iVMR9ColorManagementInput = VIDEO_SYSTEM_UNKNOWN;
- iVMR9ColorManagementAmbientLight = AMBIENT_LIGHT_BRIGHT;
- iVMR9ColorManagementIntent = COLOR_RENDERING_INTENT_PERCEPTUAL;
- iVMRDisableDesktopComposition = 0;
- iVMRFlushGPUBeforeVSync = 1;
- iVMRFlushGPUAfterPresent = 1;
- iVMRFlushGPUWait = 0;
- bSynchronizeVideo = 0;
- bSynchronizeDisplay = 0;
- bSynchronizeNearest = 1;
- iLineDelta = 0;
- iColumnDelta = 0;
- fCycleDelta = 0.0012;
- fTargetSyncOffset = 12.0;
- fControlLimit = 2.0;
- }
- void SetOptimal()
- {
- fVMR9AlterativeVSync = 1;
- iVMR9VSyncAccurate = 1;
- iVMR9VSync = 1;
- iVMR9FullFloatingPointProcessing = 1;
- iVMR9ColorManagementEnable = 0;
- iVMR9ColorManagementInput = VIDEO_SYSTEM_UNKNOWN;
- iVMR9ColorManagementAmbientLight = AMBIENT_LIGHT_BRIGHT;
- iVMR9ColorManagementIntent = COLOR_RENDERING_INTENT_PERCEPTUAL;
- iVMRDisableDesktopComposition = 1;
- iVMRFlushGPUBeforeVSync = 1;
- iVMRFlushGPUAfterPresent = 1;
- iVMRFlushGPUWait = 0;
- bSynchronizeVideo = 0;
- bSynchronizeDisplay = 0;
- bSynchronizeNearest = 1;
- iLineDelta = 0;
- iColumnDelta = 0;
- fCycleDelta = 0.0012;
- fTargetSyncOffset = 12.0;
- fControlLimit = 2.0;
- }
+ protected:
+ void SetDefault();
+ void SetOptimal();
};
class CRendererSettingsEVR : public CRendererSettingsShared
{
@@ -174,20 +128,8 @@ public:
{
SetDefault();
}
- void SetDefault()
- {
- CRendererSettingsShared::SetDefault();
- iEVRHighColorResolution = 0;
- iEVRForceInputHighColorResolution = 0;
- iEVREnableFrameTimeCorrection = 0;
- iEVROutputRange = 0;
- }
- void SetOptimal()
- {
- CRendererSettingsShared::SetOptimal();
- iEVRHighColorResolution = 0;
- iEVRForceInputHighColorResolution = 0;
- }
+ void SetDefault();
+ void SetOptimal();
};
CRendererSettingsEVR m_RenderSettings;
@@ -205,6 +147,7 @@ public:
bool fSPCAllowAnimationWhenBuffering;
CString D3D9RenderDevice;
+ void UpdateData(bool fSave);
};
diff --git a/src/filters/renderer/VideoRenderers/SyncRenderer.cpp b/src/filters/renderer/VideoRenderers/SyncRenderer.cpp
index deace097a..7d6a09d31 100644
--- a/src/filters/renderer/VideoRenderers/SyncRenderer.cpp
+++ b/src/filters/renderer/VideoRenderers/SyncRenderer.cpp
@@ -54,86 +54,6 @@ using namespace std;
extern bool LoadResource(UINT resid, CStringA& str, LPCTSTR restype);
-CString GothSyncErrorMessage(HRESULT _Error, HMODULE _Module)
-{
-
- switch (_Error)
- {
- case D3DERR_WRONGTEXTUREFORMAT :
- return _T("D3DERR_WRONGTEXTUREFORMAT");
- case D3DERR_UNSUPPORTEDCOLOROPERATION :
- return _T("D3DERR_UNSUPPORTEDCOLOROPERATION");
- case D3DERR_UNSUPPORTEDCOLORARG :
- return _T("D3DERR_UNSUPPORTEDCOLORARG");
- case D3DERR_UNSUPPORTEDALPHAOPERATION :
- return _T("D3DERR_UNSUPPORTEDALPHAOPERATION");
- case D3DERR_UNSUPPORTEDALPHAARG :
- return _T("D3DERR_UNSUPPORTEDALPHAARG");
- case D3DERR_TOOMANYOPERATIONS :
- return _T("D3DERR_TOOMANYOPERATIONS");
- case D3DERR_CONFLICTINGTEXTUREFILTER :
- return _T("D3DERR_CONFLICTINGTEXTUREFILTER");
- case D3DERR_UNSUPPORTEDFACTORVALUE :
- return _T("D3DERR_UNSUPPORTEDFACTORVALUE");
- case D3DERR_CONFLICTINGRENDERSTATE :
- return _T("D3DERR_CONFLICTINGRENDERSTATE");
- case D3DERR_UNSUPPORTEDTEXTUREFILTER :
- return _T("D3DERR_UNSUPPORTEDTEXTUREFILTER");
- case D3DERR_CONFLICTINGTEXTUREPALETTE :
- return _T("D3DERR_CONFLICTINGTEXTUREPALETTE");
- case D3DERR_DRIVERINTERNALERROR :
- return _T("D3DERR_DRIVERINTERNALERROR");
- case D3DERR_NOTFOUND :
- return _T("D3DERR_NOTFOUND");
- case D3DERR_MOREDATA :
- return _T("D3DERR_MOREDATA");
- case D3DERR_DEVICELOST :
- return _T("D3DERR_DEVICELOST");
- case D3DERR_DEVICENOTRESET :
- return _T("D3DERR_DEVICENOTRESET");
- case D3DERR_NOTAVAILABLE :
- return _T("D3DERR_NOTAVAILABLE");
- case D3DERR_OUTOFVIDEOMEMORY :
- return _T("D3DERR_OUTOFVIDEOMEMORY");
- case D3DERR_INVALIDDEVICE :
- return _T("D3DERR_INVALIDDEVICE");
- case D3DERR_INVALIDCALL :
- return _T("D3DERR_INVALIDCALL");
- case D3DERR_DRIVERINVALIDCALL :
- return _T("D3DERR_DRIVERINVALIDCALL");
- case D3DERR_WASSTILLDRAWING :
- return _T("D3DERR_WASSTILLDRAWING");
- case D3DOK_NOAUTOGEN :
- return _T("D3DOK_NOAUTOGEN");
- case D3DERR_DEVICEREMOVED :
- return _T("D3DERR_DEVICEREMOVED");
- case S_NOT_RESIDENT :
- return _T("S_NOT_RESIDENT");
- case S_RESIDENT_IN_SHARED_MEMORY :
- return _T("S_RESIDENT_IN_SHARED_MEMORY");
- case S_PRESENT_MODE_CHANGED :
- return _T("S_PRESENT_MODE_CHANGED");
- case S_PRESENT_OCCLUDED :
- return _T("S_PRESENT_OCCLUDED");
- case D3DERR_DEVICEHUNG :
- return _T("D3DERR_DEVICEHUNG");
- case E_UNEXPECTED :
- return _T("E_UNEXPECTED");
- }
-
- CString errmsg;
- LPVOID lpMsgBuf;
- if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|FORMAT_MESSAGE_FROM_HMODULE,
- _Module, _Error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL))
- {
- errmsg = (LPCTSTR)lpMsgBuf;
- LocalFree(lpMsgBuf);
- }
- CString Temp;
- Temp.Format(L"0x%08x ", _Error);
- return Temp + errmsg;
-}
-
CBaseAP::CBaseAP(HWND hWnd, bool bFullscreen, HRESULT& hr, CString &_Error):
CSubPicAllocatorPresenterImpl(hWnd, hr, &_Error),
m_ScreenSize(0, 0),
@@ -578,11 +498,11 @@ HRESULT CBaseAP::CreateDXDevice(CString &_Error)
DisplayMode.Format = pp.BackBufferFormat;
pp.FullScreen_RefreshRateInHz = DisplayMode.RefreshRate;
- if FAILED(m_pD3DEx->CreateDeviceEx(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd,
+ if FAILED(hr = m_pD3DEx->CreateDeviceEx(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING|D3DCREATE_FPU_PRESERVE|D3DCREATE_MULTITHREADED|D3DCREATE_ENABLE_PRESENTSTATS,
&pp, &DisplayMode, &m_pD3DDevEx))
{
- _Error += GothSyncErrorMessage(hr, m_hD3D9);
+ _Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
}
if (m_pD3DDevEx)
@@ -594,9 +514,9 @@ HRESULT CBaseAP::CreateDXDevice(CString &_Error)
}
else
{
- if FAILED(m_pD3D->CreateDevice(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING|D3DCREATE_FPU_PRESERVE|D3DCREATE_MULTITHREADED, &pp, &m_pD3DDev))
+ if FAILED(hr = m_pD3D->CreateDevice(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING|D3DCREATE_FPU_PRESERVE|D3DCREATE_MULTITHREADED, &pp, &m_pD3DDev))
{
- _Error += GothSyncErrorMessage(hr, m_hD3D9);
+ _Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
}
_tprintf(_T("Created full-screen device\n"));
@@ -644,22 +564,22 @@ HRESULT CBaseAP::CreateDXDevice(CString &_Error)
}
if (m_pD3DEx)
{
- if FAILED(m_pD3DEx->CreateDeviceEx(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd,
+ if FAILED(hr = m_pD3DEx->CreateDeviceEx(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING|D3DCREATE_FPU_PRESERVE|D3DCREATE_MULTITHREADED|D3DCREATE_ENABLE_PRESENTSTATS,
&pp, NULL, &m_pD3DDevEx))
{
- _Error += GothSyncErrorMessage(hr, m_hD3D9);
+ _Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
}
if (m_pD3DDevEx) m_pD3DDev = m_pD3DDevEx;
}
else
{
- if FAILED(m_pD3D->CreateDevice(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd,
+ if FAILED(hr = m_pD3D->CreateDevice(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING|D3DCREATE_FPU_PRESERVE|D3DCREATE_MULTITHREADED,
&pp, &m_pD3DDev))
{
- _Error += GothSyncErrorMessage(hr, m_hD3D9);
+ _Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
}
_tprintf(_T("Created windowed device\n"));
@@ -898,7 +818,7 @@ HRESULT CBaseAP::ResetDXDevice(CString &_Error)
pp.FullScreen_RefreshRateInHz = DisplayMode.RefreshRate;
if FAILED(m_pD3DDevEx->Reset(&pp))
{
- _Error += GothSyncErrorMessage(hr, m_hD3D9);
+ _Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
}
}
@@ -906,7 +826,7 @@ HRESULT CBaseAP::ResetDXDevice(CString &_Error)
{
if FAILED(m_pD3DDev->Reset(&pp))
{
- _Error += GothSyncErrorMessage(hr, m_hD3D9);
+ _Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
}
}
@@ -946,13 +866,13 @@ HRESULT CBaseAP::ResetDXDevice(CString &_Error)
if (m_pD3DDevEx)
if FAILED(m_pD3DDevEx->Reset(&pp))
{
- _Error += GothSyncErrorMessage(hr, m_hD3D9);
+ _Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
}
else if (m_pD3DDev)
if FAILED(m_pD3DDevEx->Reset(&pp))
{
- _Error += GothSyncErrorMessage(hr, m_hD3D9);
+ _Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
}
else
@@ -4079,7 +3999,7 @@ HRESULT CreateSyncRenderer(const CLSID& clsid, HWND hWnd, bool bFullscreen, ISub
if(FAILED(hr))
{
Error += L"\n";
- Error += GothSyncErrorMessage(hr, NULL);
+ Error += GetWindowsErrorMessage(hr, NULL);
MessageBox(hWnd, Error, L"Error creating EVR Sync", MB_OK | MB_ICONERROR);
(*ppAP)->Release();
*ppAP = NULL;