Exemple #1
0
        private void GetTunerCapabilities()
        {
            Log.Log.WriteFile("ss2: GetTunerCapabilities");
            _graphBuilder = (IFilterGraph2) new FilterGraph();
            _rotEntry     = new DsROTEntry(_graphBuilder);
            _capBuilder   = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();
            _capBuilder.SetFiltergraph(_graphBuilder);
            //=========================================================================================================
            // add the skystar 2 specific filters
            //=========================================================================================================
            Log.Log.WriteFile("ss2:GetTunerCapabilities() create B2C2 adapter");
            _filterB2C2Adapter =
                (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(DVBSkyStar2Helper.CLSID_B2C2Adapter, false));
            if (_filterB2C2Adapter == null)
            {
                Log.Log.Error("ss2:GetTunerCapabilities() _filterB2C2Adapter not found");
                return;
            }
            _interfaceB2C2TunerCtrl = _filterB2C2Adapter as DVBSkyStar2Helper.IB2C2MPEG2TunerCtrl2;
            if (_interfaceB2C2TunerCtrl == null)
            {
                Log.Log.Error("ss2: cannot get IB2C2MPEG2TunerCtrl3");
                return;
            }
            //=========================================================================================================
            // initialize skystar 2 tuner
            //=========================================================================================================

            /* Not necessary for query-only application
             *
             * Log.Log.WriteFile("ss2: Initialize Tuner()");
             * hr = _interfaceB2C2TunerCtrl.Initialize();
             * if (hr != 0)
             * {
             * Log.Log.Error("ss2: Tuner initialize failed:0x{0:X}", hr);
             * //return;
             * }*/
            //=========================================================================================================
            // Get tuner type (DVBS, DVBC, DVBT, ATSC)
            //=========================================================================================================
            int    lTunerCapSize = Marshal.SizeOf(typeof(tTunerCapabilities));
            IntPtr ptCaps        = Marshal.AllocHGlobal(lTunerCapSize);
            int    hr            = _interfaceB2C2TunerCtrl.GetTunerCapabilities(ptCaps, ref lTunerCapSize);

            if (hr != 0)
            {
                Log.Log.Error("ss2: Tuner Type failed:0x{0:X}", hr);
                return;
            }
            tTunerCapabilities tc = (tTunerCapabilities)Marshal.PtrToStructure(ptCaps, typeof(tTunerCapabilities));

            switch (tc.eModulation)
            {
            case TunerType.ttSat:
                Log.Log.WriteFile("ss2: Card type = DVBS");
                _cardType = CardType.DvbS;
                break;

            case TunerType.ttCable:
                Log.Log.WriteFile("ss2: Card type = DVBC");
                _cardType = CardType.DvbC;
                break;

            case TunerType.ttTerrestrial:
                Log.Log.WriteFile("ss2: Card type = DVBT");
                _cardType = CardType.DvbT;
                break;

            case TunerType.ttATSC:
                Log.Log.WriteFile("ss2: Card type = ATSC");
                _cardType = CardType.Atsc;
                break;

            case TunerType.ttUnknown:
                Log.Log.WriteFile("ss2: Card type = unknown?");
                _cardType = CardType.DvbS;
                break;
            }
            Marshal.FreeHGlobal(ptCaps);
            // Release all used object
            if (_filterB2C2Adapter != null)
            {
                Release.ComObject("tuner filter", _filterB2C2Adapter);
                _filterB2C2Adapter = null;
            }
            _rotEntry.Dispose();
            if (_capBuilder != null)
            {
                Release.ComObject("capture builder", _capBuilder);
                _capBuilder = null;
            }
            if (_graphBuilder != null)
            {
                Release.ComObject("graph builder", _graphBuilder);
                _graphBuilder = null;
            }
        }
        private void GetTunerCapabilities()
        {
            Log.Log.WriteFile("b2c2: GetTunerCapabilities");
            _graphBuilder = (IFilterGraph2) new FilterGraph();
            _rotEntry     = new DsROTEntry(_graphBuilder);
            _capBuilder   = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();
            _capBuilder.SetFiltergraph(_graphBuilder);
            //=========================================================================================================
            // add the B2C2 specific filters
            //=========================================================================================================
            Log.Log.WriteFile("b2c2:GetTunerCapabilities() create B2C2 adapter");
            _filterB2C2Adapter =
                Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_B2C2Adapter, false)) as IBaseFilter;
            if (_filterB2C2Adapter == null)
            {
                Log.Log.Error("b2c2:GetTunerCapabilities() _filterB2C2Adapter not found");
                return;
            }
            _interfaceB2C2TunerCtrl = _filterB2C2Adapter as IB2C2MPEG2TunerCtrl4;
            if (_interfaceB2C2TunerCtrl == null)
            {
                Log.Log.Error("b2c2: cannot get IB2C2MPEG2TunerCtrl4");
                return;
            }

            _interfaceB2C2DataCtrl = _filterB2C2Adapter as IB2C2MPEG2DataCtrl6;
            if (_interfaceB2C2DataCtrl == null)
            {
                Log.Log.Error("b2c2: cannot get IB2C2MPEG2DataCtrl6");
                return;
            }

            int hr = _interfaceB2C2DataCtrl.SelectDevice(_deviceInfo.DeviceId);

            if (hr != 0)
            {
                Log.Log.Error("b2c2: select device failed: {0:X}", hr);
            }

            //=========================================================================================================
            // Get tuner type (DVBS, DVBC, DVBT, ATSC)
            //=========================================================================================================
            int    lTunerCapSize = Marshal.SizeOf(typeof(tTunerCapabilities));
            IntPtr ptCaps        = Marshal.AllocHGlobal(lTunerCapSize);

            hr = _interfaceB2C2TunerCtrl.GetTunerCapabilities(ptCaps, ref lTunerCapSize);
            if (hr != 0)
            {
                Log.Log.Error("b2c2: Tuner Type failed:0x{0:X}", hr);
                return;
            }
            tTunerCapabilities tc = (tTunerCapabilities)Marshal.PtrToStructure(ptCaps, typeof(tTunerCapabilities));

            switch (tc.eModulation)
            {
            case TunerType.ttSat:
                Log.Log.WriteFile("b2c2: Card type = DVBS");
                _cardType = CardType.DvbS;
                break;

            case TunerType.ttCable:
                Log.Log.WriteFile("b2c2: Card type = DVBC");
                _cardType = CardType.DvbC;
                break;

            case TunerType.ttTerrestrial:
                Log.Log.WriteFile("b2c2: Card type = DVBT");
                _cardType = CardType.DvbT;
                break;

            case TunerType.ttATSC:
                Log.Log.WriteFile("b2c2: Card type = ATSC");
                _cardType = CardType.Atsc;
                break;

            case TunerType.ttUnknown:
                Log.Log.WriteFile("b2c2: Card type = unknown?");
                _cardType = CardType.Unknown;
                break;
            }
            Marshal.FreeHGlobal(ptCaps);
            // Release all used object
            if (_filterB2C2Adapter != null)
            {
                Release.ComObject("tuner filter", _filterB2C2Adapter);
                _filterB2C2Adapter = null;
            }
            _rotEntry.Dispose();
            if (_capBuilder != null)
            {
                Release.ComObject("capture builder", _capBuilder);
                _capBuilder = null;
            }
            if (_graphBuilder != null)
            {
                Release.ComObject("graph builder", _graphBuilder);
                _graphBuilder = null;
            }
        }