caseyd
Newbie
Karma: +0/-0
Posts: 9
|
 |
« Reply #2 on: December 16, 2011, 04:45:43 PM » |
|
Sorry - you're right - here's the generated code I am using... does this help?
//Don't forget to add reference to DirectShowLib in your project. using System; using System.Collections.Generic; using System.Runtime.InteropServices.ComTypes; using System.Runtime.InteropServices; using DirectShowLib;
namespace graphcode { class Program { static void checkHR(int hr, string msg) { if (hr < 0) { Console.WriteLine(msg); DsError.ThrowExceptionForHR(hr); } }
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_713xBDAAnalogTVTuner = new Guid("{266EEE40-6C63-11CF-8A03-00AA006ECB65}"); //kstvtune.ax Guid CLSID_713xBDAAnalogTVAudio = new Guid("{71F96462-78F3-11D0-A18C-00A0C9118956}"); //ksxbar.ax Guid CLSID_713xBDAAnalogXbar = new Guid("{71F96460-78F3-11D0-A18C-00A0C9118956}"); //ksxbar.ax Guid CLSID_713xBDAAnalogCapture = new Guid("{17CCA71B-ECD7-11D0-B908-00A0C9223196}"); //ksproxy.ax Guid CLSID_ArcSoftDeinterlace = new Guid("{6F07F8ED-C91F-4C9F-931F-37D108545CDB}"); //deinterlace.ax Guid CLSID_VCamRendererC = new Guid("{D7DE5DAC-B140-441A-87C1-568DFD91706E}"); //VCamFilters.ax
//add 713x BDA Analog TV Tuner IBaseFilter p713xBDAAnalogTVTuner = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_713xBDAAnalogTVTuner)); hr = pGraph.AddFilter(p713xBDAAnalogTVTuner, "713x BDA Analog TV Tuner"); checkHR(hr, "Can't add 713x BDA Analog TV Tuner to graph");
//add 713x BDA Analog TV Audio IBaseFilter p713xBDAAnalogTVAudio = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_713xBDAAnalogTVAudio)); hr = pGraph.AddFilter(p713xBDAAnalogTVAudio, "713x BDA Analog TV Audio"); checkHR(hr, "Can't add 713x BDA Analog TV Audio to graph");
//connect 713x BDA Analog TV Tuner and 713x BDA Analog TV Audio hr = pGraph.ConnectDirect(GetPin(p713xBDAAnalogTVTuner, "Analog Audio"), GetPin(p713xBDAAnalogTVAudio, "TVAudio In"), null); checkHR(hr, "Can't connect 713x BDA Analog TV Tuner and 713x BDA Analog TV Audio");
//add 713x BDA Analog Xbar IBaseFilter p713xBDAAnalogXbar = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_713xBDAAnalogXbar)); hr = pGraph.AddFilter(p713xBDAAnalogXbar, "713x BDA Analog Xbar"); checkHR(hr, "Can't add 713x BDA Analog Xbar to graph");
//connect 713x BDA Analog TV Audio and 713x BDA Analog Xbar hr = pGraph.ConnectDirect(GetPin(p713xBDAAnalogTVAudio, "TVAudio Out"), GetPin(p713xBDAAnalogXbar, "3: Audio Tuner In"), null); checkHR(hr, "Can't connect 713x BDA Analog TV Audio and 713x BDA Analog Xbar");
//add 713x BDA Analog Capture IBaseFilter p713xBDAAnalogCapture = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_713xBDAAnalogCapture)); hr = pGraph.AddFilter(p713xBDAAnalogCapture, "713x BDA Analog Capture"); checkHR(hr, "Can't add 713x BDA Analog Capture to graph");
//connect 713x BDA Analog Xbar and 713x BDA Analog Capture hr = pGraph.ConnectDirect(GetPin(p713xBDAAnalogXbar, "0: Video Decoder Out"), GetPin(p713xBDAAnalogCapture, "Analog Video In"), null); checkHR(hr, "Can't connect 713x BDA Analog Xbar and 713x BDA Analog Capture");
//connect 713x BDA Analog Xbar and 713x BDA Analog Capture hr = pGraph.ConnectDirect(GetPin(p713xBDAAnalogXbar, "1: Audio Decoder Out"), GetPin(p713xBDAAnalogCapture, "Analog Audioinput"), null); checkHR(hr, "Can't connect 713x BDA Analog Xbar and 713x BDA 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 ArcSoft Deinterlace IBaseFilter pArcSoftDeinterlace = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_ArcSoftDeinterlace)); hr = pGraph.AddFilter(pArcSoftDeinterlace, "ArcSoft Deinterlace"); checkHR(hr, "Can't add ArcSoft Deinterlace to graph");
//connect 713x BDA Analog Capture and ArcSoft Deinterlace hr = pGraph.ConnectDirect(GetPin(p713xBDAAnalogCapture, "Capture"), GetPin(pArcSoftDeinterlace, "XForm In"), null); checkHR(hr, "Can't connect 713x BDA Analog Capture and ArcSoft Deinterlace");
//connect 713x BDA Analog Capture and Default DirectSound Device hr = pGraph.ConnectDirect(GetPin(p713xBDAAnalogCapture, "Audio"), GetPin(pDefaultDirectSoundDevice, "Audio Input pin (rendered)"), null); checkHR(hr, "Can't connect 713x BDA Analog Capture and Default DirectSound Device");
//add VCam Renderer (C) IBaseFilter pVCamRendererC = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_VCamRendererC)); hr = pGraph.AddFilter(pVCamRendererC, "VCam Renderer (C)"); checkHR(hr, "Can't add VCam Renderer (C) to graph");
//connect ArcSoft Deinterlace and VCam Renderer (C) hr = pGraph.ConnectDirect(GetPin(pArcSoftDeinterlace, "XForm Out"), GetPin(pVCamRendererC, "In"), null); checkHR(hr, "Can't connect ArcSoft Deinterlace and VCam Renderer (C)");
}
static void Main(string[] args) { try { IGraphBuilder graph = (IGraphBuilder)new FilterGraph(); Console.WriteLine("Building graph..."); BuildGraph(graph); Console.WriteLine("Running..."); IMediaControl mediaControl = (IMediaControl)graph; IMediaEvent mediaEvent = (IMediaEvent)graph; int hr = mediaControl.Run(); checkHR(hr, "Can't run the graph"); bool stop = false; while (!stop) { System.Threading.Thread.Sleep(500); Console.Write("."); EventCode ev; IntPtr p1, p2; System.Windows.Forms.Application.DoEvents(); while (mediaEvent.GetEvent(out ev, out p1, out p2, 0) == 0) { if (ev == EventCode.Complete || ev == EventCode.UserAbort) { Console.WriteLine("Done!"); stop = true; } else if (ev == EventCode.ErrorAbort) { Console.WriteLine("An error occured: HRESULT={0:X}", p1); mediaControl.Stop(); stop = true; } mediaEvent.FreeEventParams(ev, p1, p2); } } } catch (COMException ex) { Console.WriteLine("COM error: " + ex.ToString()); } catch (Exception ex) { Console.WriteLine("Error: " + ex.ToString()); } } static IPin GetPin(IBaseFilter filter, string pinname) { IEnumPins epins; int hr = filter.EnumPins(out epins); checkHR(hr, "Can't enumerate pins"); IntPtr fetched = Marshal.AllocCoTaskMem(4); IPin[] pins = new IPin[1]; while (epins.Next(1, pins, fetched) == 0) { PinInfo pinfo; pins[0].QueryPinInfo(out pinfo); bool found = (pinfo.name == pinname); DsUtils.FreePinInfo(pinfo); if (found) return pins[0]; } checkHR(-1, "Pin not found"); return null; }
} }
|