예제 #1
0
        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);
        }
예제 #2
0
        /// <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;
        }