/// <summary> /// Versucht den DVB.NET Datenstrom direkt mit dem zugehörigen Decoder zu verbinden. /// </summary> /// <param name="decoder">Ein manuell angelegter Decoder.</param> /// <param name="source">Der zu verwendende Ausgang.</param> /// <param name="mediaType">Das verwendete Format.</param> /// <returns>Gesetzt, wenn die Verbindung aufgebaut wurde.</returns> private bool TryDirectConnect(TypedComIdentity <IBaseFilter> decoder, OutputPin source, MediaType mediaType) { // In normal cases we should directly connect to the filter so try var connected = false; // Try manual connect decoder.InspectAllPins(p => p.QueryDirection() == PinDirection.Input, pin => { // Skip on error try { // Get the raw interface for the media type var type = mediaType.GetReference(); // Process using (var iFace = ComIdentity.Create <IPin>(pin)) source.Connect(iFace.Interface, type); // Did it connected = true; } catch (Exception) { } // First pin only - even if it can not be used! return(false); }); // Failed if (!connected) { return(false); } // Find the output of the decoder and render it decoder.InspectAllPins(p => p.QueryDirection() == PinDirection.Output, pin => { // Create helper using (var pinWrapper = ComIdentity.Create <IPin>(pin)) DirectShowObject.Render(pinWrapper.Interface); // Did it return(false); }); // Report return(connected); }
/// <summary> /// Verbindet diesen Ausgang mit dem Eingang eines beliebigen Filters. /// </summary> /// <param name="receiver">Der Filter, der die erzeugten Daten verarbeiten soll.</param> /// <param name="mediaType">Die Art der zu verwendenden Daten.</param> public void Connect(TypedComIdentity <IBaseFilter> receiver, MediaType mediaType) { // Attach to the one input pin var to = receiver.GetSinglePin(PinDirection.Input); try { // Process Connect(to.Interface, mediaType.GetReference()); } finally { // Cleanup BDAEnvironment.Release(ref to); } }