示例#1
0
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);
    }
}
示例#2
0
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);
}
示例#3
0
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);
}
示例#4
0
CBaseStreamControl::~CBaseStreamControl()
{
    // Make sure we release the clock.
    SetSyncSource(NULL);
    return;
}