CMpcAudioRenderer::~CMpcAudioRenderer() { Stop(); SAFE_DELETE (m_pSoundTouch); SAFE_RELEASE (m_pDSBuffer); SAFE_RELEASE (m_pDS); SAFE_RELEASE (pRenderClient); SAFE_RELEASE (pAudioClient); SAFE_RELEASE (pMMDevice); if (m_pReferenceClock) { SetSyncSource(NULL); SAFE_RELEASE (m_pReferenceClock); } if (m_pWaveFileFormat) { BYTE *p = (BYTE *)m_pWaveFileFormat; SAFE_DELETE_ARRAY(p); } if (hTask != NULL && pfAvRevertMmThreadCharacteristics != NULL) { pfAvRevertMmThreadCharacteristics(hTask); } }
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); }
CBaseStreamControl::~CBaseStreamControl() { // Make sure we release the clock. SetSyncSource(NULL); return; }