void DMO_Filter_Destroy(DMO_Filter* This) { if (This->m_pOptim) This->m_pOptim->vt->Release((IUnknown*)This->m_pOptim); if (This->m_pInPlace) This->m_pInPlace->vt->Release((IUnknown*)This->m_pInPlace); if (This->m_pMedia) This->m_pMedia->vt->Release((IUnknown*)This->m_pMedia); free(This); #ifdef WIN32_LOADER CodecRelease(); #endif }
MMRESULT WINAPI acmStreamClose(HACMSTREAM has, DWORD fdwClose) { PWINE_ACMSTREAM was; MMRESULT ret; TRACE("(0x%08x, %ld)\n", has, fdwClose); if ((was = ACM_GetStream(has)) == NULL) { return MMSYSERR_INVALHANDLE; } ret = SendDriverMessage(was->pDrv->hDrvr, ACMDM_STREAM_CLOSE, (DWORD)&was->drvInst, 0); if (ret == MMSYSERR_NOERROR) { if (was->hAcmDriver) acmDriverClose(was->hAcmDriver, 0L); HeapFree(MSACM_hHeap, 0, was); CodecRelease(); } TRACE("=> (%d)\n", ret); return ret; }
void DrvClose(HDRVR hDriver) { if (hDriver) { DRVR* d = (DRVR*)hDriver; if (d->hDriverModule) { #ifdef WIN32_LOADER Setup_FS_Segment(); #endif if (d->DriverProc) { SendDriverMessage(hDriver, DRV_CLOSE, 0, 0); d->dwDriverID = 0; SendDriverMessage(hDriver, DRV_FREE, 0, 0); } FreeLibrary(d->hDriverModule); } free(d); } #ifdef WIN32_LOADER CodecRelease(); #endif }