protected override HRESULT OnInitInterfaces() { m_evStop.Reset(); HRESULT hr; { hr = (HRESULT)MFHelper.DXVA2CreateDirect3DDeviceManager9(out m_DeviceResetToken, out m_DeviceManager); hr.Assert(); if (hr.Succeeded) { hr = (HRESULT)m_DeviceManager.ResetDevice(Marshal.GetObjectForIUnknown(m_Device.ComPointer), m_DeviceResetToken); hr.Assert(); } m_Caller = new Wrapper(this); } m_Renderer = new EVRRenderer(); bool bAllocatorUsed = false; IMFVideoRenderer _renderer = (IMFVideoRenderer)m_Renderer.QueryInterface(typeof(IMFVideoRenderer)); hr = (HRESULT)_renderer.InitializeRenderer(null, (IMFVideoPresenter)this); hr.Assert(); bAllocatorUsed = hr.Succeeded; m_Renderer.FilterGraph = m_GraphBuilder; hr = base.OnInitInterfaces(); if (!bAllocatorUsed && m_VideoControl != null) { IMFGetService _service = (IMFGetService)m_Renderer.QueryInterface(typeof(IMFGetService)); IntPtr _object; hr = (HRESULT)_service.GetService(MFServices.MR_VIDEO_RENDER_SERVICE, typeof(IMFVideoDisplayControl).GUID, out _object); hr.Assert(); IMFVideoDisplayControl _display = (IMFVideoDisplayControl)Marshal.GetObjectForIUnknown(_object); hr = (HRESULT)_display.SetVideoWindow(m_VideoControl.Handle); hr.Assert(); DsRect _rect = new DsRect(m_VideoControl.ClientRectangle); hr = (HRESULT)_display.SetVideoPosition(new MFVideoNormalizedRect(), _rect); hr.Assert(); } return hr; }
protected override HRESULT OnCloseInterfaces() { m_evStop.Set(); if (m_Renderer) { m_Renderer.Dispose(); m_Renderer = null; } HRESULT hr = base.OnCloseInterfaces(); if (m_Caller != null) m_Caller.Dispose(); if (m_scheduler != null) { m_scheduler.StopScheduler(); } if (m_SamplePool != null) { m_SamplePool.Clear(); } return hr; }