//==========================================================================; // MSVidTVTuner.h : Declaration of the CMSVidTVTuner // copyright (c) Microsoft Corp. 1998-1999. ///////////////////////////////////////////////////////////////////////////// #pragma once #ifndef __MSVidTVTUNER_H_ #define __MSVidTVTUNER_H_ #include #include #include #include #include #include "segimpl.h" #include "analogtunerimpl.h" #include "analogtvcp.h" #include "seg.h" const int DEFAULT_OVERSCAN_PCT = 100; // 1% ///////////////////////////////////////////////////////////////////////////// // CMSVidTVTuner class ATL_NO_VTABLE __declspec(uuid("1C15D484-911D-11d2-B632-00C04F79498E")) CMSVidTVTuner : public CComObjectRootEx, public CComCoClass, public IObjectWithSiteImplSec, public ISupportErrorInfo, public IConnectionPointContainerImpl, public CProxy_IMSVidAnalogTuner, public IBroadcastEventImpl, public IMSVidGraphSegmentImpl, public IMSVidAnalogTunerImpl, public IProvideClassInfo2Impl<&CLSID_MSVidAnalogTunerDevice, &IID_IMSVidAnalogTunerEvent, &LIBID_MSVidCtlLib> { public: CMSVidTVTuner() : m_iTuner(-1), m_iCapture(-1), m_bRouted(false) { } virtual ~CMSVidTVTuner() {} REGISTER_AUTOMATION_OBJECT(IDS_PROJNAME, IDS_REG_TVTUNER_PROGID, IDS_REG_TVTUNER_DESC, LIBID_MSVidCtlLib, __uuidof(CMSVidTVTuner)); DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CMSVidTVTuner) COM_INTERFACE_ENTRY(IMSVidGraphSegment) COM_INTERFACE_ENTRY(IMSVidAnalogTuner) COM_INTERFACE_ENTRY(IMSVidTuner) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IObjectWithSite) COM_INTERFACE_ENTRY(IMSVidDevice) COM_INTERFACE_ENTRY(IMSVidInputDevice) COM_INTERFACE_ENTRY(IMSVidVideoInputDevice) COM_INTERFACE_ENTRY(IBroadcastEvent) COM_INTERFACE_ENTRY(ISupportErrorInfo) COM_INTERFACE_ENTRY(IConnectionPointContainer) COM_INTERFACE_ENTRY(IPersist) COM_INTERFACE_ENTRY(IProvideClassInfo2) COM_INTERFACE_ENTRY(IProvideClassInfo) END_COM_MAP() BEGIN_CATEGORY_MAP(CMSVidTVTuner) IMPLEMENTED_CATEGORY(CATID_SafeForScripting) IMPLEMENTED_CATEGORY(CATID_SafeForInitializing) IMPLEMENTED_CATEGORY(CATID_PersistsToPropertyBag) END_CATEGORY_MAP() BEGIN_CONNECTION_POINT_MAP(CMSVidTVTuner) CONNECTION_POINT_ENTRY(IID_IMSVidAnalogTunerEvent) END_CONNECTION_POINT_MAP() // ISupportsErrorInfo STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid); public: PQCreateDevEnum m_pSystemEnum; int m_iTuner; int m_iCapture; bool m_bRouted; virtual PQTVTuner GetTuner() { if (m_iTuner < 0) { return PQTVTuner(); } return PQTVTuner(m_Filters[m_iTuner]); } virtual PQAnalogVideoDecoder GetDecoder() { if (m_iCapture < 0) { return PQAnalogVideoDecoder(); } return PQAnalogVideoDecoder(m_Filters[m_iCapture]); } STDMETHOD(put_Tune)(ITuneRequest *pTR); STDMETHOD(ChannelAvailable)(LONG nChannel, LONG * SignalStrength, VARIANT_BOOL * fSignalPresent); STDMETHOD(Decompose)(); virtual HRESULT DoTune(TNTuneRequest &ctr); virtual HRESULT UpdateTR(TNTuneRequest& pTR); HRESULT TwiddleXBar(ULONG dwInput); HRESULT Unload(void) { BroadcastUnadvise(); IMSVidGraphSegmentImpl::Unload(); m_iTuner = -1; m_iCapture = -1; return NOERROR; } // IMSVidGraphSegment STDMETHOD(put_Init)(IUnknown *pDeviceMoniker) { if (!pDeviceMoniker) { return E_POINTER; } HRESULT hr = IMSVidGraphSegmentImpl::put_Init(pDeviceMoniker); if (FAILED(hr)) { return hr; } if (!m_pDev) { m_fInit = false; return Error(IDS_INVALID_SEG_INIT, __uuidof(IMSVidAnalogTuner), E_NOINTERFACE); } return NOERROR; } STDMETHOD(Build)(); STDMETHOD(PreRun)() { ASSERT(m_iTuner != -1); PQTVTuner pTV(m_Filters[m_iTuner]); if (!pTV) { return E_UNEXPECTED; } if (m_pCurrentTR) { return DoTune(m_pCurrentTR); } TunerInputType it = DEFAULT_ANALOG_TUNER_INPUT_TYPE; long cc = DEFAULT_ANALOG_TUNER_COUNTRY_CODE; if (m_TS) { TNAnalogTVTuningSpace ts(m_TS); it = ts.InputType(); cc = ts.CountryCode(); } HRESULT hr = pTV->put_InputType(0, it); _ASSERT(SUCCEEDED(hr)); hr = pTV->put_CountryCode(cc); _ASSERT(SUCCEEDED(hr)); return NOERROR; } STDMETHOD(put_Container)(IMSVidGraphSegmentContainer *pCtl); // IMSVidDevice STDMETHOD(get_Name)(BSTR * Name) { if (!m_fInit) { return CO_E_NOTINITIALIZED; } try { CComBSTR DefaultName(OLESTR("Analog Tuner")); return GetName(((m_iTuner > -1) ? (m_Filters[m_iTuner]) : DSFilter()), m_pDev, DefaultName).CopyTo(Name); return NOERROR; } catch(...) { return E_POINTER; } } // IBroadcastEvent STDMETHOD(Fire)(GUID gEventID) { if (gEventID == EVENTID_TuningChanged) { Fire_OnTuneChanged(this); } return NOERROR; } }; typedef CComQIPtr PQMSVidAnalogTuner; typedef CComPtr PMSVidAnalogTuner; #endif //__MSVidTVTUNER_H_