STDMETHODIMP CMpcAudioRenderer::NonDelegatingQueryInterface(REFIID riid, void **ppv) { if (riid == IID_IReferenceClock) { return GetReferenceClockInterface(riid, ppv); } return CBaseRenderer::NonDelegatingQueryInterface (riid, ppv); }
STDMETHODIMP CMpcAudioRenderer::NonDelegatingQueryInterface(REFIID riid, void **ppv) { if (riid == IID_IReferenceClock) { return GetReferenceClockInterface(riid, ppv); } else if (riid == IID_IDispatch) { return GetInterface(static_cast<IDispatch*>(this), ppv); } else if (riid == IID_IBasicAudio) { 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); }
HRESULT CMpcAudioRenderer::GetReferenceClockInterface(REFIID riid, void **ppv) { HRESULT hr = S_OK; if (m_pReferenceClock) return m_pReferenceClock->NonDelegatingQueryInterface(riid, ppv); m_pReferenceClock = new CBaseReferenceClock (NAME("Mpc Audio Clock"), NULL, &hr); if (! m_pReferenceClock) return E_OUTOFMEMORY; m_pReferenceClock->AddRef(); hr = SetSyncSource(m_pReferenceClock); if (FAILED(hr)) { SetSyncSource(NULL); return hr; } return GetReferenceClockInterface(riid, ppv); }
HRESULT CMpcAudioRenderer::GetReferenceClockInterface(REFIID riid, void** ppv) { HRESULT hr = S_OK; if (m_pReferenceClock) { return m_pReferenceClock->NonDelegatingQueryInterface(riid, ppv); } m_pReferenceClock = DEBUG_NEW CBaseReferenceClock(NAME("MPC-HC Audio Clock"), nullptr, &hr); if (!m_pReferenceClock) { return E_OUTOFMEMORY; } m_pReferenceClock->AddRef(); hr = SetSyncSource(m_pReferenceClock); if (FAILED(hr)) { SetSyncSource(nullptr); return hr; } return GetReferenceClockInterface(riid, ppv); }