Does anyone have experience on how to use the ITunderCap interface? I'm trying to identify the BDA tuning capabilities of the tuner filter in a graph.
DMAN
Sorted it
Here is a BDA sample for others to use in the future:
void DetectCards() { ITunerCap _providerType; //BDA TV devices devices = DsDevice.GetDevicesOfCat(FilterCategory.BDASourceFiltersCategory); if (devices.Length > 0) { IFilterGraph2 graphBuilder = (IFilterGraph2)new FilterGraph(); DsROTEntry rotEntry = new DsROTEntry(graphBuilder); //MS Network Provider - MCE 2005 Roll-up 2 or better networkProviderClsId = typeof(NetworkProvider).GUID; for (int i = 0; i < devices.Length; i++) { string name = devices[i].Name ?? "unknown"; name = name.ToLowerInvariant(); Log.Log.WriteFile("Found card:{0}", name); IBaseFilter tmp; graphBuilder.AddSourceFilterForMoniker(devices[i].Mon, null, name, out tmp); IBaseFilter networkDVB = FilterGraphTools.AddFilterFromClsid(graphBuilder, networkProviderClsId, "Microsoft Network Provider"); if (ConnectFilter(graphBuilder, networkDVB, tmp)) { Log.Log.WriteFile("Detected DVB card:{0}", name); // determine the DVB card supported GUIDs here! _providerType = networkDVB as ITunerCap; int ulcNetworkTypesMax = 1; int pulcNetworkTypes; Guid[] lpDeinterlaceModes = new Guid[ulcNetworkTypesMax]; int hr = _providerType.get_SupportedNetworkTypes(ulcNetworkTypesMax, out pulcNetworkTypes, lpDeinterlaceModes); Log.Log.Debug("Number of SupportedNetworkTypes = {0}", pulcNetworkTypes); for (int n = 0; n < pulcNetworkTypes; n++) { Log.Log.Debug("SupportedNetworkTypes = {0}", lpDeinterlaceModes[n]); } //test the first found guid to determine the DVB card type if (lpDeinterlaceModes[0] == (typeof(DVBTNetworkProvider).GUID)) { Log.Log.WriteFile("Detected DVB-T* card:{0}", name); TvCardDVBT dvbtCard = new TvCardDVBT(_epgEvents, devices[i]); _cards.Add(dvbtCard); } else if (lpDeinterlaceModes[0] == (typeof(DVBSNetworkProvider).GUID)) { Log.Log.WriteFile("Detected DVB-S* card:{0}", name); TvCardDVBS dvbsCard = new TvCardDVBS(_epgEvents, devices[i]); _cards.Add(dvbsCard); } else if (lpDeinterlaceModes[0] == (typeof(DVBCNetworkProvider).GUID)) { Log.Log.WriteFile("Detected DVB-C* card:{0}", name); TvCardDVBC dvbcCard = new TvCardDVBC(_epgEvents, devices[i]); _cards.Add(dvbcCard); } else if (lpDeinterlaceModes[0] == (typeof(ATSCNetworkProvider).GUID)) { Log.Log.WriteFile("Detected ATSC* card:{0}", name); TvCardATSC dvbsCard = new TvCardATSC(_epgEvents, devices[i]); _cards.Add(dvbsCard); } graphBuilder.RemoveFilter(tmp); Release.ComObject("tmp filter", tmp); } Log.Log.WriteFile("Not connected with generic MS Network Provider, using the original method"); graphBuilder.RemoveFilter(networkDVB); Release.ComObject("ms provider", networkDVB); } FilterGraphTools.RemoveAllFilters(graphBuilder); rotEntry.Dispose(); Release.ComObject("graph builder", graphBuilder); } }
Log in to post a comment.
Does anyone have experience on how to use the ITunderCap interface?
I'm trying to identify the BDA tuning capabilities of the tuner filter in a graph.
DMAN
Sorted it
Here is a BDA sample for others to use in the future: