Beispiel #1
0
        /// <summary> start all the interfaces, graphs and preview window. </summary>
        bool StartupVideo(UCOMIMoniker mon)

        {
            int hr;

            try
            {
                if (!CreateCaptureDevice(mon))
                {
                    return(false);
                }

                if (!GetInterfaces())
                {
                    return(false);
                }

                if (!SetupGraph())
                {
                    return(false);
                }

                if (!SetupVideoWindow())
                {
                    return(false);
                }

                 #if DEBUG
                DsROT.AddGraphToRot(graphBuilder, out rotCookie);               // graphBuilder capGraph
                   #endif

                hr = mediaCtrl.Run();
                if (hr < 0)
                {
                    Marshal.ThrowExceptionForHR(hr);
                }

                bool hasTuner = DsUtils.ShowTunerPinDialog(capGraph, capFilter, this.Handle);
                // toolBarBtnTune.Enabled = hasTuner;

                return(true);
            }
            catch (Exception ee)
            {
                MessageBox.Show(this, "Could not start video stream\r\n" + ee.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return(false);
            }
        }
Beispiel #2
0
        /// <summary> start all the interfaces, graphs and preview window. </summary>
        bool StartupVideo(UCOMIMoniker mon)
        {
            int hr;

            try
            {
                if (!CreateCaptureDevice(mon))
                {
                    return(false);
                }

                if (!GetInterfaces())
                {
                    return(false);
                }

                if (!SetupGraph())
                {
                    return(false);
                }

                if (!SetupVideoWindow())
                {
                    return(false);
                }

#if DEBUG
                DsROT.AddGraphToRot(graphBuilder, out rotCookie);       // graphBuilder capGraph
#endif

                hr = mediaCtrl.Run();
                if (hr < 0)
                {
                    Marshal.ThrowExceptionForHR(hr);
                }

                CaptureImage(); // Begins updating...

                return(true);
            }
            catch (Exception ee)
            {
                MessageBox.Show(this, "Could not start video stream\r\n" + ee.Message, "DirectShow.NET", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return(false);
            }
        }
Beispiel #3
0
        /// <summary> start all the interfaces, graphs and preview window. </summary>
        bool StartupVideo()
        {
            int hr;

            try
            {
                GetInterfaces();

                SetupGraph();

#if DEBUG
                DsROT.AddGraphToRot(graphBuilder, out rotCookie);               // graphBuilder capGraph
#endif

                return(true);
            }
            catch (Exception ee)
            {
                LogInfo(LogGroups.Console, "Could not start video stream\r\n" + ee.Message);
                return(false);
            }
        }
Beispiel #4
0
        protected void createGraph()
        {
            Guid cat;
            Guid med;
            int  hr;

            // Ensure required properties are set
            if (videoDevice == null && audioDevice == null)
            {
                throw new ArgumentException("The video and/or audio device have not been set. Please set one or both to valid capture devices.\n");
            }

            // Skip if we are already created
            if ((int)graphState < (int)GraphState.Created)
            {
                // Garbage collect, ensure that previous filters are released
                GC.Collect();

                // Make a new filter graph
                graphBuilder = (IGraphBuilder)Activator.CreateInstance(Type.GetTypeFromCLSID(Clsid.FilterGraph, true));

                // Get the Capture Graph Builder
                Guid clsid = Clsid.CaptureGraphBuilder2;
                Guid riid  = typeof(ICaptureGraphBuilder2).GUID;
                captureGraphBuilder = (ICaptureGraphBuilder2)BugFixes.InstantiateDirectShow(ref clsid, ref riid);

                // Link the CaptureGraphBuilder to the filter graph
                hr = captureGraphBuilder.SetFiltergraph(graphBuilder);
                if (hr < 0)
                {
                    Marshal.ThrowExceptionForHR(hr);
                }

                // Add the graph to the Running Object Table so it can be
                // viewed with GraphEdit
#if DEBUG
                rotCookie = DsROT.AddGraphToRot(graphBuilder);
#endif

                // Get the video device and add it to the filter graph
                if (VideoDevice != null)
                {
                    videoDeviceFilter = (IBaseFilter)Marshal.BindToMoniker(VideoDevice.MonikerString);
                    hr = graphBuilder.AddFilter(videoDeviceFilter, "Video Capture Device");
                    if (hr < 0)
                    {
                        Marshal.ThrowExceptionForHR(hr);
                    }
                }

                // Get the audio device and add it to the filter graph
                if (AudioDevice != null)
                {
                    audioDeviceFilter = (IBaseFilter)Marshal.BindToMoniker(AudioDevice.MonikerString);
                    hr = graphBuilder.AddFilter(audioDeviceFilter, "Audio Capture Device");
                    if (hr < 0)
                    {
                        Marshal.ThrowExceptionForHR(hr);
                    }
                }

                // Get the video compressor and add it to the filter graph
                if (VideoCompressor != null)
                {
                    videoCompressorFilter = (IBaseFilter)Marshal.BindToMoniker(VideoCompressor.MonikerString);
                    hr = graphBuilder.AddFilter(videoCompressorFilter, "Video Compressor");
                    if (hr < 0)
                    {
                        Marshal.ThrowExceptionForHR(hr);
                    }
                }

                // Get the audio compressor and add it to the filter graph
                if (AudioCompressor != null)
                {
                    audioCompressorFilter = (IBaseFilter)Marshal.BindToMoniker(AudioCompressor.MonikerString);
                    hr = graphBuilder.AddFilter(audioCompressorFilter, "Audio Compressor");
                    if (hr < 0)
                    {
                        Marshal.ThrowExceptionForHR(hr);
                    }
                }

                // Retrieve the stream control interface for the video device
                // FindInterface will also add any required filters
                // (WDM devices in particular may need additional
                // upstream filters to function).

                // Try looking for an interleaved media type
                object o;
                cat = PinCategory.Capture;
                med = MediaType.Interleaved;
                Guid iid = typeof(IAMStreamConfig).GUID;
                hr = captureGraphBuilder.FindInterface(
                    ref cat, ref med, videoDeviceFilter, ref iid, out o);

                if (hr != 0)
                {
                    // If not found, try looking for a video media type
                    med = MediaType.Video;
                    hr  = captureGraphBuilder.FindInterface(
                        ref cat, ref med, videoDeviceFilter, ref iid, out o);

                    if (hr != 0)
                    {
                        o = null;
                    }
                }
                videoStreamConfig = o as IAMStreamConfig;

                // Retrieve the stream control interface for the audio device
                o   = null;
                cat = PinCategory.Capture;
                med = MediaType.Audio;
                iid = typeof(IAMStreamConfig).GUID;
                hr  = captureGraphBuilder.FindInterface(
                    ref cat, ref med, audioDeviceFilter, ref iid, out o);
                if (hr != 0)
                {
                    o = null;
                }
                audioStreamConfig = o as IAMStreamConfig;

                // Retreive the media control interface (for starting/stopping graph)
                mediaControl = (IMediaControl)graphBuilder;

                // Reload any video crossbars
                if (videoSources != null)
                {
                    videoSources.Dispose();
                }
                videoSources = null;

                // Reload any audio crossbars
                if (audioSources != null)
                {
                    audioSources.Dispose();
                }
                audioSources = null;

                // Reload any property pages exposed by filters
                if (propertyPages != null)
                {
                    propertyPages.Dispose();
                }
                propertyPages = null;

                // Reload capabilities of video device
                videoCaps = null;

                // Reload capabilities of video device
                audioCaps = null;

                // Retrieve TV Tuner if available
                o   = null;
                cat = PinCategory.Capture;
                med = MediaType.Interleaved;
                iid = typeof(IAMTVTuner).GUID;
                hr  = captureGraphBuilder.FindInterface(
                    ref cat, ref med, videoDeviceFilter, ref iid, out o);
                if (hr != 0)
                {
                    med = MediaType.Video;
                    hr  = captureGraphBuilder.FindInterface(
                        ref cat, ref med, videoDeviceFilter, ref iid, out o);
                    if (hr != 0)
                    {
                        o = null;
                    }
                }
                IAMTVTuner t = o as IAMTVTuner;
                if (t != null)
                {
                    tuner = new Tuner(t);
                }



                // Update the state now that we are done
                graphState = GraphState.Created;
            }
        }
Beispiel #5
0
        protected void CreateGraph()
        {
            // Ensure required properties are set
            if (videoDevice == null && audioDevice == null)
            {
                throw new ArgumentException("The video and/or audio device have not been set. Please set one or both to valid capture devices.\n");
            }

            // Skip if we are already created
            if ((int)graphState >= (int)GraphState.Created)
            {
                return;
            }

            // Make a new filter graph
            graphBuilder = (IGraphBuilder)Activator.CreateInstance(Type.GetTypeFromCLSID(Clsid.FilterGraph, true));

            // Get the Capture Graph Builder
            Guid clsid = Clsid.CaptureGraphBuilder2;
            Guid riid  = typeof(ICaptureGraphBuilder2).GUID;

            captureGraphBuilder = (ICaptureGraphBuilder2)DsBugWO.CreateDsInstance(ref clsid, ref riid);

            // Link the CaptureGraphBuilder to the filter graph
            var hr = captureGraphBuilder.SetFiltergraph(graphBuilder);

            if (hr < 0)
            {
                Marshal.ThrowExceptionForHR(hr);
            }

            // Add the graph to the Running Object Table so it can be
            // viewed with GraphEdit
#if DEBUG
            DsROT.AddGraphToRot(graphBuilder, out rotCookie);
#endif
            // Get the video device and add it to the filter graph
            if (VideoDevice != null)
            {
                videoDeviceFilter = (IBaseFilter)Marshal.BindToMoniker(VideoDevice.MonikerString);
                hr = graphBuilder.AddFilter(videoDeviceFilter, "Video Capture Device");
                if (hr < 0)
                {
                    Marshal.ThrowExceptionForHR(hr);
                }
            }

            // Get the audio device and add it to the filter graph
            if (AudioDevice != null)
            {
                audioDeviceFilter = (IBaseFilter)Marshal.BindToMoniker(AudioDevice.MonikerString);
                hr = graphBuilder.AddFilter(audioDeviceFilter, "Audio Capture Device");
                if (hr < 0)
                {
                    Marshal.ThrowExceptionForHR(hr);
                }
            }

            // Get the video compressor and add it to the filter graph
            if (VideoCompressor != null)
            {
                videoCompressorFilter = (IBaseFilter)Marshal.BindToMoniker(VideoCompressor.MonikerString);
                hr = graphBuilder.AddFilter(videoCompressorFilter, "Video Compressor");
                if (hr < 0)
                {
                    Marshal.ThrowExceptionForHR(hr);
                }
            }

            // Get the audio compressor and add it to the filter graph
            if (AudioCompressor != null)
            {
                audioCompressorFilter = (IBaseFilter)Marshal.BindToMoniker(AudioCompressor.MonikerString);
                hr = graphBuilder.AddFilter(audioCompressorFilter, "Audio Compressor");
                if (hr < 0)
                {
                    Marshal.ThrowExceptionForHR(hr);
                }
            }

            // Retrieve the stream control interface for the video device
            // FindInterface will also add any required filters
            // (WDM devices in particular may need additional
            // upstream filters to function).

            // Try looking for an interleaved media type
            object o;
            var    cat = PinCategory.Capture;
            var    med = MediaType.Interleaved;
            Guid   iid = typeof(IAMStreamConfig).GUID;
            hr = captureGraphBuilder.FindInterface(
                ref cat, ref med, videoDeviceFilter, ref iid, out o);
            if (hr != 0)
            {
                // If not found, try looking for a video media type
                med = MediaType.Video;
                hr  = captureGraphBuilder.FindInterface(
                    ref cat, ref med, videoDeviceFilter, ref iid, out o);
                if (hr != 0)
                {
                    o = null;
                }
            }
            videoStreamConfig = o as IAMStreamConfig;

            cat = PinCategory.Preview;
            med = MediaType.Interleaved;
            iid = typeof(IAMStreamConfig).GUID;
            hr  = captureGraphBuilder.FindInterface(
                ref cat, ref med, videoDeviceFilter, ref iid, out o);

            if (hr != 0)
            {
                // If not found, try looking for a video media type
                med = MediaType.Video;
                hr  = captureGraphBuilder.FindInterface(
                    ref cat, ref med, videoDeviceFilter, ref iid, out o);
                if (hr != 0)
                {
                    o = null;
                }
            }
            previewStreamConfig = o as IAMStreamConfig;
            cat = PinCategory.Capture;
            med = MediaType.Audio;
            iid = typeof(IAMStreamConfig).GUID;
            if ((_audioViaPci) &&
                (audioDeviceFilter == null) && (videoDeviceFilter != null))
            {
                hr = captureGraphBuilder.FindInterface(ref cat, ref med, videoDeviceFilter, ref iid, out o);
            }
            else
            {
                hr = captureGraphBuilder.FindInterface(ref cat, ref med, audioDeviceFilter, ref iid, out o);
            }

            if (hr != 0)
            {
                o = null;
            }
            audioStreamConfig = o as IAMStreamConfig;

            // Retreive the media control interface (for starting/stopping graph)
            mediaControl = graphBuilder as IMediaControl;

            // Reload any video crossbars
            videoSources?.Dispose();
            videoSources = null;

            // Reload any audio crossbars
            audioSources?.Dispose();
            audioSources = null;

            // Reload any property pages exposed by filters
            //PropertyPages = null;

            // Reload capabilities of video device
            videoCaps   = null;
            previewCaps = null;

            // Reload capabilities of video device
            audioCaps = null;


            graphState = GraphState.Created;
        }