public void Dispose() { if (m_Riff != null) { m_Riff.Dispose(); m_Riff = null; } if (m_pEventQueue != null) { Marshal.ReleaseComObject(m_pEventQueue); m_pEventQueue = null; } if (m_pSource != null) { //m_pSource.Dispose(); Children don't dispose their parents... m_pSource = null; } if (m_pStreamDescriptor != null) { Marshal.ReleaseComObject(m_pStreamDescriptor); m_pStreamDescriptor = null; } if (m_Log != null) { m_Log.Dispose(); m_Log = null; } GC.SuppressFinalize(this); }
public int BeginCreateObject( IMFByteStream pByteStream, string pwszURL, MFResolution dwFlags, IPropertyStore pProps, // Can be NULL. out object ppIUnknownCancelCookie, // Can be NULL. IMFAsyncCallback pCallback, object punkState // Can be NULL ) { // Make sure we *never* leave this entry point with an exception try { int hr; m_Log.WriteLine("BeginCreateObject"); ppIUnknownCancelCookie = null; // We don't return a cancellation cookie. if ((pByteStream == null) || (pwszURL == null) || (pCallback == null)) { throw new COMException("bad stream, url, or callback", E_InvalidArgument); } IMFAsyncResult pResult = null; WavSource pSource = new WavSource(); pSource.Open(pByteStream); hr = MFExtern.MFCreateAsyncResult(pSource as IMFMediaSource, pCallback, punkState, out pResult); MFError.ThrowExceptionForHR(hr); hr = MFExtern.MFInvokeCallback(pResult); MFError.ThrowExceptionForHR(hr); if (pResult != null) { Marshal.ReleaseComObject(pResult); } return S_Ok; } catch (Exception e) { ppIUnknownCancelCookie = null; return Marshal.GetHRForException(e); } }
long m_rtCurrentPosition; // Current position in the stream, in 100-ns units #endregion Fields #region Constructors public WavStream(WavSource pSource, CWavRiffParser pRiff, IMFStreamDescriptor pSD) { int hr; m_pEventQueue = null; m_Log = new xLog("WavStream"); #if false m_nRefCount(0), m_IsShutdown(false), m_rtCurrentPosition(0), m_discontinuity(false), m_EOS(false) #endif m_pSource = pSource; m_pStreamDescriptor = pSD; m_Riff = pRiff; // Create the media event queue. hr = MFExternAlt.MFCreateEventQueue(out m_pEventQueue); MFError.ThrowExceptionForHR(hr); }