private void Configure() { int hr; DMOWrapperFilter dmoFilter = new DMOWrapperFilter(); IDMOWrapperFilter dmoWrapperFilter = (IDMOWrapperFilter)dmoFilter; // Chorus - {efe6629c-81f7-4281-bd91-c9d604a95af6} // DmoFlip - {7EF28FD7-E88F-45bb-9CDD-8A62956F2D75} //hr = dmoWrapperFilter.Init(new Guid("{7EF28FD7-E88F-45bb-9CDD-8A62956F2D75}"), DMOCategory.AudioEffect); hr = dmoWrapperFilter.Init(new Guid("{efe6629c-81f7-4281-bd91-c9d604a95af6}"), DMOCategory.AudioEffect); DMOError.ThrowExceptionForHR(hr); m_impi = dmoWrapperFilter as IMediaParamInfo; }
private void junk() { int hr; IEnumDMO idmo; Guid [] g = new Guid[1]; string [] sn = new string[1]; int iCount = 0; hr = DMOUtils.DMOEnum(Guid.Empty, DMOEnumerator.None, 0, null, 0, null, out idmo); DMOError.ThrowExceptionForHR(hr); do { DMOWrapperFilter dmoFilter = new DMOWrapperFilter(); IDMOWrapperFilter dmoWrapperFilter = (IDMOWrapperFilter)dmoFilter; hr = idmo.Next(1, g, sn, IntPtr.Zero); DMOError.ThrowExceptionForHR(hr); if (hr > 0) { break; } hr = dmoWrapperFilter.Init(g[0], Guid.Empty); if (hr >= 0) { m_impi = dmoWrapperFilter as IMediaParamInfo; if (m_impi != null) { hr = m_impi.GetParamCount(out iCount); } else { iCount = 0; } if (iCount > 0) { Debug.WriteLine(string.Format("{0} {1} {2}", sn[0], iCount, g[0])); } } } while (iCount >= 0); }
/// <summary> /// Connecte le File Splitter et le renderer vidéo en créant le décodeur vidéo. /// </summary> /// <param name="graph">Le graphe.</param> /// <param name="filtersConfig">La configuration pour ce fichier.</param> /// <param name="parserOutputVideoPin">Le pin de sortie vidéo</param> /// <param name="videoRendererInputPin">Le pin d'entrée du Renderer.</param> internal static void ConnectSplitterAndRendererWithDecoder(IGraphBuilder graph, ExtensionFiltersSource filtersConfig, IPin parserOutputVideoPin, IPin videoRendererInputPin) { FilterSource videoFilterSource = filtersConfig.VideoDecoder; switch (videoFilterSource.SourceType) { case FilterSourceTypeEnum.Auto: int hr = graph.Connect(parserOutputVideoPin, videoRendererInputPin); DsError.ThrowExceptionForHR(hr); break; case FilterSourceTypeEnum.External: if (new Guid(videoFilterSource.ExternalCLSID) == new Guid(CLSID_VIDEO_DECODER_DMO)) { // The DMO filter is handled differently DMOWrapperFilter dmoFilter = new DMOWrapperFilter(); IDMOWrapperFilter wrapper = (IDMOWrapperFilter)dmoFilter; hr = wrapper.Init(new Guid(CLSID_VIDEO_DECODER_DMO), DirectShowLib.DMO.DMOCategory.VideoDecoder); DsError.ThrowExceptionForHR(hr); if (dmoFilter is IBaseFilter decoderFilter) { hr = graph.AddFilter(decoderFilter, "WMVideo Decoder DMO"); DsError.ThrowExceptionForHR(hr); IPin wmvDecoderInputPin = DsFindPin.ByDirection(decoderFilter, PinDirection.Input, 0); hr = graph.ConnectDirect(parserOutputVideoPin, wmvDecoderInputPin, null); DsError.ThrowExceptionForHR(hr); IPin wmvDecoderOutputPin = DsFindPin.ByDirection(decoderFilter, PinDirection.Output, 0); hr = graph.ConnectDirect(wmvDecoderOutputPin, videoRendererInputPin, null); DsError.ThrowExceptionForHR(hr); SafeRelease(wmvDecoderInputPin); SafeRelease(wmvDecoderOutputPin); } else { wrapper = null; SafeRelease(dmoFilter); dmoFilter = null; } } else { Type filterType = null; IBaseFilter externalFilter = null; CreateFilter(videoFilterSource.ExternalCLSID, videoFilterSource.Name, ref filterType, ref externalFilter); hr = graph.AddFilter(externalFilter, videoFilterSource.Name); DsError.ThrowExceptionForHR(hr); IPin externalDecoderInputPin = DsFindPin.ByDirection(externalFilter, PinDirection.Input, 0); hr = graph.ConnectDirect(parserOutputVideoPin, externalDecoderInputPin, null); DsError.ThrowExceptionForHR(hr); IPin externalDecoderOutputPin = DsFindPin.ByDirection(externalFilter, PinDirection.Output, 0); hr = graph.ConnectDirect(externalDecoderOutputPin, videoRendererInputPin, null); DsError.ThrowExceptionForHR(hr); SafeRelease(externalDecoderInputPin); SafeRelease(externalDecoderOutputPin); } break; default: throw new ArgumentOutOfRangeException($"{nameof(videoFilterSource)}.{nameof(FilterSource.SourceType)}"); } }