/// <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);
        }
Esempio n. 2
0
        /// <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);
            }
        }