Infognition forum
May 18, 2012, 10:18:40 PM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: Last GraphEditPlus version: 1.4.0   Last Video Enhancer version: 1.9.7
 
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: Another Pin Connection Issue  (Read 569 times)
floydus
Newbie
*

Karma: +0/-0
Posts: 19


View Profile
« on: December 14, 2011, 10:43:49 PM »

I tried adding a Sleep after all filter created.  I tried creating filter by name... I tried different DirectShowLib versions, I tried RenderStream only...
No LUCK, getting out of resources, how come the graph works, but C# code fails ??

Here's the code generated for the graph.
I have version 1.4.
The error I get is Can't connect AverMedia 7231 Analog TV Tuner and AverMedia 7231 Analog TV Audio.
Code:
static void BuildGraph(IGraphBuilder pGraph)
        {
            int hr = 0;

            //graph builder
            ICaptureGraphBuilder2 pBuilder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
            hr = pBuilder.SetFiltergraph(pGraph);
            checkHR(hr, "Can't SetFiltergraph");

            Guid CLSID_AVerMedia7231AnalogTVTuner = new Guid("{266EEE40-6C63-11CF-8A03-00AA006ECB65}"); //kstvtune.ax
            Guid CLSID_AVerMedia7231AnalogTVAudio = new Guid("{71F96462-78F3-11D0-A18C-00A0C9118956}"); //ksxbar.ax
            Guid CLSID_AVerMedia7231AnalogXbar = new Guid("{71F96460-78F3-11D0-A18C-00A0C9118956}"); //ksxbar.ax
            Guid CLSID_AVerMedia7231AnalogCapture = new Guid("{17CCA71B-ECD7-11D0-B908-00A0C9223196}"); //ksproxy.ax
            Guid CLSID_VBICodec = new Guid("{370A1D5D-DDEB-418C-81CD-189E0D4FA443}"); //VBICodec.ax
            Guid CLSID_ffdshowVideoDecoder = new Guid("{04FE9017-F873-410E-871E-AB91661A4EF7}"); //ffdshow.ax

            //add AVerMedia 7231 Analog TV Tuner
            IBaseFilter pAVerMedia7231AnalogTVTuner = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_AVerMedia7231AnalogTVTuner));
            hr = pGraph.AddFilter(pAVerMedia7231AnalogTVTuner, "AVerMedia 7231 Analog TV Tuner");
            checkHR(hr, "Can't add AVerMedia 7231 Analog TV Tuner to graph");

            //add AVerMedia 7231 Analog TV Audio
            IBaseFilter pAVerMedia7231AnalogTVAudio = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_AVerMedia7231AnalogTVAudio));
            hr = pGraph.AddFilter(pAVerMedia7231AnalogTVAudio, "AVerMedia 7231 Analog TV Audio");
            checkHR(hr, "Can't add AVerMedia 7231 Analog TV Audio to graph");

            //connect AVerMedia 7231 Analog TV Tuner and AVerMedia 7231 Analog TV Audio
            hr = pBuilder.RenderStream(null, MediaType.AnalogAudio, pAVerMedia7231AnalogTVTuner, null, pAVerMedia7231AnalogTVAudio);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog TV Tuner and AVerMedia 7231 Analog TV Audio");

            //add AVerMedia 7231 Analog Xbar
            IBaseFilter pAVerMedia7231AnalogXbar = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_AVerMedia7231AnalogXbar));
            hr = pGraph.AddFilter(pAVerMedia7231AnalogXbar, "AVerMedia 7231 Analog Xbar");
            checkHR(hr, "Can't add AVerMedia 7231 Analog Xbar to graph");

            //connect AVerMedia 7231 Analog TV Tuner and AVerMedia 7231 Analog Xbar
            hr = pBuilder.RenderStream(null, MediaType.AnalogVideo, pAVerMedia7231AnalogTVTuner, null, pAVerMedia7231AnalogXbar);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog TV Tuner and AVerMedia 7231 Analog Xbar");

            //connect AVerMedia 7231 Analog TV Audio and AVerMedia 7231 Analog Xbar
            hr = pBuilder.RenderStream(null, MediaType.AnalogAudio, pAVerMedia7231AnalogTVAudio, null, pAVerMedia7231AnalogXbar);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog TV Audio and AVerMedia 7231 Analog Xbar");

            //add AVerMedia 7231 Analog Capture
            IBaseFilter pAVerMedia7231AnalogCapture = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_AVerMedia7231AnalogCapture));
            hr = pGraph.AddFilter(pAVerMedia7231AnalogCapture, "AVerMedia 7231 Analog Capture");
            checkHR(hr, "Can't add AVerMedia 7231 Analog Capture to graph");

            //connect AVerMedia 7231 Analog Xbar and AVerMedia 7231 Analog Capture
            hr = pBuilder.RenderStream(null, MediaType.AnalogVideo, pAVerMedia7231AnalogXbar, null, pAVerMedia7231AnalogCapture);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog Xbar and AVerMedia 7231 Analog Capture");

            //connect AVerMedia 7231 Analog Xbar and AVerMedia 7231 Analog Capture
            hr = pBuilder.RenderStream(null, MediaType.AnalogAudio, pAVerMedia7231AnalogXbar, null, pAVerMedia7231AnalogCapture);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog Xbar and AVerMedia 7231 Analog Capture");

            //add Default DirectSound Device
            IBaseFilter pDefaultDirectSoundDevice = (IBaseFilter) new DSoundRender();
            hr = pGraph.AddFilter(pDefaultDirectSoundDevice, "Default DirectSound Device");
            checkHR(hr, "Can't add Default DirectSound Device to graph");

            //add VBI Codec
            IBaseFilter pVBICodec = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_VBICodec));
            hr = pGraph.AddFilter(pVBICodec, "VBI Codec");
            checkHR(hr, "Can't add VBI Codec to graph");

            //add Smart Tee
            IBaseFilter pSmartTee = (IBaseFilter) new SmartTee();
            hr = pGraph.AddFilter(pSmartTee, "Smart Tee");
            checkHR(hr, "Can't add Smart Tee to graph");

            //connect AVerMedia 7231 Analog Capture and Smart Tee
            hr = pBuilder.RenderStream(null, MediaType.Video, pAVerMedia7231AnalogCapture, null, pSmartTee);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog Capture and Smart Tee");

            //connect AVerMedia 7231 Analog Capture and VBI Codec
            hr = pBuilder.RenderStream(null, MediaType.VBI, pAVerMedia7231AnalogCapture, null, pVBICodec);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog Capture and VBI Codec");

            //connect AVerMedia 7231 Analog Capture and Default DirectSound Device
            hr = pBuilder.RenderStream(null, MediaType.Audio, pAVerMedia7231AnalogCapture, null, pDefaultDirectSoundDevice);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog Capture and Default DirectSound Device");

            //add ffdshow Video Decoder
            IBaseFilter pffdshowVideoDecoder = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_ffdshowVideoDecoder));
            hr = pGraph.AddFilter(pffdshowVideoDecoder, "ffdshow Video Decoder");
            checkHR(hr, "Can't add ffdshow Video Decoder to graph");

            //add Line 21 Decoder
            IBaseFilter pLine21Decoder = (IBaseFilter) new Line21Decoder();
            hr = pGraph.AddFilter(pLine21Decoder, "Line 21 Decoder");
            checkHR(hr, "Can't add Line 21 Decoder to graph");

            //connect Smart Tee and ffdshow Video Decoder
            hr = pBuilder.RenderStream(null, MediaType.Video, pSmartTee, null, pffdshowVideoDecoder);
            checkHR(hr, "Can't connect Smart Tee and ffdshow Video Decoder");

            //connect VBI Codec and Line 21 Decoder
            hr = pBuilder.RenderStream(null, MediaType.AuxLine21Data, pVBICodec, null, pLine21Decoder);
            checkHR(hr, "Can't connect VBI Codec and Line 21 Decoder");

            //add Overlay Mixer
            IBaseFilter pOverlayMixer = (IBaseFilter) new OverlayMixer();
            hr = pGraph.AddFilter(pOverlayMixer, "Overlay Mixer");
            checkHR(hr, "Can't add Overlay Mixer to graph");

            //connect ffdshow Video Decoder and Overlay Mixer
            hr = pBuilder.RenderStream(null, MediaType.Video, pffdshowVideoDecoder, null, pOverlayMixer);
            checkHR(hr, "Can't connect ffdshow Video Decoder and Overlay Mixer");

            //connect Line 21 Decoder and Overlay Mixer
            hr = pBuilder.RenderStream(null, MediaType.Video, pLine21Decoder, null, pOverlayMixer);
            checkHR(hr, "Can't connect Line 21 Decoder and Overlay Mixer");

            //add Video Renderer
            IBaseFilter pVideoRenderer = (IBaseFilter) new VideoRenderer();
            hr = pGraph.AddFilter(pVideoRenderer, "Video Renderer");
            checkHR(hr, "Can't add Video Renderer to graph");

            //connect Overlay Mixer and Video Renderer
            hr = pBuilder.RenderStream(null, MediaType.Video, pOverlayMixer, null, pVideoRenderer);
            checkHR(hr, "Can't connect Overlay Mixer and Video Renderer");

        }

