Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
6.1 KiB

  1. //==========================================================================;
  2. // MSVidTVTuner.h : Declaration of the CMSVidTVTuner
  3. // copyright (c) Microsoft Corp. 1998-1999.
  4. /////////////////////////////////////////////////////////////////////////////
  5. #pragma once
  6. #ifndef __MSVidTVTUNER_H_
  7. #define __MSVidTVTUNER_H_
  8. #include <algorithm>
  9. #include <tchar.h>
  10. #include <bdamedia.h>
  11. #include <objectwithsiteimplsec.h>
  12. #include <bcasteventimpl.h>
  13. #include "segimpl.h"
  14. #include "analogtunerimpl.h"
  15. #include "analogtvcp.h"
  16. #include "seg.h"
  17. const int DEFAULT_OVERSCAN_PCT = 100; // 1%
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CMSVidTVTuner
  20. class ATL_NO_VTABLE __declspec(uuid("1C15D484-911D-11d2-B632-00C04F79498E")) CMSVidTVTuner :
  21. public CComObjectRootEx<CComSingleThreadModel>,
  22. public CComCoClass<CMSVidTVTuner, &__uuidof(CMSVidTVTuner)>,
  23. public IObjectWithSiteImplSec<CMSVidTVTuner>,
  24. public ISupportErrorInfo,
  25. public IConnectionPointContainerImpl<CMSVidTVTuner>,
  26. public CProxy_IMSVidAnalogTuner<CMSVidTVTuner>,
  27. public IBroadcastEventImpl<CMSVidTVTuner>,
  28. public IMSVidGraphSegmentImpl<CMSVidTVTuner, MSVidSEG_SOURCE, &KSCATEGORY_TVTUNER>,
  29. public IMSVidAnalogTunerImpl<CMSVidTVTuner, &LIBID_MSVidCtlLib, &KSCATEGORY_TVTUNER, IMSVidAnalogTuner>,
  30. public IProvideClassInfo2Impl<&CLSID_MSVidAnalogTunerDevice, &IID_IMSVidAnalogTunerEvent, &LIBID_MSVidCtlLib>
  31. {
  32. public:
  33. CMSVidTVTuner() : m_iTuner(-1),
  34. m_iCapture(-1),
  35. m_bRouted(false)
  36. {
  37. }
  38. virtual ~CMSVidTVTuner() {}
  39. REGISTER_AUTOMATION_OBJECT(IDS_PROJNAME,
  40. IDS_REG_TVTUNER_PROGID,
  41. IDS_REG_TVTUNER_DESC,
  42. LIBID_MSVidCtlLib,
  43. __uuidof(CMSVidTVTuner));
  44. DECLARE_PROTECT_FINAL_CONSTRUCT()
  45. BEGIN_COM_MAP(CMSVidTVTuner)
  46. COM_INTERFACE_ENTRY(IMSVidGraphSegment)
  47. COM_INTERFACE_ENTRY(IMSVidAnalogTuner)
  48. COM_INTERFACE_ENTRY(IMSVidTuner)
  49. COM_INTERFACE_ENTRY(IDispatch)
  50. COM_INTERFACE_ENTRY(IObjectWithSite)
  51. COM_INTERFACE_ENTRY(IMSVidDevice)
  52. COM_INTERFACE_ENTRY(IMSVidInputDevice)
  53. COM_INTERFACE_ENTRY(IMSVidVideoInputDevice)
  54. COM_INTERFACE_ENTRY(IBroadcastEvent)
  55. COM_INTERFACE_ENTRY(ISupportErrorInfo)
  56. COM_INTERFACE_ENTRY(IConnectionPointContainer)
  57. COM_INTERFACE_ENTRY(IPersist)
  58. COM_INTERFACE_ENTRY(IProvideClassInfo2)
  59. COM_INTERFACE_ENTRY(IProvideClassInfo)
  60. END_COM_MAP()
  61. BEGIN_CATEGORY_MAP(CMSVidTVTuner)
  62. IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
  63. IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
  64. IMPLEMENTED_CATEGORY(CATID_PersistsToPropertyBag)
  65. END_CATEGORY_MAP()
  66. BEGIN_CONNECTION_POINT_MAP(CMSVidTVTuner)
  67. CONNECTION_POINT_ENTRY(IID_IMSVidAnalogTunerEvent)
  68. END_CONNECTION_POINT_MAP()
  69. // ISupportsErrorInfo
  70. STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
  71. public:
  72. PQCreateDevEnum m_pSystemEnum;
  73. int m_iTuner;
  74. int m_iCapture;
  75. bool m_bRouted;
  76. virtual PQTVTuner GetTuner() {
  77. if (m_iTuner < 0) {
  78. return PQTVTuner();
  79. }
  80. return PQTVTuner(m_Filters[m_iTuner]);
  81. }
  82. virtual PQAnalogVideoDecoder GetDecoder() {
  83. if (m_iCapture < 0) {
  84. return PQAnalogVideoDecoder();
  85. }
  86. return PQAnalogVideoDecoder(m_Filters[m_iCapture]);
  87. }
  88. STDMETHOD(put_Tune)(ITuneRequest *pTR);
  89. STDMETHOD(ChannelAvailable)(LONG nChannel, LONG * SignalStrength, VARIANT_BOOL * fSignalPresent);
  90. STDMETHOD(Decompose)();
  91. virtual HRESULT DoTune(TNTuneRequest &ctr);
  92. virtual HRESULT UpdateTR(TNTuneRequest& pTR);
  93. HRESULT TwiddleXBar(ULONG dwInput);
  94. HRESULT Unload(void) {
  95. BroadcastUnadvise();
  96. IMSVidGraphSegmentImpl<CMSVidTVTuner, MSVidSEG_SOURCE, &KSCATEGORY_TVTUNER>::Unload();
  97. m_iTuner = -1;
  98. m_iCapture = -1;
  99. return NOERROR;
  100. }
  101. // IMSVidGraphSegment
  102. STDMETHOD(put_Init)(IUnknown *pDeviceMoniker)
  103. {
  104. if (!pDeviceMoniker) {
  105. return E_POINTER;
  106. }
  107. HRESULT hr = IMSVidGraphSegmentImpl<CMSVidTVTuner, MSVidSEG_SOURCE, &KSCATEGORY_TVTUNER>::put_Init(pDeviceMoniker);
  108. if (FAILED(hr)) {
  109. return hr;
  110. }
  111. if (!m_pDev) {
  112. m_fInit = false;
  113. return Error(IDS_INVALID_SEG_INIT, __uuidof(IMSVidAnalogTuner), E_NOINTERFACE);
  114. }
  115. return NOERROR;
  116. }
  117. STDMETHOD(Build)();
  118. STDMETHOD(PreRun)() {
  119. ASSERT(m_iTuner != -1);
  120. PQTVTuner pTV(m_Filters[m_iTuner]);
  121. if (!pTV) {
  122. return E_UNEXPECTED;
  123. }
  124. if (m_pCurrentTR) {
  125. return DoTune(m_pCurrentTR);
  126. }
  127. TunerInputType it = DEFAULT_ANALOG_TUNER_INPUT_TYPE;
  128. long cc = DEFAULT_ANALOG_TUNER_COUNTRY_CODE;
  129. if (m_TS) {
  130. TNAnalogTVTuningSpace ts(m_TS);
  131. it = ts.InputType();
  132. cc = ts.CountryCode();
  133. }
  134. HRESULT hr = pTV->put_InputType(0, it);
  135. _ASSERT(SUCCEEDED(hr));
  136. hr = pTV->put_CountryCode(cc);
  137. _ASSERT(SUCCEEDED(hr));
  138. return NOERROR;
  139. }
  140. STDMETHOD(put_Container)(IMSVidGraphSegmentContainer *pCtl);
  141. // IMSVidDevice
  142. STDMETHOD(get_Name)(BSTR * Name)
  143. {
  144. if (!m_fInit) {
  145. return CO_E_NOTINITIALIZED;
  146. }
  147. try {
  148. CComBSTR DefaultName(OLESTR("Analog Tuner"));
  149. return GetName(((m_iTuner > -1) ? (m_Filters[m_iTuner]) : DSFilter()), m_pDev, DefaultName).CopyTo(Name);
  150. return NOERROR;
  151. } catch(...) {
  152. return E_POINTER;
  153. }
  154. }
  155. // IBroadcastEvent
  156. STDMETHOD(Fire)(GUID gEventID) {
  157. if (gEventID == EVENTID_TuningChanged) {
  158. Fire_OnTuneChanged(this);
  159. }
  160. return NOERROR;
  161. }
  162. };
  163. typedef CComQIPtr<IMSVidAnalogTuner, &__uuidof(IMSVidAnalogTuner)> PQMSVidAnalogTuner;
  164. typedef CComPtr<IMSVidAnalogTuner> PMSVidAnalogTuner;
  165. #endif //__MSVidTVTUNER_H_