Exemple #1
0
        ///////////////////////////////////////////////////////////////////////
        //  Name: CreateOutputNode
        //  Description:  Creates an output node for a stream sink.
        //
        //  pSink:     The media sink.
        //  iStream:   Index of the stream sink on the media sink.
        //  ppNode:    Receives a pointer to the topology node.
        ///////////////////////////////////////////////////////////////////////

        static void CreateOutputNode(IMFMediaSinkAlt pSink, int iStream, out IMFTopologyNode ppNode)
        {
            HResult          hr;
            IMFStreamSinkAlt pStream = null;

            hr = pSink.GetStreamSinkByIndex(iStream, out pStream);
            MFError.ThrowExceptionForHR(hr);

            hr = MFExtern.MFCreateTopologyNode(MFTopologyType.OutputNode, out ppNode);
            MFError.ThrowExceptionForHR(hr);

            hr = ppNode.SetObject(pStream);
            MFError.ThrowExceptionForHR(hr);

            //Marshal.ReleaseComObject(pStream);
        }
        public HResult GetStreamSinkByIndex(int dwIndex, out IMFStreamSinkAlt ppStreamSink)
        {
            Debug.WriteLine("MediaSink:GetStreamSinkByIndex");

            ppStreamSink = null;
            if (dwIndex != 0)
            {
                return(MF_E_INVALIDINDEX);
            }

            lock (this)
            {
                if (IsShutdown)
                {
                    return(MF_E_SHUTDOWN);
                }

                ppStreamSink = StreamSink;
            }

            return(S_OK);
        }
        public HResult GetStreamSinkById(int dwStreamSinkIdentifier, out IMFStreamSinkAlt ppStreamSink)
        {
            Debug.WriteLine("MediaSink:GetStreamSinkById");

            ppStreamSink = null;
            if (dwStreamSinkIdentifier != 0)
            {
                return(MF_E_INVALIDSTREAMNUMBER);
            }

            lock (this)
            {
                if (IsShutdown)
                {
                    return(MF_E_SHUTDOWN);
                }

                ppStreamSink = StreamSink;
            }

            return(S_OK);
        }
Exemple #4
0
        //-------------------------------------------------------------------
        // Name: GetStreamSinkByIndex
        // Description: Retrieves a stream by index.
        //-------------------------------------------------------------------
        public int GetStreamSinkByIndex(
            int dwIndex,
            out IMFStreamSinkAlt ppStreamSink)
        {
            // Make sure we *never* leave this entry point with an exception
            try
            {
                TRACE("CWavSink::GetStreamSinkByIndex");
                lock (this)
                {
                    // Fixed stream: Index 0.
                    if (dwIndex > 0)
                    {
                        throw new COMException("Invalid index", MFError.MF_E_INVALIDINDEX);
                    }

                    CheckShutdown();

                    ppStreamSink = m_pStream;
                }
                return S_Ok;
            }
            catch (Exception e)
            {
                ppStreamSink = null;
                return Marshal.GetHRForException(e);
            }
        }
Exemple #5
0
        //-------------------------------------------------------------------
        // Name: GetStreamSinkById
        // Description: Retrieves a stream by ID.
        //-------------------------------------------------------------------
        public int GetStreamSinkById(
            int dwStreamSinkIdentifier,
            out IMFStreamSinkAlt ppStreamSink)
        {
            // Make sure we *never* leave this entry point with an exception
            try
            {
                TRACE("CWavSink::GetStreamSinkById");
                lock (this)
                {
                    // Fixed stream ID.
                    if (dwStreamSinkIdentifier != WAV_SINK_STREAM_ID)
                    {
                        throw new COMException("Stream id not valid", MFError.MF_E_INVALIDSTREAMNUMBER);
                    }

                    CheckShutdown();

                    ppStreamSink = m_pStream;
                }
                return S_Ok;
            }
            catch (Exception e)
            {
                ppStreamSink = null;
                return Marshal.GetHRForException(e);
            }
        }
Exemple #6
0
 //-------------------------------------------------------------------
 // Name: AddStreamSink
 // Description: Adds a new stream to the sink.
 //
 // Note: This sink has a fixed number of streams, so this method
 //       always returns MF_E_STREAMSINKS_FIXED.
 //-------------------------------------------------------------------
 public int AddStreamSink(
     int dwStreamSinkIdentifier,
     IMFMediaType pMediaType,
     out IMFStreamSinkAlt ppStreamSink)
 {
     // Make sure we *never* leave this entry point with an exception
     try
     {
         TRACE("CWavSink::AddStreamSink");
         throw new COMException("Fixed streams", MFError.MF_E_STREAMSINKS_FIXED);
     }
     catch (Exception e)
     {
         ppStreamSink = null;
         return Marshal.GetHRForException(e);
     }
 }
        private static HResult CreateOutputNode(IMFStreamDescriptor streamDescriptor, out IMFMediaSinkAlt mediaSink, out IMFTopologyNode node)
        {
            HResult hr = S_OK;

            mediaSink = null;
            node      = null;
            IMFMediaTypeHandler mediaTypeHandler = null;
            IMFActivate         activate         = null;
            IMFStreamSinkAlt    streamSink       = null;
            Guid majorType       = Guid.Empty;
            int  streamSinkCount = 0;

            hr = streamDescriptor.GetMediaTypeHandler(out mediaTypeHandler);
            if (Failed(hr))
            {
                return(hr);
            }

            hr = mediaTypeHandler.GetMajorType(out majorType);
            if (Failed(hr))
            {
                SafeRelease(mediaTypeHandler);
                return(hr);
            }

            hr = MF.CreateTopologyNode(MFTopologyType.OutputNode, out node);
            if (Failed(hr))
            {
                SafeRelease(mediaTypeHandler);
                return(hr);
            }

            if (majorType == MFMediaType.Video)
            {
                ExternalMediaSink extMediaSink = new ExternalMediaSink();


                mediaSink = (IMFMediaSinkAlt)extMediaSink;

                hr = mediaSink.GetStreamSinkCount(out streamSinkCount);
                if (Failed(hr))
                {
                    mediaSink = null;
                    return(hr);
                }

                hr = mediaSink.GetStreamSinkByIndex(0, out streamSink);
                if (Failed(hr))
                {
                    mediaSink = null;
                    return(hr);
                }

                hr = node.SetObject(streamSink);
                if (Failed(hr))
                {
                    mediaSink = null;
                    return(hr);
                }
            }
            else if (majorType == MFMediaType.Audio)
            {
                hr = MF.CreateAudioRendererActivate(out activate);
                if (Failed(hr))
                {
                    return(hr);
                }

                hr = node.SetObject(activate);
                if (Failed(hr))
                {
                    return(hr);
                }
            }

            mediaTypeHandler = null;
            activate         = null;
            streamSink       = null;

            return(hr);
        }
 public HResult AddStreamSink(int dwStreamSinkIdentifier, IMFMediaType pMediaType, out IMFStreamSinkAlt ppStreamSink)
 {
     Debug.WriteLine("MediaSink:AddStreamSink");
     ppStreamSink = null;
     return(MF_E_STREAMSINKS_FIXED);
 }