For the sake of you been able to help me I have also included the 'Pin' version generated Code as well).

Code:
static void BuildGraph(IGraphBuilder pGraph)
        {
            int hr = 0;

            //graph builder
            ICaptureGraphBuilder2 pBuilder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
            hr = pBuilder.SetFiltergraph(pGraph);
            checkHR(hr, "Can't SetFiltergraph");

            Guid CLSID_AVerMedia7231AnalogTVTuner = new Guid("{266EEE40-6C63-11CF-8A03-00AA006ECB65}"); //kstvtune.ax
            Guid CLSID_AVerMedia7231AnalogTVAudio = new Guid("{71F96462-78F3-11D0-A18C-00A0C9118956}"); //ksxbar.ax
            Guid CLSID_AVerMedia7231AnalogXbar = new Guid("{71F96460-78F3-11D0-A18C-00A0C9118956}"); //ksxbar.ax
            Guid CLSID_AVerMedia7231AnalogCapture = new Guid("{17CCA71B-ECD7-11D0-B908-00A0C9223196}"); //ksproxy.ax
            Guid CLSID_VBICodec = new Guid("{370A1D5D-DDEB-418C-81CD-189E0D4FA443}"); //VBICodec.ax
            Guid CLSID_ffdshowVideoDecoder = new Guid("{04FE9017-F873-410E-871E-AB91661A4EF7}"); //ffdshow.ax

            //add AVerMedia 7231 Analog TV Tuner
            IBaseFilter pAVerMedia7231AnalogTVTuner = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_AVerMedia7231AnalogTVTuner));
            hr = pGraph.AddFilter(pAVerMedia7231AnalogTVTuner, "AVerMedia 7231 Analog TV Tuner");
            checkHR(hr, "Can't add AVerMedia 7231 Analog TV Tuner to graph");

            //add AVerMedia 7231 Analog TV Audio
            IBaseFilter pAVerMedia7231AnalogTVAudio = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_AVerMedia7231AnalogTVAudio));
            hr = pGraph.AddFilter(pAVerMedia7231AnalogTVAudio, "AVerMedia 7231 Analog TV Audio");
            checkHR(hr, "Can't add AVerMedia 7231 Analog TV Audio to graph");

            //connect AVerMedia 7231 Analog TV Tuner and AVerMedia 7231 Analog TV Audio
            hr = pGraph.ConnectDirect(GetPin(pAVerMedia7231AnalogTVTuner, "Analog Audio"), GetPin(pAVerMedia7231AnalogTVAudio, "TVAudio In"), null);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog TV Tuner and AVerMedia 7231 Analog TV Audio");

            //add AVerMedia 7231 Analog Xbar
            IBaseFilter pAVerMedia7231AnalogXbar = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_AVerMedia7231AnalogXbar));
            hr = pGraph.AddFilter(pAVerMedia7231AnalogXbar, "AVerMedia 7231 Analog Xbar");
            checkHR(hr, "Can't add AVerMedia 7231 Analog Xbar to graph");

            //connect AVerMedia 7231 Analog TV Tuner and AVerMedia 7231 Analog Xbar
            hr = pGraph.ConnectDirect(GetPin(pAVerMedia7231AnalogTVTuner, "Analog Video"), GetPin(pAVerMedia7231AnalogXbar, "0: Video Tuner In"), null);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog TV Tuner and AVerMedia 7231 Analog Xbar");

            //connect AVerMedia 7231 Analog TV Audio and AVerMedia 7231 Analog Xbar
            hr = pGraph.ConnectDirect(GetPin(pAVerMedia7231AnalogTVAudio, "TVAudio Out"), GetPin(pAVerMedia7231AnalogXbar, "1: Audio Tuner In"), null);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog TV Audio and AVerMedia 7231 Analog Xbar");

            //add AVerMedia 7231 Analog Capture
            IBaseFilter pAVerMedia7231AnalogCapture = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_AVerMedia7231AnalogCapture));
            hr = pGraph.AddFilter(pAVerMedia7231AnalogCapture, "AVerMedia 7231 Analog Capture");
            checkHR(hr, "Can't add AVerMedia 7231 Analog Capture to graph");

            //connect AVerMedia 7231 Analog Xbar and AVerMedia 7231 Analog Capture
            hr = pGraph.ConnectDirect(GetPin(pAVerMedia7231AnalogXbar, "0: Video Decoder Out"), GetPin(pAVerMedia7231AnalogCapture, "Analog Video In"), null);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog Xbar and AVerMedia 7231 Analog Capture");

            //connect AVerMedia 7231 Analog Xbar and AVerMedia 7231 Analog Capture
            hr = pGraph.ConnectDirect(GetPin(pAVerMedia7231AnalogXbar, "1: Audio Decoder Out"), GetPin(pAVerMedia7231AnalogCapture, "Analog Audio Input"), null);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog Xbar and AVerMedia 7231 Analog Capture");

            //add Default DirectSound Device
            IBaseFilter pDefaultDirectSoundDevice = (IBaseFilter) new DSoundRender();
            hr = pGraph.AddFilter(pDefaultDirectSoundDevice, "Default DirectSound Device");
            checkHR(hr, "Can't add Default DirectSound Device to graph");

            //add VBI Codec
            IBaseFilter pVBICodec = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_VBICodec));
            hr = pGraph.AddFilter(pVBICodec, "VBI Codec");
            checkHR(hr, "Can't add VBI Codec to graph");

            //add Smart Tee
            IBaseFilter pSmartTee = (IBaseFilter) new SmartTee();
            hr = pGraph.AddFilter(pSmartTee, "Smart Tee");
            checkHR(hr, "Can't add Smart Tee to graph");

            //connect AVerMedia 7231 Analog Capture and Smart Tee
            hr = pGraph.ConnectDirect(GetPin(pAVerMedia7231AnalogCapture, "Capture"), GetPin(pSmartTee, "Input"), null);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog Capture and Smart Tee");

            //connect AVerMedia 7231 Analog Capture and VBI Codec
            hr = pGraph.ConnectDirect(GetPin(pAVerMedia7231AnalogCapture, "VBI"), GetPin(pVBICodec, "Input"), null);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog Capture and VBI Codec");

            //connect AVerMedia 7231 Analog Capture and Default DirectSound Device
            hr = pGraph.ConnectDirect(GetPin(pAVerMedia7231AnalogCapture, "Audio"), GetPin(pDefaultDirectSoundDevice, "Audio Input pin (rendered)"), null);
            checkHR(hr, "Can't connect AVerMedia 7231 Analog Capture and Default DirectSound Device");

            //add ffdshow Video Decoder
            IBaseFilter pffdshowVideoDecoder = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_ffdshowVideoDecoder));
            hr = pGraph.AddFilter(pffdshowVideoDecoder, "ffdshow Video Decoder");
            checkHR(hr, "Can't add ffdshow Video Decoder to graph");

            //add Line 21 Decoder
            IBaseFilter pLine21Decoder = (IBaseFilter) new Line21Decoder();
            hr = pGraph.AddFilter(pLine21Decoder, "Line 21 Decoder");
            checkHR(hr, "Can't add Line 21 Decoder to graph");

            //connect Smart Tee and ffdshow Video Decoder
            hr = pGraph.ConnectDirect(GetPin(pSmartTee, "Capture"), GetPin(pffdshowVideoDecoder, "In"), null);
            checkHR(hr, "Can't connect Smart Tee and ffdshow Video Decoder");

            //connect VBI Codec and Line 21 Decoder
            hr = pGraph.ConnectDirect(GetPin(pVBICodec, "CC"), GetPin(pLine21Decoder, "XForm In"), null);
            checkHR(hr, "Can't connect VBI Codec and Line 21 Decoder");

            //add Overlay Mixer
            IBaseFilter pOverlayMixer = (IBaseFilter) new OverlayMixer();
            hr = pGraph.AddFilter(pOverlayMixer, "Overlay Mixer");
            checkHR(hr, "Can't add Overlay Mixer to graph");

            //connect ffdshow Video Decoder and Overlay Mixer
            hr = pGraph.ConnectDirect(GetPin(pffdshowVideoDecoder, "Out"), GetPin(pOverlayMixer, "Input0"), null);
            checkHR(hr, "Can't connect ffdshow Video Decoder and Overlay Mixer");

            //connect Line 21 Decoder and Overlay Mixer
            hr = pGraph.ConnectDirect(GetPin(pLine21Decoder, "XForm Out"), GetPin(pOverlayMixer, "Input2"), null);
            checkHR(hr, "Can't connect Line 21 Decoder and Overlay Mixer");

            //add Video Renderer
            IBaseFilter pVideoRenderer = (IBaseFilter) new VideoRenderer();
            hr = pGraph.AddFilter(pVideoRenderer, "Video Renderer");
            checkHR(hr, "Can't add Video Renderer to graph");

            //connect Overlay Mixer and Video Renderer
            hr = pGraph.ConnectDirect(GetPin(pOverlayMixer, "Output"), GetPin(pVideoRenderer, "Input"), null);
            checkHR(hr, "Can't connect Overlay Mixer and Video Renderer");

        }_

The above code crashes on the following line :
hr = pGraph.ConnectDirect(GetPin(pAVerMedia7231AnalogTVTuner, "Analog Audio"), GetPin(pAVerMedia7231AnalogTVAudio, "TVAudio In"),
Can't enumerate pins on 'Analog Audio', and the graph works when I run it... Please help Smiley

Thanks.

Logged
Dee Mon
Administrator
Hero Member
*****

Karma: +8/-0
Posts: 530



View Profile WWW
« Reply #1 on: December 15, 2011, 09:02:50 AM »

Those tuner filters should be created differently, code generator in GraphEditPlus doesn't know this yet.

You should enumerate filters in the category where those filters are listed and insert them via BindToObject. See
http://msdn.microsoft.com/en-us/library/windows/desktop/dd407292%28v=VS.85%29.aspx
Logged
floydus
Newbie
*

Karma: +0/-0
Posts: 19


View Profile
« Reply #2 on: December 16, 2011, 11:43:08 PM »

I got it working by declaring the filter using the 'Display Name' showed in the filter properties .
My concern is I'm not sure this will be the same on every machine I'm installing the software on...
I might need to include these string into a config file.
Code:
IBaseFilter pAVerMedia7231AnalogTVTuner = CreateFilter(@"@device:pnp:\\?\pci#ven_1131&dev_7231&subsys_06071461&rev_aa#4&25ba7335&0&00e1#{a799a800-a46d-11d0-a18c-00a02401dcd4}\{62b08a3e-335e-4b30-90f9-2ba400000000}");
            System.Threading.Thread.Sleep(100);
            hr = graphBuilder.AddFilter(pAVerMedia7231AnalogTVTuner, "AVerMedia 7231 Analog TV Tuner");
            checkHR(hr, "Can't add AVerMedia 7231 Analog TV Tuner to graph");

Example above.
Thanks.
Logged
Dee Mon
Administrator
Hero Member
*****

Karma: +8/-0
Posts: 530



View Profile WWW
« Reply #3 on: December 17, 2011, 11:47:26 AM »

Here's the code GEP generates to create filters by name:
http://forum.infognition.com/index.php/topic,798.msg1901.html#msg1901

It should be more reliable than using DisplayName.
Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.13 | SMF © 2006-2011, Simple Machines LLC Valid XHTML 1.0! Valid CSS!