private bool BeforeTune(IChannel channel, ref int subChannelId) { DVBCChannel dvbcChannel = channel as DVBCChannel; if (dvbcChannel == null) { Log.Log.WriteFile("dvbc:Channel is not a DVBC channel!!! {0}", channel.GetType().ToString()); return(false); } /*if (CurrentChannel != null) * { * //@FIX this fails for back-2-back recordings * //if (oldChannel.Equals(channel)) return _mapSubChannels[0]; * }*/ if (_graphState == GraphState.Idle) { BuildGraph(); if (_mapSubChannels.ContainsKey(subChannelId) == false) { subChannelId = GetNewSubChannel(channel); } } if (useInternalNetworkProvider) { return(true); } if (_previousChannel == null || _previousChannel.IsDifferentTransponder(dvbcChannel)) { //_pmtPid = -1; ILocator locator; _tuningSpace.get_DefaultLocator(out locator); IDVBCLocator dvbcLocator = (IDVBCLocator)locator; dvbcLocator.put_InnerFEC(FECMethod.MethodNotSet); dvbcLocator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); dvbcLocator.put_OuterFEC(FECMethod.MethodNotSet); dvbcLocator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); dvbcLocator.put_Modulation(dvbcChannel.ModulationType); dvbcLocator.put_SymbolRate(dvbcChannel.SymbolRate); IDVBTuneRequest tuneRequest = (IDVBTuneRequest)_tuneRequest; tuneRequest.put_ONID(dvbcChannel.NetworkId); tuneRequest.put_SID(dvbcChannel.ServiceId); tuneRequest.put_TSID(dvbcChannel.TransportId); locator.put_CarrierFrequency((int)dvbcChannel.Frequency); _tuneRequest.put_Locator(locator); _tuneRequest = tuneRequest; } return(true); }
/// <summary> /// Creates the tuning space. /// </summary> protected void CreateTuningSpace() { Log.Log.WriteFile("dvbc:CreateTuningSpace()"); ITuner tuner = (ITuner)_filterNetworkProvider; SystemTuningSpaces systemTuningSpaces = new SystemTuningSpaces(); ITuningSpaceContainer container = systemTuningSpaces as ITuningSpaceContainer; if (container == null) { Log.Log.Error("CreateTuningSpace() Failed to get ITuningSpaceContainer"); return; } IEnumTuningSpaces enumTuning; ITuningSpace[] spaces = new ITuningSpace[2]; ITuneRequest request; container.get_EnumTuningSpaces(out enumTuning); if (enumTuning != null) { while (true) { int fetched; if (enumTuning.Next(1, spaces, out fetched) != 0) { break; } if (fetched != 1) { break; } if (spaces[0] == null) { break; } string name; spaces[0].get_UniqueName(out name); if (name != null) { if (name == "MediaPortal DVBC TuningSpace") { Log.Log.WriteFile("dvbc:Found correct tuningspace {0}", name); _tuningSpace = (IDVBTuningSpace)spaces[0]; tuner.put_TuningSpace(_tuningSpace); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IDVBTuneRequest)request; return; } } Release.ComObject("ITuningSpace", spaces[0]); } Release.ComObject("IEnumTuningSpaces", enumTuning); } Log.Log.WriteFile("dvbc:Create new tuningspace"); _tuningSpace = (IDVBTuningSpace) new DVBTuningSpace(); IDVBTuningSpace tuningSpace = (IDVBTuningSpace)_tuningSpace; tuningSpace.put_UniqueName("MediaPortal DVBC TuningSpace"); tuningSpace.put_FriendlyName("MediaPortal DVBC TuningSpace"); tuningSpace.put__NetworkType(typeof(DVBCNetworkProvider).GUID); tuningSpace.put_SystemType(DVBSystemType.Cable); IDVBCLocator locator = (IDVBCLocator) new DVBCLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); object newIndex; _tuningSpace.put_DefaultLocator(locator); container.Add(_tuningSpace, out newIndex); tuner.put_TuningSpace(_tuningSpace); Release.ComObject("TuningSpaceContainer", container); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IDVBTuneRequest)request; }