/**
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */

#include <olectl.h>

#ifndef DO_NO_IMPORTS
import "oaidl.idl";
import "comcat.idl";
import "strmif.idl";
import "bdaiface.idl";
import "regbag.idl";
#else
cpp_quote("#include <bdaiface.h>")
#endif

interface IAnalogLocator;
interface IATSCLocator;
interface IComponent;
interface IComponents;
interface IComponentType;
interface IComponentTypes;
interface IDigitalCableLocator;
interface IDigitalCableTuneRequest;
interface IDigitalCableTuningSpace;
interface IDVBCLocator;
interface IDVBSLocator;
interface IDVBSLocator2;
interface IDVBTLocator;
interface IDVBTLocator2;
interface IEnumComponents;
interface IEnumComponentTypes;
interface IEnumTuningSpaces;
interface IISDBSLocator;
interface ILanguageComponentType;
interface ILocator;
interface IMPEG2Component;
interface IMPEG2ComponentType;
interface IScanningTuner;
interface ITuneRequest;
interface ITuner;
interface ITunerCap;
interface ITuningSpace;
interface ITuningSpaceContainer;

cpp_quote("")
cpp_quote("#include <winapifamily.h>")

cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")

enum {
  DISPID_TUNER_TS_UNIQUENAME = 1,
  DISPID_TUNER_TS_FRIENDLYNAME = 2,
  DISPID_TUNER_TS_CLSID = 3,
  DISPID_TUNER_TS_NETWORKTYPE = 4,
  DISPID_TUNER_TS__NETWORKTYPE = 5,
  DISPID_TUNER_TS_CREATETUNEREQUEST = 6,
  DISPID_TUNER_TS_ENUMCATEGORYGUIDS = 7,
  DISPID_TUNER_TS_ENUMDEVICEMONIKERS = 8,
  DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES = 9,
  DISPID_TUNER_TS_FREQMAP = 10,
  DISPID_TUNER_TS_DEFLOCATOR = 11,
  DISPID_TUNER_TS_CLONE = 12,

  DISPID_TUNER_TR_TUNINGSPACE = 1,
  DISPID_TUNER_TR_COMPONENTS = 2,
  DISPID_TUNER_TR_CLONE = 3,
  DISPID_TUNER_TR_LOCATOR = 4,

  DISPID_TUNER_CT_CATEGORY = 1,
  DISPID_TUNER_CT_MEDIAMAJORTYPE = 2,
  DISPID_TUNER_CT__MEDIAMAJORTYPE = 3,
  DISPID_TUNER_CT_MEDIASUBTYPE = 4,
  DISPID_TUNER_CT__MEDIASUBTYPE = 5,
  DISPID_TUNER_CT_MEDIAFORMATTYPE = 6,
  DISPID_TUNER_CT__MEDIAFORMATTYPE = 7,
  DISPID_TUNER_CT_MEDIATYPE = 8,
  DISPID_TUNER_CT_CLONE = 9,

  DISPID_TUNER_LCT_LANGID = 100,
  DISPID_TUNER_MP2CT_TYPE = 200,
  DISPID_TUNER_ATSCCT_FLAGS = 300,

  DISPID_TUNER_L_CARRFREQ = 1,
  DISPID_TUNER_L_INNERFECMETHOD = 2,
  DISPID_TUNER_L_INNERFECRATE = 3,
  DISPID_TUNER_L_OUTERFECMETHOD = 4,
  DISPID_TUNER_L_OUTERFECRATE = 5,
  DISPID_TUNER_L_MOD = 6,
  DISPID_TUNER_L_SYMRATE = 7,
  DISPID_TUNER_L_CLONE = 8,

  DISPID_TUNER_L_ATSC_PHYS_CHANNEL = 201,
  DISPID_TUNER_L_ATSC_TSID = 202,
  DISPID_TUNER_L_ATSC_MP2_PROGNO = 203,

  DISPID_TUNER_L_DVBT_BANDWIDTH = 301,
  DISPID_TUNER_L_DVBT_LPINNERFECMETHOD = 302,
  DISPID_TUNER_L_DVBT_LPINNERFECRATE = 303,
  DISPID_TUNER_L_DVBT_GUARDINTERVAL = 304,
  DISPID_TUNER_L_DVBT_HALPHA = 305,
  DISPID_TUNER_L_DVBT_TRANSMISSIONMODE = 306,
  DISPID_TUNER_L_DVBT_INUSE = 307,

  DISPID_TUNER_L_DVBT2_PHYSICALLAYERPIPEID = 351,

  DISPID_TUNER_L_DVBS_POLARISATION = 401,
  DISPID_TUNER_L_DVBS_WEST = 402,
  DISPID_TUNER_L_DVBS_ORBITAL = 403,
  DISPID_TUNER_L_DVBS_AZIMUTH = 404,
  DISPID_TUNER_L_DVBS_ELEVATION = 405,

  DISPID_TUNER_L_DVBS2_DISEQ_LNB_SOURCE = 406,
  DISPID_TUNER_TS_DVBS2_LOW_OSC_FREQ_OVERRIDE = 407,
  DISPID_TUNER_TS_DVBS2_HI_OSC_FREQ_OVERRIDE = 408,
  DISPID_TUNER_TS_DVBS2_LNB_SWITCH_FREQ_OVERRIDE = 409,
  DISPID_TUNER_TS_DVBS2_SPECTRAL_INVERSION_OVERRIDE = 410,
  DISPID_TUNER_L_DVBS2_ROLLOFF = 411,
  DISPID_TUNER_L_DVBS2_PILOT = 412,

  DISPID_TUNER_L_ANALOG_STANDARD =601,

  DISPID_TUNER_L_DTV_O_MAJOR_CHANNEL = 701,

  DISPID_TUNER_C_TYPE = 1,
  DISPID_TUNER_C_STATUS = 2,
  DISPID_TUNER_C_LANGID = 3,
  DISPID_TUNER_C_DESCRIPTION = 4,
  DISPID_TUNER_C_CLONE = 5,

  DISPID_TUNER_C_MP2_PID = 101,
  DISPID_TUNER_C_MP2_PCRPID = 102,
  DISPID_TUNER_C_MP2_PROGNO = 103,

  DISPID_TUNER_C_ANALOG_AUDIO = 201,

  DISPID_TUNER_TS_DVB_SYSTEMTYPE = 101,
  DISPID_TUNER_TS_DVB2_NETWORK_ID = 102,

  DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ = 1001,
  DISPID_TUNER_TS_DVBS_HI_OSC_FREQ = 1002,
  DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ = 1003,
  DISPID_TUNER_TS_DVBS_INPUT_RANGE = 1004,
  DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION = 1005,

  DISPID_TUNER_TS_AR_MINFREQUENCY = 101,
  DISPID_TUNER_TS_AR_MAXFREQUENCY = 102,
  DISPID_TUNER_TS_AR_STEP = 103,
  DISPID_TUNER_TS_AR_COUNTRYCODE = 104,

  DISPID_TUNER_TS_AUX_COUNTRYCODE = 101,

  DISPID_TUNER_TS_ATV_MINCHANNEL = 101,
  DISPID_TUNER_TS_ATV_MAXCHANNEL = 102,
  DISPID_TUNER_TS_ATV_INPUTTYPE = 103,
  DISPID_TUNER_TS_ATV_COUNTRYCODE = 104,

  DISPID_TUNER_TS_ATSC_MINMINORCHANNEL = 201,
  DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL = 202,
  DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL = 203,
  DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL = 204,

  DISPID_TUNER_TS_DC_MINMAJORCHANNEL = 301,
  DISPID_TUNER_TS_DC_MAXMAJORCHANNEL = 302,
  DISPID_TUNER_TS_DC_MINSOURCEID = 303,
  DISPID_TUNER_TS_DC_MAXSOURCEID = 304,

  DISPID_CHTUNER_ATVAC_CHANNEL = 101,

  DISPID_CHTUNER_ATVDC_SYSTEM = 101,
  DISPID_CHTUNER_ATVDC_CONTENT = 102,

  DISPID_CHTUNER_CIDTR_CHANNELID = 101,

  DISPID_CHTUNER_CTR_CHANNEL = 101,

  DISPID_CHTUNER_ACTR_MINOR_CHANNEL = 201,

  DISPID_CHTUNER_DCTR_MAJOR_CHANNEL = 301,
  DISPID_CHTUNER_DCTR_SRCID = 302,

  DISPID_DVBTUNER_DVBC_ATTRIBUTESVALID = 101,
  DISPID_DVBTUNER_DVBC_PID = 102,
  DISPID_DVBTUNER_DVBC_TAG = 103,
  DISPID_DVBTUNER_DVBC_COMPONENTTYPE = 104,

  DISPID_DVBTUNER_ONID = 101,
  DISPID_DVBTUNER_TSID = 102,
  DISPID_DVBTUNER_SID = 103,

  DISPID_MP2TUNER_TSID = 101,
  DISPID_MP2TUNER_PROGNO = 102,

  DISPID_MP2TUNERFACTORY_CREATETUNEREQUEST = 1,
};

cpp_quote("")
cpp_quote("#define SID_ESEventService CLSID_ESEventService")
cpp_quote("#define SID_ESEventFactory CLSID_ESEventFactory")
cpp_quote("#define SID_SBroadcastEventService CLSID_BroadcastEventService")
cpp_quote("#define SID_SContentTuneRequest IID_ITuner")
cpp_quote("#define SID_ScanningTuner IID_IScanningTuner")
cpp_quote("#define SID_ScanningTunerEx IID_IScanningTunerEx")
cpp_quote("")

[object, uuid (901284e4-33fe-4b69-8d63-634a596f3756), dual, oleautomation, proxy, nonextensible, pointer_default (unique)]
interface ITuningSpaces : IDispatch {
  [propget] HRESULT Count ([out, retval] long *Count);
  [propget, id (DISPID_NEWENUM), hidden, restricted] HRESULT _NewEnum ([out, retval] IEnumVARIANT **NewEnum);
  [propget, id (DISPID_VALUE)] HRESULT Item ([in] VARIANT varIndex,[out, retval] ITuningSpace **TuningSpace);
  [propget, hidden, restricted] HRESULT EnumTuningSpaces ([out, retval] IEnumTuningSpaces **NewEnum);
}

[object, uuid (5b692e84-E2F1-11d2-9493-00c04f72d980), dual, oleautomation, proxy, hidden, nonextensible, pointer_default (unique)]
interface ITuningSpaceContainer : IDispatch {
  [propget] HRESULT Count ([out, retval] long *Count);
  [propget, id (DISPID_NEWENUM), hidden, restricted] HRESULT _NewEnum ([out, retval] IEnumVARIANT **NewEnum);
  [propget, id (DISPID_VALUE)] HRESULT Item ([in] VARIANT varIndex,[out, retval] ITuningSpace **TuningSpace);
  [propput, id (DISPID_VALUE)] HRESULT Item ([in] VARIANT varIndex,[in] ITuningSpace *TuningSpace);
  HRESULT TuningSpacesForCLSID ([in] BSTR SpaceCLSID,[out, retval] ITuningSpaces **NewColl);
  [hidden, restricted] HRESULT _TuningSpacesForCLSID ([in] REFCLSID SpaceCLSID,[out, retval] ITuningSpaces **NewColl);
  HRESULT TuningSpacesForName ([in] BSTR Name,[out, retval] ITuningSpaces **NewColl);
  HRESULT FindID ([in] ITuningSpace *TuningSpace,[out, retval] long *ID);
  [id (DISPID_ADDITEM)] HRESULT Add ([in] ITuningSpace *TuningSpace,[out, retval] VARIANT *NewIndex);
  [propget, hidden, restricted] HRESULT EnumTuningSpaces ([out, retval] IEnumTuningSpaces **ppEnum);
  [id (DISPID_REMOVEITEM)] HRESULT Remove ([in] VARIANT Index);
  [propget] HRESULT MaxCount ([out, retval] long *MaxCount);
  [propput, hidden, restricted] HRESULT MaxCount ([in] long MaxCount);
}

[object, uuid (061c6e30-E622-11d2-9493-00c04f72d980), dual, oleautomation, proxy, nonextensible, pointer_default (unique)]
interface ITuningSpace : IDispatch {
  [propget, id (DISPID_TUNER_TS_UNIQUENAME)] HRESULT UniqueName ([out, retval] BSTR *Name);
  [propput, id (DISPID_TUNER_TS_UNIQUENAME)] HRESULT UniqueName ([in] BSTR Name);
  [propget, id (DISPID_TUNER_TS_FRIENDLYNAME)] HRESULT FriendlyName ([out, retval] BSTR *Name);
  [propput, id (DISPID_TUNER_TS_FRIENDLYNAME)] HRESULT FriendlyName ([in] BSTR Name);
  [propget, id (DISPID_TUNER_TS_CLSID)] HRESULT CLSID ([out, retval] BSTR *SpaceCLSID);
  [propget, id (DISPID_TUNER_TS_NETWORKTYPE)] HRESULT NetworkType ([out, retval] BSTR *NetworkTypeGuid);
  [propput, id (DISPID_TUNER_TS_NETWORKTYPE)] HRESULT NetworkType ([in] BSTR NetworkTypeGuid);
  [propget, id (DISPID_TUNER_TS__NETWORKTYPE), hidden, restricted] HRESULT _NetworkType ([out, retval] GUID *NetworkTypeGuid);
  [propput, id (DISPID_TUNER_TS__NETWORKTYPE), hidden, restricted] HRESULT _NetworkType ([in] REFCLSID NetworkTypeGuid);
  [id (DISPID_TUNER_TS_CREATETUNEREQUEST)] HRESULT CreateTuneRequest ([out, retval] ITuneRequest **TuneRequest);
  [id (DISPID_TUNER_TS_ENUMCATEGORYGUIDS), hidden, restricted] HRESULT EnumCategoryGUIDs ([out, retval] IEnumGUID **ppEnum);
  [id (DISPID_TUNER_TS_ENUMDEVICEMONIKERS), hidden, restricted] HRESULT EnumDeviceMonikers ([out, retval] IEnumMoniker **ppEnum);
  [propget, id (DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES)] HRESULT DefaultPreferredComponentTypes ([out, retval] IComponentTypes **ComponentTypes);
  [propput, id (DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES)] HRESULT DefaultPreferredComponentTypes ([in] IComponentTypes *NewComponentTypes);
  [propget, id (DISPID_TUNER_TS_FREQMAP)] HRESULT FrequencyMapping ([out, retval] BSTR *pMapping);
  [propput, id (DISPID_TUNER_TS_FREQMAP)] HRESULT FrequencyMapping (BSTR Mapping);
  [propget, id (DISPID_TUNER_TS_DEFLOCATOR)] HRESULT DefaultLocator ([out, retval] ILocator **LocatorVal);
  [propput, id (DISPID_TUNER_TS_DEFLOCATOR)] HRESULT DefaultLocator ([in]ILocator *LocatorVal);
  HRESULT Clone ([out, retval] ITuningSpace **NewTS);
}
[object, hidden, restricted, uuid (8b8eb248-FC2B-11d2-9d8c-00c04f72d980), pointer_default (unique)]
interface IEnumTuningSpaces : IUnknown {
  HRESULT Next ([in] ULONG celt,[out, size_is (celt), length_is (*pceltFetched)] ITuningSpace **rgelt,[out] ULONG *pceltFetched);
  HRESULT Skip ([in] ULONG celt);
  HRESULT Reset (void);
  HRESULT Clone ([out] IEnumTuningSpaces **ppEnum);
}

[object, hidden, dual, oleautomation, proxy, nonextensible, uuid (ADA0B268-3b19-4e5b-ACC4-49f852be13ba), pointer_default (unique)]
interface IDVBTuningSpace : ITuningSpace {
  [propget, id (DISPID_TUNER_TS_DVB_SYSTEMTYPE)] HRESULT SystemType ([out, retval] DVBSystemType *SysType);
  [propput, id (DISPID_TUNER_TS_DVB_SYSTEMTYPE)] HRESULT SystemType ([in] DVBSystemType SysType);
}

[object, hidden, dual, oleautomation, proxy, nonextensible, uuid (843188b4-CE62-43db-966b-8145a094e040), pointer_default (unique)]
interface IDVBTuningSpace2 : IDVBTuningSpace {
  [propget, id (DISPID_TUNER_TS_DVB2_NETWORK_ID)] HRESULT NetworkID ([out, retval] long *NetworkID);
  [propput, id (DISPID_TUNER_TS_DVB2_NETWORK_ID)] HRESULT NetworkID ([in] long NetworkID);
}

[object, hidden, dual, oleautomation, proxy, nonextensible, uuid (CDF7BE60-D954-42fd-A972-78971958e470), pointer_default (unique)]
interface IDVBSTuningSpace : IDVBTuningSpace2 {
  [propget, id (DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ)] HRESULT LowOscillator ([out, retval] long *LowOscillator);
  [propput, id (DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ)] HRESULT LowOscillator ([in] long LowOscillator);
  [propget, id (DISPID_TUNER_TS_DVBS_HI_OSC_FREQ)] HRESULT HighOscillator ([out, retval] long *HighOscillator);
  [propput, id (DISPID_TUNER_TS_DVBS_HI_OSC_FREQ)] HRESULT HighOscillator ([in] long HighOscillator);
  [propget, id (DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ)] HRESULT LNBSwitch ([out, retval] long *LNBSwitch);
  [propput, id (DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ)] HRESULT LNBSwitch ([in] long LNBSwitch);
  [propget, id (DISPID_TUNER_TS_DVBS_INPUT_RANGE)] HRESULT InputRange ([out, retval] BSTR *InputRange);
  [propput, id (DISPID_TUNER_TS_DVBS_INPUT_RANGE)] HRESULT InputRange ([in] BSTR InputRange);
  [propget, id (DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION)] HRESULT SpectralInversion ([out, retval] SpectralInversion *SpectralInversionVal);
  [propput, id (DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION)] HRESULT SpectralInversion ([in] SpectralInversion SpectralInversionVal);
}

[object, hidden, dual, oleautomation, proxy, nonextensible, uuid (E48244B8-7e17-4f76-A763-5090ff1e2f30), pointer_default (unique)]
interface IAuxInTuningSpace : ITuningSpace {
}

[object, hidden, dual, oleautomation, proxy, nonextensible, uuid (B10931ED-8bfe-4ab0-9dce-E469C29A9729), pointer_default (unique)]
interface IAuxInTuningSpace2 : IAuxInTuningSpace {
  [propget, id (DISPID_TUNER_TS_AUX_COUNTRYCODE)] HRESULT CountryCode ([out, retval] long *CountryCodeVal);
  [propput, id (DISPID_TUNER_TS_AUX_COUNTRYCODE)] HRESULT CountryCode ([in] long NewCountryCodeVal);
}

[object, hidden, dual, oleautomation, proxy, nonextensible, uuid (2a6e293c-2595-11d3-b64c-00c04f79498e), pointer_default (unique)]
interface IAnalogTVTuningSpace : ITuningSpace {
  [propget, id (DISPID_TUNER_TS_ATV_MINCHANNEL)] HRESULT MinChannel ([out, retval] long *MinChannelVal);
  [propput, id (DISPID_TUNER_TS_ATV_MINCHANNEL)] HRESULT MinChannel ([in] long NewMinChannelVal);
  [propget, id (DISPID_TUNER_TS_ATV_MAXCHANNEL)] HRESULT MaxChannel ([out, retval] long *MaxChannelVal);
  [propput, id (DISPID_TUNER_TS_ATV_MAXCHANNEL)] HRESULT MaxChannel ([in] long NewMaxChannelVal);
  [propget, id (DISPID_TUNER_TS_ATV_INPUTTYPE)] HRESULT InputType ([out, retval] TunerInputType *InputTypeVal);
  [propput, id (DISPID_TUNER_TS_ATV_INPUTTYPE)] HRESULT InputType ([in] TunerInputType NewInputTypeVal);
  [propget, id (DISPID_TUNER_TS_ATV_COUNTRYCODE)] HRESULT CountryCode ([out, retval] long *CountryCodeVal);
  [propput, id (DISPID_TUNER_TS_ATV_COUNTRYCODE)] HRESULT CountryCode ([in] long NewCountryCodeVal);
}

[object, hidden, dual, oleautomation, proxy, nonextensible, uuid (0369b4e2-45b6-11d3-B650-00c04f79498e), pointer_default (unique)]
interface IATSCTuningSpace : IAnalogTVTuningSpace {
  [propget, id (DISPID_TUNER_TS_ATSC_MINMINORCHANNEL)] HRESULT MinMinorChannel ([out, retval] long *MinMinorChannelVal);
  [propput, id (DISPID_TUNER_TS_ATSC_MINMINORCHANNEL)] HRESULT MinMinorChannel ([in] long NewMinMinorChannelVal);
  [propget, id (DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL)] HRESULT MaxMinorChannel ([out, retval] long *MaxMinorChannelVal);
  [propput, id (DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL)] HRESULT MaxMinorChannel ([in] long NewMaxMinorChannelVal);
  [propget, id (DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL)] HRESULT MinPhysicalChannel ([out, retval] long *MinPhysicalChannelVal);
  [propput, id (DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL)] HRESULT MinPhysicalChannel ([in] long NewMinPhysicalChannelVal);
  [propget, id (DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL)] HRESULT MaxPhysicalChannel ([out, retval] long *MaxPhysicalChannelVal);
  [propput, id (DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL)] HRESULT MaxPhysicalChannel ([in] long NewMaxPhysicalChannelVal);
}

[object, hidden, dual, oleautomation, proxy, nonextensible, uuid (013f9f9c-B449-4ec7-A6D2-9d4f2fc70ae5), pointer_default (unique)]
interface IDigitalCableTuningSpace : IATSCTuningSpace {
  [propget, id (DISPID_TUNER_TS_DC_MINMAJORCHANNEL)] HRESULT MinMajorChannel ([out, retval] long *MinMajorChannelVal);
  [propput, id (DISPID_TUNER_TS_DC_MINMAJORCHANNEL)] HRESULT MinMajorChannel ([in] long NewMinMajorChannelVal);
  [propget, id (DISPID_TUNER_TS_DC_MAXMAJORCHANNEL)] HRESULT MaxMajorChannel ([out, retval] long *MaxMajorChannelVal);
  [propput, id (DISPID_TUNER_TS_DC_MAXMAJORCHANNEL)] HRESULT MaxMajorChannel ([in] long NewMaxMajorChannelVal);
  [propget, id (DISPID_TUNER_TS_DC_MINSOURCEID)] HRESULT MinSourceID ([out, retval] long *MinSourceIDVal);
  [propput, id (DISPID_TUNER_TS_DC_MINSOURCEID)] HRESULT MinSourceID ([in] long NewMinSourceIDVal);
  [propget, id (DISPID_TUNER_TS_DC_MAXSOURCEID)] HRESULT MaxSourceID ([out, retval] long *MaxSourceIDVal);
  [propput, id (DISPID_TUNER_TS_DC_MAXSOURCEID)] HRESULT MaxSourceID ([in] long NewMaxSourceIDVal);
}

[object, hidden, dual, oleautomation, proxy, nonextensible, uuid (2a6e293b-2595-11d3-b64c-00c04f79498e), pointer_default (unique)]
interface IAnalogRadioTuningSpace : ITuningSpace {
  [propget, id (DISPID_TUNER_TS_AR_MINFREQUENCY)] HRESULT MinFrequency ([out, retval] long *MinFrequencyVal);
  [propput, id (DISPID_TUNER_TS_AR_MINFREQUENCY)] HRESULT MinFrequency ([in] long NewMinFrequencyVal);
  [propget, id (DISPID_TUNER_TS_AR_MAXFREQUENCY)] HRESULT MaxFrequency ([out, retval] long *MaxFrequencyVal);
  [propput, id (DISPID_TUNER_TS_AR_MAXFREQUENCY)] HRESULT MaxFrequency ([in] long NewMaxFrequencyVal);
  [propget, id (DISPID_TUNER_TS_AR_STEP)] HRESULT Step ([out, retval] long *StepVal);
  [propput, id (DISPID_TUNER_TS_AR_STEP)] HRESULT Step ([in] long NewStepVal);
}

[object, hidden, dual, oleautomation, proxy, nonextensible, uuid (39dd45da-2da8-46ba-8a8a-87e2b73d983a), pointer_default (unique)]
interface IAnalogRadioTuningSpace2 : IAnalogRadioTuningSpace {
  [propget, id (DISPID_TUNER_TS_AR_COUNTRYCODE)] HRESULT CountryCode ([out, retval] long *CountryCodeVal);
  [propput, id (DISPID_TUNER_TS_AR_COUNTRYCODE)] HRESULT CountryCode ([in] long NewCountryCodeVal);
}

[object, nonextensible, uuid (07ddc146-FC3D-11d2-9d8c-00c04f72d980), dual, oleautomation, proxy, pointer_default (unique)]
interface ITuneRequest : IDispatch {
  [propget, id (DISPID_TUNER_TR_TUNINGSPACE)] HRESULT TuningSpace ([out, retval] ITuningSpace **TuningSpace);
  [propget, id (DISPID_TUNER_TR_COMPONENTS)] HRESULT Components ([out, retval] IComponents **Components);
  [id (DISPID_TUNER_TR_CLONE)] HRESULT Clone ([out, retval] ITuneRequest **NewTuneRequest);
  [propget, id (DISPID_TUNER_TR_LOCATOR)] HRESULT Locator ([out, retval] ILocator **Locator);
  [propput, id (DISPID_TUNER_TR_LOCATOR)] HRESULT Locator ([in] ILocator *Locator);
}

[object, nonextensible, uuid (156eff60-86f4-4e28-89fc-109799fd57ee), dual, oleautomation, pointer_default (unique)]
interface IChannelIDTuneRequest : ITuneRequest {
  [propget, id (DISPID_CHTUNER_CIDTR_CHANNELID)] HRESULT ChannelID ([out, retval] BSTR *ChannelID);
  [propput, id (DISPID_CHTUNER_CIDTR_CHANNELID)] HRESULT ChannelID ([in] BSTR ChannelID);
}

[object, nonextensible, uuid (0369b4e0-45b6-11d3-B650-00c04f79498e), dual, oleautomation, proxy, pointer_default (unique)]
interface IChannelTuneRequest : ITuneRequest {
  [propget, id (DISPID_CHTUNER_CTR_CHANNEL)] HRESULT Channel ([out, retval] long *Channel);
  [propput, id (DISPID_CHTUNER_CTR_CHANNEL)] HRESULT Channel ([in] long Channel);
}

[object, nonextensible, uuid (0369b4e1-45b6-11d3-B650-00c04f79498e), dual, oleautomation, proxy, pointer_default (unique)]
interface IATSCChannelTuneRequest : IChannelTuneRequest {
  [propget, id (DISPID_CHTUNER_ACTR_MINOR_CHANNEL)] HRESULT MinorChannel ([out, retval] long *MinorChannel);
  [propput, id (DISPID_CHTUNER_ACTR_MINOR_CHANNEL)] HRESULT MinorChannel ([in] long MinorChannel);
}

[object, nonextensible, uuid (BAD7753B-6b37-4810-AE57-3ce0c4a9e6cb), dual, oleautomation, proxy, pointer_default (unique)]
interface IDigitalCableTuneRequest : IATSCChannelTuneRequest {
  [propget, id (DISPID_CHTUNER_DCTR_MAJOR_CHANNEL)] HRESULT MajorChannel ([out, retval] long *pMajorChannel);
  [propput, id (DISPID_CHTUNER_DCTR_MAJOR_CHANNEL)] HRESULT MajorChannel ([in] long MajorChannel);
  [propget, id (DISPID_CHTUNER_DCTR_SRCID)] HRESULT SourceID ([out, retval] long *pSourceID);
  [propput, id (DISPID_CHTUNER_DCTR_SRCID)] HRESULT SourceID ([in] long SourceID);
}

[object, nonextensible, uuid (0d6f567e-A636-42bb-83ba-CE4C1704AFA2), dual, oleautomation, proxy, pointer_default (unique)]
interface IDVBTuneRequest : ITuneRequest {
  [propget, id (DISPID_DVBTUNER_ONID)] HRESULT ONID ([out, retval] long *ONID);
  [propput, id (DISPID_DVBTUNER_ONID)] HRESULT ONID ([in] long ONID);
  [propget, id (DISPID_DVBTUNER_TSID)] HRESULT TSID ([out, retval] long *TSID);
  [propput, id (DISPID_DVBTUNER_TSID)] HRESULT TSID ([in] long TSID);
  [propget, id (DISPID_DVBTUNER_SID)] HRESULT SID ([out, retval] long *SID);
  [propput, id (DISPID_DVBTUNER_SID)] HRESULT SID ([in] long SID);
}

[object, nonextensible, uuid (EB7D987F-8a01-42ad-B8AE-574deee44d1a), dual, oleautomation, proxy, pointer_default (unique)]
interface IMPEG2TuneRequest : ITuneRequest {
  [propget, id (DISPID_MP2TUNER_TSID)] HRESULT TSID ([out, retval] long *TSID);
  [propput, id (DISPID_MP2TUNER_TSID)] HRESULT TSID ([in] long TSID);
  [propget, id (DISPID_MP2TUNER_PROGNO)] HRESULT ProgNo ([out, retval] long *ProgNo);
  [propput, id (DISPID_MP2TUNER_PROGNO)] HRESULT ProgNo ([in] long ProgNo);
}

[object, nonextensible, hidden, uuid (14e11abd-EE37-4893-9ea1-6964de933e39), dual, oleautomation, proxy, pointer_default (unique)]
interface IMPEG2TuneRequestFactory : IDispatch {
  [id (DISPID_MP2TUNERFACTORY_CREATETUNEREQUEST)] HRESULT CreateTuneRequest ([in] ITuningSpace *TuningSpace,[out, retval] IMPEG2TuneRequest **TuneRequest);
}

[object, hidden, restricted, nonextensible, uuid (1b9d5fc3-5bbc-4b6c-BB18-B9D10E3EEEBF), pointer_default (unique)]
interface IMPEG2TuneRequestSupport : IUnknown {
}

[object, hidden, nonextensible, uuid (E60DFA45-8d56-4e65-A8AB-D6BE9412C249), pointer_default (unique)]
interface ITunerCap : IUnknown {
  [propget] HRESULT SupportedNetworkTypes ([in] ULONG ulcNetworkTypesMax,[out] ULONG *pulcNetworkTypes,[in, out] GUID *pguidNetworkTypes);
  [propget] HRESULT SupportedVideoFormats ([out] ULONG *pulAMTunerModeType,[out] ULONG *pulAnalogVideoStandard);
  [propget] HRESULT AuxInputCount ([in, out] ULONG *pulCompositeCount,[in, out] ULONG *pulSvideoCount);
}

[object, hidden, nonextensible, uuid (ed3e0c66-18c8-4ea6-9300-f6841fdd35dc), pointer_default (unique)]
interface ITunerCapEx : IUnknown {
  [propget] HRESULT Has608_708Caption ([out, retval]VARIANT_BOOL *pbHasCaption);
}
[object, hidden, nonextensible, uuid (28c52640-018a-11d3-9d8e-00c04f72d980), pointer_default (unique)]
interface ITuner : IUnknown {
  [propget] HRESULT TuningSpace ([out, retval] ITuningSpace **TuningSpace);
  [propput] HRESULT TuningSpace ([in] ITuningSpace *TuningSpace);
  [hidden, restricted] HRESULT EnumTuningSpaces ([out, retval] IEnumTuningSpaces **ppEnum);
  [propget] HRESULT TuneRequest ([out, retval] ITuneRequest **TuneRequest);
  [propput] HRESULT TuneRequest ([in] ITuneRequest *TuneRequest);
  HRESULT Validate ([in] ITuneRequest *TuneRequest);
  [propget] HRESULT PreferredComponentTypes ([out, retval] IComponentTypes **ComponentTypes);
  [propput] HRESULT PreferredComponentTypes ([in] IComponentTypes *ComponentTypes);
  [propget] HRESULT SignalStrength ([out, retval] long *Strength);
  HRESULT TriggerSignalEvents ([in] long Interval);
};

[object, hidden, nonextensible, uuid (1dfd0a5c-0284-11d3-9d8e-00c04f72d980), pointer_default (unique)]
interface IScanningTuner : ITuner {
  HRESULT SeekUp ();
  HRESULT SeekDown ();
  HRESULT ScanUp ([in] long MillisecondsPause);
  HRESULT ScanDown ([in] long MillisecondsPause);
  HRESULT AutoProgram ();
};

[object, hidden, nonextensible, uuid (04bbd195-0e2d-4593-9bd5-4f908bc33cf5), pointer_default (unique)]
interface IScanningTunerEx : IScanningTuner {
  HRESULT GetCurrentLocator (ILocator **pILocator);
  HRESULT PerformExhaustiveScan ([in] long dwLowerFreq,[in] long dwHigherFreq,[in] VARIANT_BOOL bFineTune,[in] HEVENT hEvent);
  HRESULT TerminateCurrentScan ([out, retval] long *pcurrentFreq);
  HRESULT ResumeCurrentScan ([in] HEVENT hEvent);
  HRESULT GetTunerScanningCapability ([out] long *HardwareAssistedScanning,[out] long *NumStandardsSupported,[out] GUID *BroadcastStandards);
  HRESULT GetTunerStatus ([out] long *SecondsLeft,[out] long *CurrentLockType,[out] long *AutoDetect,[out] long *CurrentFreq);
  HRESULT GetCurrentTunerStandardCapability ([in] GUID CurrentBroadcastStandard,[out] long *SettlingTime,[out] long *TvStandardsSupported);
  HRESULT SetScanSignalTypeFilter ([in] long ScanModulationTypes,[in] long AnalogVideoStandard);
};

[object, hidden, nonextensible, uuid (6a340dc0-0311-11d3-9d8e-00c04f72d980), dual, oleautomation, proxy, pointer_default (unique)]
interface IComponentType : IDispatch {
  [propget, id (DISPID_TUNER_CT_CATEGORY)] HRESULT Category ([out, retval] ComponentCategory *Category);
  [propput, id (DISPID_TUNER_CT_CATEGORY)] HRESULT Category ([in] ComponentCategory Category);
  [propget, id (DISPID_TUNER_CT_MEDIAMAJORTYPE)] HRESULT MediaMajorType ([out, retval] BSTR *MediaMajorType);
  [propput, id (DISPID_TUNER_CT_MEDIAMAJORTYPE)] HRESULT MediaMajorType ([in] BSTR MediaMajorType);
  [propget, id (DISPID_TUNER_CT__MEDIAMAJORTYPE), hidden, restricted] HRESULT _MediaMajorType ([out, retval] GUID *MediaMajorTypeGuid);
  [propput, id (DISPID_TUNER_CT__MEDIAMAJORTYPE), hidden, restricted] HRESULT _MediaMajorType ([in] REFCLSID MediaMajorTypeGuid);
  [propget, id (DISPID_TUNER_CT_MEDIASUBTYPE)] HRESULT MediaSubType ([out, retval] BSTR *MediaSubType);
  [propput, id (DISPID_TUNER_CT_MEDIASUBTYPE)] HRESULT MediaSubType ([in] BSTR MediaSubType);
  [propget, id (DISPID_TUNER_CT__MEDIASUBTYPE), hidden, restricted] HRESULT _MediaSubType ([out, retval] GUID *MediaSubTypeGuid);
  [propput, id (DISPID_TUNER_CT__MEDIASUBTYPE), hidden, restricted] HRESULT _MediaSubType ([in] REFCLSID MediaSubTypeGuid);
  [propget, id (DISPID_TUNER_CT_MEDIAFORMATTYPE)] HRESULT MediaFormatType ([out, retval] BSTR *MediaFormatType);
  [propput, id (DISPID_TUNER_CT_MEDIAFORMATTYPE)] HRESULT MediaFormatType ([in] BSTR MediaFormatType);
  [propget, id (DISPID_TUNER_CT__MEDIAFORMATTYPE), hidden, restricted] HRESULT _MediaFormatType ([out, retval] GUID *MediaFormatTypeGuid);
  [propput, id (DISPID_TUNER_CT__MEDIAFORMATTYPE), hidden, restricted] HRESULT _MediaFormatType ([in] REFCLSID MediaFormatTypeGuid);
  [propget, id (DISPID_TUNER_CT_MEDIATYPE), hidden, restricted] HRESULT MediaType ([out, retval] AM_MEDIA_TYPE *MediaType);
  [propput, id (DISPID_TUNER_CT_MEDIATYPE), hidden, restricted] HRESULT MediaType ([in] AM_MEDIA_TYPE *MediaType);
  [id (DISPID_TUNER_CT_CLONE)] HRESULT Clone ([out, retval] IComponentType **NewCT);
};

[object, hidden, nonextensible, uuid (B874C8BA-0fa2-11d3-9d8e-00c04f72d980), dual, oleautomation, proxy, pointer_default (unique)]
interface ILanguageComponentType : IComponentType {
  [propget, id (DISPID_TUNER_LCT_LANGID)] HRESULT LangID ([out, retval] long *LangID);
  [propput, id (DISPID_TUNER_LCT_LANGID)] HRESULT LangID ([in] long LangID);
};

[object, hidden, nonextensible, uuid (2c073d84-B51C-48c9-AA9F-68971e1f6e38), dual, oleautomation, proxy, pointer_default (unique)]
interface IMPEG2ComponentType : ILanguageComponentType {
  [propget, id (DISPID_TUNER_MP2CT_TYPE)] HRESULT StreamType ([out, retval] MPEG2StreamType *MP2StreamType);
  [propput, id (DISPID_TUNER_MP2CT_TYPE)] HRESULT StreamType ([in] MPEG2StreamType MP2StreamType);
};

[object, hidden, nonextensible, uuid (FC189E4D-7bd4-4125-B3B3-3a76a332cc96), dual, oleautomation, proxy, pointer_default (unique)]
interface IATSCComponentType : IMPEG2ComponentType {
  [propget, id (DISPID_TUNER_ATSCCT_FLAGS)] HRESULT Flags ([out, retval] long *Flags);
  [propput, id (DISPID_TUNER_ATSCCT_FLAGS)] HRESULT Flags ([in] long flags);
};

[object, hidden, restricted, uuid (8a674b4a-1f63-11d3-b64c-00c04f79498e), pointer_default (unique)]
interface IEnumComponentTypes : IUnknown {
  HRESULT Next ([in] ULONG celt,[out, size_is (celt), length_is (*pceltFetched)] IComponentType **rgelt,[out] ULONG *pceltFetched);
  HRESULT Skip ([in] ULONG celt);
  HRESULT Reset (void);
  HRESULT Clone ([out] IEnumComponentTypes **ppEnum);
}

[object, hidden, nonextensible, uuid (0dc13d4a-0313-11d3-9d8e-00c04f72d980), dual, oleautomation, proxy, pointer_default (unique)]
interface IComponentTypes : IDispatch {
  [propget] HRESULT Count ([out, retval] long *Count);
  [propget, id (DISPID_NEWENUM), hidden, restricted] HRESULT _NewEnum ([out, retval] IEnumVARIANT **ppNewEnum);
  [hidden, restricted] HRESULT EnumComponentTypes ([out, retval] IEnumComponentTypes **ppNewEnum);
  [propget, id (DISPID_VALUE)] HRESULT Item ([in] VARIANT Index,[out, retval] IComponentType **ComponentType);
  [propput, id (DISPID_VALUE)] HRESULT Item ([in] VARIANT Index,[in] IComponentType *ComponentType);
  [id (DISPID_ADDITEM)] HRESULT Add ([in] IComponentType *ComponentType,[out, retval] VARIANT *NewIndex);
  [id (DISPID_REMOVEITEM)] HRESULT Remove ([in] VARIANT Index);
  HRESULT Clone ([out, retval] IComponentTypes **NewList);
};

[object, nonextensible, uuid (1a5576fc-0e19-11d3-9d8e-00c04f72d980), dual, oleautomation, proxy, pointer_default (unique)]
interface IComponent : IDispatch {
  [propget, id (DISPID_TUNER_C_TYPE)] HRESULT Type ([out, retval] IComponentType **CT);
  [propput, hidden, restricted, id (DISPID_TUNER_C_TYPE)] HRESULT Type ([in] IComponentType *CT);
  [propget, id (DISPID_TUNER_C_LANGID)] HRESULT DescLangID ([out, retval] long *LangID);
  [propput, id (DISPID_TUNER_C_LANGID)] HRESULT DescLangID ([in] long LangID);
  [propget, id (DISPID_TUNER_C_STATUS)] HRESULT Status ([out, retval] ComponentStatus *Status);
  [propput, id (DISPID_TUNER_C_STATUS)] HRESULT Status ([in] ComponentStatus Status);
  [propget, id (DISPID_TUNER_C_DESCRIPTION)] HRESULT Description ([out, retval] BSTR *Description);
  [propput, hidden, restricted, id (DISPID_TUNER_C_DESCRIPTION)] HRESULT Description ([in] BSTR Description);
  [id (DISPID_TUNER_C_CLONE)] HRESULT Clone ([out, retval] IComponent **NewComponent);
};

[object, nonextensible, uuid (2cfeb2a8-1787-4a24-A941-C6EAEC39C842), dual, oleautomation, proxy, pointer_default (unique)]
interface IAnalogAudioComponentType : IComponentType {
  [propget, id (DISPID_TUNER_C_ANALOG_AUDIO)] HRESULT AnalogAudioMode ([out, retval] TVAudioMode *Mode);
  [propput, id (DISPID_TUNER_C_ANALOG_AUDIO)] HRESULT AnalogAudioMode ([in] TVAudioMode Mode);
}

[object, nonextensible, uuid (1493e353-1eb6-473c-802d-8e6b8ec9d2a9), dual, oleautomation, proxy, pointer_default (unique)]
interface IMPEG2Component : IComponent {
  [propget, id (DISPID_TUNER_C_MP2_PID)] HRESULT PID ([out, retval] long *PID);
  [propput, id (DISPID_TUNER_C_MP2_PID)] HRESULT PID ([in] long PID);
  [propget, id (DISPID_TUNER_C_MP2_PCRPID)] HRESULT PCRPID ([out, retval] long *PCRPID);
  [propput, id (DISPID_TUNER_C_MP2_PCRPID)] HRESULT PCRPID ([in] long PCRPID);
  [propget, id (DISPID_TUNER_C_MP2_PROGNO)] HRESULT ProgramNumber ([out, retval] long *ProgramNumber);
  [propput, id (DISPID_TUNER_C_MP2_PROGNO)] HRESULT ProgramNumber ([in] long ProgramNumber);
};

[object, hidden, restricted, uuid (2a6e2939-2595-11d3-b64c-00c04f79498e), pointer_default (unique)]
interface IEnumComponents : IUnknown {
  HRESULT Next ([in] ULONG celt,[out, size_is (celt), length_is (*pceltFetched)] IComponent **rgelt,[out] ULONG *pceltFetched);
  HRESULT Skip ([in] ULONG celt);
  HRESULT Reset (void);
  HRESULT Clone ([out] IEnumComponents **ppEnum);
}

[object, nonextensible, uuid (39a48091-fffe-4182-a161-3ff802640e26), dual, oleautomation, proxy, pointer_default (unique)]
interface IComponents : IDispatch {
  [propget] HRESULT Count ([out, retval] long *Count);
  [propget, id (DISPID_NEWENUM), hidden, restricted] HRESULT _NewEnum ([out, retval] IEnumVARIANT **ppNewEnum);
  [hidden, restricted] HRESULT EnumComponents ([out, retval] IEnumComponents **ppNewEnum);
  [propget, id (DISPID_VALUE)] HRESULT Item ([in] VARIANT Index,[out, retval] IComponent **ppComponent);
  [id (DISPID_ADDITEM)] HRESULT Add ([in] IComponent *Component,[out, retval] VARIANT *NewIndex);
  [id (DISPID_REMOVEITEM)] HRESULT Remove ([in] VARIANT Index);
  HRESULT Clone ([out, retval] IComponents **NewList);
  [propput, id (DISPID_VALUE)] HRESULT Item ([in] VARIANT Index,[in] IComponent *ppComponent);
};

[object, nonextensible, uuid (FCD01846-0e19-11d3-9d8e-00c04f72d980), dual, oleautomation, proxy, pointer_default (unique)]
interface IComponentsOld : IDispatch {
  [propget] HRESULT Count ([out, retval] long *Count);
  [propget, id (DISPID_NEWENUM), hidden, restricted] HRESULT _NewEnum ([out, retval] IEnumVARIANT **ppNewEnum);
  [hidden, restricted] HRESULT EnumComponents ([out, retval] IEnumComponents **ppNewEnum);
  [propget, id (DISPID_VALUE)] HRESULT Item ([in] VARIANT Index,[out, retval] IComponent **ppComponent);
  [id (DISPID_ADDITEM)] HRESULT Add ([in] IComponent *Component,[out, retval] VARIANT *NewIndex);
  [id (DISPID_REMOVEITEM)] HRESULT Remove ([in] VARIANT Index);
  HRESULT Clone ([out, retval] IComponents **NewList);
};

[object, nonextensible, uuid (286d7f89-760c-4f89-80c4-66841d2507aa), dual, oleautomation, proxy, pointer_default (unique)]
interface ILocator : IDispatch {
  [propget, id (DISPID_TUNER_L_CARRFREQ)] HRESULT CarrierFrequency ([out, retval] long *Frequency);
  [propput, id (DISPID_TUNER_L_CARRFREQ)] HRESULT CarrierFrequency ([in] long Frequency);
  [propget, id (DISPID_TUNER_L_INNERFECMETHOD)] HRESULT InnerFEC ([out, retval] FECMethod *FEC);
  [propput, id (DISPID_TUNER_L_INNERFECMETHOD)] HRESULT InnerFEC ([in] FECMethod FEC);
  [propget, id (DISPID_TUNER_L_INNERFECRATE)] HRESULT InnerFECRate ([out, retval] BinaryConvolutionCodeRate *FEC);
  [propput, id (DISPID_TUNER_L_INNERFECRATE)] HRESULT InnerFECRate ([in] BinaryConvolutionCodeRate FEC);
  [propget, id (DISPID_TUNER_L_OUTERFECMETHOD)] HRESULT OuterFEC ([out, retval] FECMethod *FEC);
  [propput, id (DISPID_TUNER_L_OUTERFECMETHOD)] HRESULT OuterFEC ([in] FECMethod FEC);
  [propget, id (DISPID_TUNER_L_OUTERFECRATE)] HRESULT OuterFECRate ([out, retval] BinaryConvolutionCodeRate *FEC);
  [propput, id (DISPID_TUNER_L_OUTERFECRATE)] HRESULT OuterFECRate ([in] BinaryConvolutionCodeRate FEC);
  [propget, id (DISPID_TUNER_L_MOD)] HRESULT Modulation ([out, retval] ModulationType *Modulation);
  [propput, id (DISPID_TUNER_L_MOD)] HRESULT Modulation ([in] ModulationType Modulation);
  [propget, id (DISPID_TUNER_L_SYMRATE)] HRESULT SymbolRate ([out, retval] long *Rate);
  [propput, id (DISPID_TUNER_L_SYMRATE)] HRESULT SymbolRate ([in] long Rate);
  [id (DISPID_TUNER_L_CLONE)] HRESULT Clone ([out, retval] ILocator **NewLocator);
};

[object, nonextensible, uuid (34d1f26b-E339-430d-ABCE-738cb48984dc), dual, oleautomation, proxy, pointer_default (unique)]
interface IAnalogLocator : ILocator {
  [propget, id (DISPID_TUNER_L_ANALOG_STANDARD)] HRESULT VideoStandard ([out, retval] AnalogVideoStandard *AVS);
  [propput, id (DISPID_TUNER_L_ANALOG_STANDARD)] HRESULT VideoStandard ([in] AnalogVideoStandard AVS);
};

[object, nonextensible, uuid (19b595d8-839a-47f0-96df-4f194f3c768c), dual, oleautomation, proxy, pointer_default (unique)]
interface IDigitalLocator : ILocator {
};

[object, hidden, nonextensible, uuid (BF8D986F-8c2b-4131-94d7-4d3d9fcc21ef), dual, oleautomation, proxy, pointer_default (unique)]
interface IATSCLocator : IDigitalLocator {
  [propget, id (DISPID_TUNER_L_ATSC_PHYS_CHANNEL)] HRESULT PhysicalChannel ([out, retval] long *PhysicalChannel);
  [propput, id (DISPID_TUNER_L_ATSC_PHYS_CHANNEL)] HRESULT PhysicalChannel ([in] long PhysicalChannel);
  [propget, id (DISPID_TUNER_L_ATSC_TSID)] HRESULT TSID ([out, retval] long *TSID);
  [propput, id (DISPID_TUNER_L_ATSC_TSID)] HRESULT TSID ([in] long TSID);
};

[object, hidden, nonextensible, uuid (612aa885-66cf-4090-BA0A-566f5312e4ca), dual, oleautomation, proxy, pointer_default (unique)]
interface IATSCLocator2 : IATSCLocator {
  [propget, id (DISPID_TUNER_L_ATSC_MP2_PROGNO)] HRESULT ProgramNumber ([out, retval] long *ProgramNumber);
  [propput, id (DISPID_TUNER_L_ATSC_MP2_PROGNO)] HRESULT ProgramNumber ([in] long ProgramNumber);
};

[object, hidden, nonextensible, uuid (48f66a11-171a-419a-9525-BEEECD51584C), dual, oleautomation, proxy, pointer_default (unique)]
interface IDigitalCableLocator : IATSCLocator2 {
};

[object, hidden, nonextensible, uuid (8664da16-DDA2-42ac-926a-C18F9127C302), dual, oleautomation, proxy, pointer_default (unique)]
interface IDVBTLocator : IDigitalLocator {
  [propget, id (DISPID_TUNER_L_DVBT_BANDWIDTH)] HRESULT Bandwidth ([out, retval] long *BandWidthVal);
  [propput, id (DISPID_TUNER_L_DVBT_BANDWIDTH)] HRESULT Bandwidth ([in] long BandwidthVal);
  [propget, id (DISPID_TUNER_L_DVBT_LPINNERFECMETHOD)] HRESULT LPInnerFEC ([out, retval] FECMethod *FEC);
  [propput, id (DISPID_TUNER_L_DVBT_LPINNERFECMETHOD)] HRESULT LPInnerFEC ([in] FECMethod FEC);
  [propget, id (DISPID_TUNER_L_DVBT_LPINNERFECRATE)] HRESULT LPInnerFECRate ([out, retval] BinaryConvolutionCodeRate *FEC);
  [propput, id (DISPID_TUNER_L_DVBT_LPINNERFECRATE)] HRESULT LPInnerFECRate ([in] BinaryConvolutionCodeRate FEC);
  [propget, id (DISPID_TUNER_L_DVBT_HALPHA)] HRESULT HAlpha ([out, retval] HierarchyAlpha *Alpha);
  [propput, id (DISPID_TUNER_L_DVBT_HALPHA)] HRESULT HAlpha ([in] HierarchyAlpha Alpha);
  [propget, id (DISPID_TUNER_L_DVBT_GUARDINTERVAL)] HRESULT Guard ([out, retval] GuardInterval *GI);
  [propput, id (DISPID_TUNER_L_DVBT_GUARDINTERVAL)] HRESULT Guard ([in] GuardInterval GI);
  [propget, id (DISPID_TUNER_L_DVBT_TRANSMISSIONMODE)] HRESULT Mode ([out, retval] TransmissionMode *mode);
  [propput, id (DISPID_TUNER_L_DVBT_TRANSMISSIONMODE)] HRESULT Mode ([in] TransmissionMode mode);
  [propget, id (DISPID_TUNER_L_DVBT_INUSE)] HRESULT OtherFrequencyInUse ([out, retval] VARIANT_BOOL *OtherFrequencyInUseVal);
  [propput, id (DISPID_TUNER_L_DVBT_INUSE)] HRESULT OtherFrequencyInUse ([in] VARIANT_BOOL OtherFrequencyInUseVal);
};

[object, hidden, nonextensible, uuid (448a2edf-AE95-4b43-A3CC-747843c453d4), dual, oleautomation, proxy, pointer_default (unique)]
interface IDVBTLocator2 : IDVBTLocator {
  [propget, id (DISPID_TUNER_L_DVBT2_PHYSICALLAYERPIPEID)] HRESULT PhysicalLayerPipeId ([out, retval] long *PhysicalLayerPipeIdVal);
  [propput, id (DISPID_TUNER_L_DVBT2_PHYSICALLAYERPIPEID)] HRESULT PhysicalLayerPipeId ([in] long PhysicalLayerPipeIdVal);
};

[object, hidden, nonextensible, uuid (3d7c353c-0d04-45f1-A742-F97CC1188DC8), dual, oleautomation, proxy, pointer_default (unique)]
interface IDVBSLocator : IDigitalLocator {
  [propget, id (DISPID_TUNER_L_DVBS_POLARISATION)] HRESULT SignalPolarisation ([out, retval] Polarisation *PolarisationVal);
  [propput, id (DISPID_TUNER_L_DVBS_POLARISATION)] HRESULT SignalPolarisation ([in] Polarisation PolarisationVal);
  [propget, id (DISPID_TUNER_L_DVBS_WEST)] HRESULT WestPosition ([out, retval] VARIANT_BOOL *WestLongitude);
  [propput, id (DISPID_TUNER_L_DVBS_WEST)] HRESULT WestPosition ([in] VARIANT_BOOL WestLongitude);
  [propget, id (DISPID_TUNER_L_DVBS_ORBITAL)] HRESULT OrbitalPosition ([out, retval] long *longitude);
  [propput, id (DISPID_TUNER_L_DVBS_ORBITAL)] HRESULT OrbitalPosition ([in] long longitude);
  [propget, id (DISPID_TUNER_L_DVBS_AZIMUTH)] HRESULT Azimuth ([out, retval] long *Azimuth);
  [propput, id (DISPID_TUNER_L_DVBS_AZIMUTH)] HRESULT Azimuth ([in] long Azimuth);
  [propget, id (DISPID_TUNER_L_DVBS_ELEVATION)] HRESULT Elevation ([out, retval] long *Elevation);
  [propput, id (DISPID_TUNER_L_DVBS_ELEVATION)] HRESULT Elevation ([in] long Elevation);
};

[object, hidden, nonextensible, uuid (6044634a-1733-4f99-B982-5fb12afce4f0), dual, oleautomation, proxy, pointer_default (unique)]
interface IDVBSLocator2 : IDVBSLocator {
  [propget, id (DISPID_TUNER_L_DVBS2_DISEQ_LNB_SOURCE)] HRESULT DiseqLNBSource ([out, retval] LNB_Source *DiseqLNBSourceVal);
  [propput, id (DISPID_TUNER_L_DVBS2_DISEQ_LNB_SOURCE)] HRESULT DiseqLNBSource ([in] LNB_Source DiseqLNBSourceVal);
  [propget, id (DISPID_TUNER_TS_DVBS2_LOW_OSC_FREQ_OVERRIDE)] HRESULT LocalOscillatorOverrideLow ([out, retval] long *LocalOscillatorOverrideLowVal);
  [propput, id (DISPID_TUNER_TS_DVBS2_LOW_OSC_FREQ_OVERRIDE)] HRESULT LocalOscillatorOverrideLow ([in] long LocalOscillatorOverrideLowVal);
  [propget, id (DISPID_TUNER_TS_DVBS2_HI_OSC_FREQ_OVERRIDE)] HRESULT LocalOscillatorOverrideHigh ([out, retval] long *LocalOscillatorOverrideHighVal);
  [propput, id (DISPID_TUNER_TS_DVBS2_HI_OSC_FREQ_OVERRIDE)] HRESULT LocalOscillatorOverrideHigh ([in] long LocalOscillatorOverrideHighVal);
  [propget, id (DISPID_TUNER_TS_DVBS2_LNB_SWITCH_FREQ_OVERRIDE)] HRESULT LocalLNBSwitchOverride ([out, retval] long *LocalLNBSwitchOverrideVal);
  [propput, id (DISPID_TUNER_TS_DVBS2_LNB_SWITCH_FREQ_OVERRIDE)] HRESULT LocalLNBSwitchOverride ([in] long LocalLNBSwitchOverrideVal);
  [propget, id (DISPID_TUNER_TS_DVBS2_SPECTRAL_INVERSION_OVERRIDE)] HRESULT LocalSpectralInversionOverride ([out, retval] SpectralInversion *LocalSpectralInversionOverrideVal);
  [propput, id (DISPID_TUNER_TS_DVBS2_SPECTRAL_INVERSION_OVERRIDE)] HRESULT LocalSpectralInversionOverride ([in] SpectralInversion LocalSpectralInversionOverrideVal);
  [propget, id (DISPID_TUNER_L_DVBS2_ROLLOFF)] HRESULT SignalRollOff ([out, retval] RollOff *RollOffVal);
  [propput, id (DISPID_TUNER_L_DVBS2_ROLLOFF)] HRESULT SignalRollOff ([in] RollOff RollOffVal);
  [propget, id (DISPID_TUNER_L_DVBS2_PILOT)] HRESULT SignalPilot ([out, retval] Pilot *PilotVal);
  [propput, id (DISPID_TUNER_L_DVBS2_PILOT)] HRESULT SignalPilot ([in] Pilot PilotVal);
};

[object, hidden, nonextensible, uuid (6e42f36e-1dd2-43c4-9f78-69d25ae39034), dual, oleautomation, proxy, pointer_default (unique)]
interface IDVBCLocator : IDigitalLocator {
};

[object, hidden, nonextensible, uuid (C9897087-E29C-473f-9e4b-7072123dea14), dual, oleautomation, proxy, pointer_default (unique)]
interface IISDBSLocator : IDVBSLocator {
};

[object, uuid (1f0e5357-AF43-44e6-8547-654c645145d2), pointer_default (unique)]
interface IESEvent : IUnknown {
  HRESULT GetEventId ([out, retval] DWORD *pdwEventId);
  HRESULT GetEventType ([out, retval] GUID *pguidEventType);
  HRESULT SetCompletionStatus ([in]DWORD dwResult);
  HRESULT GetData ([out, retval] SAFEARRAY (BYTE) *pbData);
  HRESULT GetStringData ([out, retval] BSTR *pbstrData);
};

[object, uuid (BA4B6526-1a35-4635-8b56-3ec612746a8c), pointer_default (unique)]
interface IESOpenMmiEvent : IESEvent {
  HRESULT GetDialogNumber ([out] DWORD *pDialogRequest,[out, retval] DWORD *pDialogNumber);
  HRESULT GetDialogType ([out, retval] GUID *guidDialogType);
  HRESULT GetDialogData ([out, retval] SAFEARRAY (BYTE) *pbData);
  HRESULT GetDialogStringData ([out] BSTR *pbstrBaseUrl,[out, retval] BSTR *pbstrData);
};

[object, uuid (6b80e96f-55e2-45aa-B754-0c23c8e7d5c1), pointer_default (unique)]
interface IESCloseMmiEvent : IESEvent {
  HRESULT GetDialogNumber ([out, retval] DWORD *pDialogNumber);
};

[object, uuid (8a24c46e-BB63-4664-8602-5d9c718c146d), pointer_default (unique)]
interface IESValueUpdatedEvent : IESEvent {
  HRESULT GetValueNames ([out, retval] SAFEARRAY (BSTR) *pbstrNames);
};

[object, uuid (54c7a5e8-C3BB-4f51-AF14-E0E2C0E34C6D), pointer_default (unique)]
interface IESRequestTunerEvent : IESEvent {
  HRESULT GetPriority ([out, retval] BYTE *pbyPriority);
  HRESULT GetReason ([out, retval] BYTE *pbyReason);
  HRESULT GetConsequences ([out, retval] BYTE *pbyConsequences);
  HRESULT GetEstimatedTime ([out, retval] DWORD *pdwEstimatedTime);
};

[object, uuid (2017cb03-dc0f-4c24-83ca-36307b2cd19f), pointer_default (unique)]
interface IESIsdbCasResponseEvent : IESEvent {
  HRESULT GetRequestId ([out, retval] DWORD *pRequestId);
  HRESULT GetStatus ([out, retval] DWORD *pStatus);
  HRESULT GetDataLength ([out, retval] DWORD *pRequestLength);
  HRESULT GetResponseData ([out, retval] SAFEARRAY (BYTE) *pbData);
};

[object, uuid (907e0b5c-E42D-4f04-91f0-26f401f36907), pointer_default (unique)]
interface IGpnvsCommonBase : IUnknown {
  HRESULT GetValueUpdateName ([out, retval] BSTR *pbstrName);
};

[object, uuid (506a09b8-7f86-4e04-AC05-3303bfe8fc49), pointer_default (unique)]
interface IESEventFactory : IUnknown {
  HRESULT CreateESEvent ([in] IUnknown *pServiceProvider,[in] DWORD dwEventId,[in] GUID guidEventType,[in] DWORD dwEventDataLength,[in, size_is (dwEventDataLength)] BYTE *pEventData,[in] BSTR bstrBaseUrl,[in] IUnknown *pInitContext,[out, retval] IESEvent **ppESEvent);
};

[object, uuid (d5a48ef5-a81b-4df0-acaa-5e35e7ea45d4), pointer_default (unique)]
interface IESLicenseRenewalResultEvent : IESEvent {
  HRESULT GetCallersId ([out, retval] DWORD *pdwCallersId);
  HRESULT GetFileName ([out, retval] BSTR *pbstrFilename);
  HRESULT IsRenewalSuccessful ([out, retval] WINBOOL *pfRenewalSuccessful);
  HRESULT IsCheckEntitlementCallRequired ([out, retval] WINBOOL *pfCheckEntTokenCallNeeded);
  HRESULT GetDescrambledStatus ([out, retval] DWORD *pDescrambledStatus);
  HRESULT GetRenewalResultCode ([out, retval] DWORD *pdwRenewalResultCode);
  HRESULT GetCASFailureCode ([out, retval] DWORD *pdwCASFailureCode);
  HRESULT GetRenewalHResult ([out, retval] HRESULT *phr);
  HRESULT GetEntitlementTokenLength ([out, retval] DWORD *pdwLength);
  HRESULT GetEntitlementToken ([out, retval] SAFEARRAY (BYTE) *pbData);
  HRESULT GetExpiryDate ([out, retval] DWORD64 *pqwExpiryDate);
};

[object, uuid (BA9EDCB6-4d36-4cfe-8c56-87a6b0ca48e1), pointer_default (unique)]
interface IESFileExpiryDateEvent : IESEvent {
  HRESULT GetTunerId ([out, retval] GUID *pguidTunerId);
  HRESULT GetExpiryDate ([out, retval] DWORD64 *pqwExpiryDate);
  HRESULT GetFinalExpiryDate ([out, retval] DWORD64 *pqwExpiryDate);
  HRESULT GetMaxRenewalCount ([out, retval] DWORD *dwMaxRenewalCount);
  HRESULT IsEntitlementTokenPresent ([out, retval] WINBOOL *pfEntTokenPresent);
  HRESULT DoesExpireAfterFirstUse ([out, retval] WINBOOL *pfExpireAfterFirstUse);
};

[object, uuid (ABD414BF-CFE5-4e5e-AF5B-4b4e49c5bfeb), pointer_default (unique)]
interface IESEvents : IUnknown {
  HRESULT OnESEventReceived ([in] GUID guidEventType,[in] IESEvent *pESEvent);
};

[object, uuid (ED89A619-4c06-4b2f-99eb-C7669B13047C), pointer_default (unique)]
interface IESEventService: IUnknown {
  HRESULT FireESEvent (IESEvent *pESEvent);
};

[object, hidden, nonextensible, uuid (33b9daae-9309-491d-A051-BCAD2A70CD66), pointer_default (unique)]
interface IESEventServiceConfiguration: IUnknown {
  HRESULT SetParent (IESEventService *pEventService);
  HRESULT RemoveParent ();
  HRESULT SetOwner (IESEvents *pESEvents);
  HRESULT RemoveOwner ();
  HRESULT SetGraph (IFilterGraph *pGraph);
  HRESULT RemoveGraph (IFilterGraph *pGraph);
};

[object, hidden, nonextensible, uuid (3b21263f-26e8-489d-AAC4-924f7efd9511), pointer_default (unique)]
interface IBroadcastEvent : IUnknown {
  HRESULT Fire ([in] GUID EventID);
};

[object, hidden, nonextensible, uuid (3d9e3887-1929-423f-8021-43682de95448), pointer_default (unique)]
interface IBroadcastEventEx : IBroadcastEvent {
  HRESULT FireEx ([in] GUID EventID,[in] ULONG Param1,[in] ULONG Param2,[in] ULONG Param3,[in] ULONG Param4);
};

[object, hidden, nonextensible, uuid (359b3901-572c-4854-BB49-CDEF66606A25), pointer_default (unique)]
interface IRegisterTuner : IUnknown {
  HRESULT Register ([in] ITuner *pTuner,[in] IGraphBuilder *pGraph);
  HRESULT Unregister ();
};

[object, hidden, nonextensible, uuid (B34505E0-2f0e-497b-80bc-D43F3B24ED7F), pointer_default (unique)]
interface IBDAComparable : IUnknown {
  HRESULT CompareExact ([in] IDispatch *CompareTo,[out, retval] long *Result);
  HRESULT CompareEquivalent ([in] IDispatch *CompareTo,[in] DWORD dwFlags,[out, retval] long *Result);
  HRESULT HashExact ([out, retval] __int64 *Result);
  HRESULT HashExactIncremental ([in] __int64 PartialResult,[out, retval] __int64 *Result);
  HRESULT HashEquivalent ([in] DWORD dwFlags,[out, retval] __int64 *Result);
  HRESULT HashEquivalentIncremental ([in] __int64 PartialResult,[in] DWORD dwFlags,[out, retval] __int64 *Result);
};

[object, uuid (0754cd31-8d15-47a9-8215-D20064157244), pointer_default (unique)]
interface IPersistTuneXml : IPersist {
  HRESULT InitNew ();
  HRESULT Load ([in] VARIANT varValue);
  HRESULT Save ([out] VARIANT *pvarFragment);
};

[object, hidden, nonextensible, uuid (990237ae-AC11-4614-BE8F-DD217A4CB4CB), pointer_default (unique)]
interface IPersistTuneXmlUtility : IUnknown {
  HRESULT Deserialize ([in] VARIANT varValue,[out, retval] IUnknown **ppObject);
};

[object, hidden, nonextensible, uuid (992e165f-EA24-4b2f-9a1d-009d92120451), pointer_default (unique)]
interface IPersistTuneXmlUtility2 : IPersistTuneXmlUtility {
  HRESULT Serialize ([in] ITuneRequest *piTuneRequest,[out, retval] BSTR *pString);
};

[object, uuid (C0A4A1D4-2b3c-491a-BA22-499fbadd4d12), pointer_default (unique)]
interface IBDACreateTuneRequestEx : IUnknown {
  HRESULT CreateTuneRequestEx ([in] REFCLSID TuneRequestIID,[out, retval] ITuneRequest **TuneRequest);
};

[uuid (9b085638-018e-11d3-9d8e-00c04f72d980), version (1.0)]
library TunerLib {
  importlib ("stdole2.tlb");

  [uuid (D02AAC50-027e-11d3-9d8e-00c04f72d980)]
  coclass SystemTuningSpaces {
    [default] interface ITuningSpaceContainer;
  };

// FIXME: workaround widl bug, should be fixed in widl
#define restricted

  [noncreatable, hidden, restricted, uuid (5ffdc5e6-B83A-4b55-B6E8-C69E765FE9DB)]
  coclass TuningSpace {
    [default] interface ITuningSpace;
    interface IBDAComparable;
  };

  [uuid (CC829A2F-3365-463f-AF13-81dbb6f3a555)]
  coclass ChannelIDTuningSpace {
    [default] interface ITuningSpace;
    interface IBDAComparable;
    interface IBDACreateTuneRequestEx;
  };

  [uuid (A2E30750-6c3d-11d3-B653-00c04f79498e)]
  coclass ATSCTuningSpace {
    [default] interface IATSCTuningSpace;
    interface IBDAComparable;
  };

  [uuid (D9BB4CEE-B87A-47f1-AC92-B08D9C7813FC)]
  coclass DigitalCableTuningSpace {
    [default] interface IDigitalCableTuningSpace;
    interface IBDAComparable;
  };

  [uuid (8a674b4c-1f63-11d3-b64c-00c04f79498e)]
  coclass AnalogRadioTuningSpace {
    [default] interface IAnalogRadioTuningSpace2;
    interface IAnalogRadioTuningSpace;
    interface IBDAComparable;
  };

  [uuid (F9769A06-7aca-4e39-9cfb-97bb35f0e77e)]
  coclass AuxInTuningSpace {
    interface IAuxInTuningSpace;
    [default] interface IAuxInTuningSpace2;
    interface IBDAComparable;
  };

  [uuid (8a674b4d-1f63-11d3-b64c-00c04f79498e)]
  coclass AnalogTVTuningSpace {
    [default] interface IAnalogTVTuningSpace;
    interface IBDAComparable;
  };

  [uuid (C6B14B32-76aa-4a86-A7AC-5c79aaf58da7)]
  coclass DVBTuningSpace {
    [default] interface IDVBTuningSpace2;
    interface IDVBTuningSpace;
    interface IBDAComparable;
  };

  [uuid (B64016F3-C9A2-4066-96f0-BD9563314726)]
  coclass DVBSTuningSpace {
    [default] interface IDVBSTuningSpace;
    interface IBDAComparable;
  };

  [uuid (A1A2B1C4-0e3a-11d3-9d8e-00c04f72d980)]
  coclass ComponentTypes {
    [default] interface IComponentTypes;
  };

  [uuid (823535a0-0318-11d3-9d8e-00c04f72d980)]
  coclass ComponentType {
    [default] interface IComponentType;
  };

  [uuid (1be49f30-0e1b-11d3-9d8e-00c04f72d980)]
  coclass LanguageComponentType {
    [default] interface ILanguageComponentType;
  };

  [uuid (418008f3-CF67-4668-9628-10dc52be1d08)]
  coclass MPEG2ComponentType {
    [default] interface IMPEG2ComponentType;
  };

  [uuid (A8DCF3D5-0780-4ef4-8a83-2cffaacb8ace)]
  coclass ATSCComponentType {
    [default] interface IATSCComponentType;
  };

  [hidden, restricted, uuid (809b6661-94c4-49e6-B6EC-3f0f862215aa)]
  coclass Components {
    [default] interface IComponents;
    interface IComponentsOld;
  };

  [hidden, restricted, uuid (59dc47a8-116c-11d3-9d8e-00c04f72d980)]
  coclass Component {
    [default] interface IComponent;
  };

  [hidden, restricted, uuid (055cb2d7-2969-45cd-914b-76890722f112)]
  coclass MPEG2Component {
    [default] interface IMPEG2Component;
  };

  [hidden, restricted, uuid (28ab0005-E845-4ffa-AA9B-F4665236141C)]
  coclass AnalogAudioComponentType {
    [default] interface IAnalogAudioComponentType;
  };

  [noncreatable, hidden, restricted, uuid (B46E0D38-AB35-4a06-A137-70576b01b39f)]
  coclass TuneRequest {
    [default] interface ITuneRequest;
    interface IBDAComparable;
  };

  [hidden, restricted, uuid (3a9428a7-31a4-45e9-9efb-E055BF7BB3DB)]
  coclass ChannelIDTuneRequest {
    [default] interface IChannelIDTuneRequest;
    interface IBDAComparable;
  };

  [hidden, restricted, uuid (0369b4e5-45b6-11d3-B650-00c04f79498e)]
  coclass ChannelTuneRequest {
    [default] interface IChannelTuneRequest;
    interface IBDAComparable;
  };

  [hidden, restricted, uuid (0369b4e6-45b6-11d3-B650-00c04f79498e)]
  coclass ATSCChannelTuneRequest {
    [default] interface IATSCChannelTuneRequest;
    interface IBDAComparable;
  };

  [hidden, restricted, uuid (26ec0b63-AA90-458a-8df4-5659f2c8a18a)]
  coclass DigitalCableTuneRequest {
    [default] interface IDigitalCableTuneRequest;
    interface IBDAComparable;
  };

  [hidden, restricted, uuid (0955ac62-BF2E-4cba-A2B9-A63F772D46CF)]
  coclass MPEG2TuneRequest {
    [default] interface IMPEG2TuneRequest;
    interface IBDAComparable;
  };

  [uuid (2c63e4eb-4cea-41b8-919c-E947EA19A77C)]
  coclass MPEG2TuneRequestFactory {
    [default] interface IMPEG2TuneRequestFactory;
  };

  [noncreatable, hidden, restricted, uuid (0888c883-AC4F-4943-B516-2c38d9b34562)]
  coclass Locator {
    [default] interface ILocator;
    interface IBDAComparable;
  };

  [noncreatable, hidden, restricted, uuid (6e50cc0d-C19B-4bf6-810b-5bd60761f5cc)]
  coclass DigitalLocator {
    [default] interface IDigitalLocator;
    interface IBDAComparable;
  };

  [uuid (49638b91-48ab-48b7-A47A-7d0e75a08ede)]
  coclass AnalogLocator {
    [default] interface IAnalogLocator;
    interface IBDAComparable;
  };

  [uuid (8872ff1b-98fa-4d7a-8d93-C9F1055F85BB)]
  coclass ATSCLocator {
    [default] interface IATSCLocator2;
    interface IATSCLocator;
    interface IBDAComparable;
  };

  [uuid (03c06416-D127-407a-AB4C-FDD279ABBE5D)]
  coclass DigitalCableLocator {
    [default] interface IDigitalCableLocator;
    interface IBDAComparable;
  };

  [uuid (9cd64701-BDF3-4d14-8e03-F12983D86664)]
  coclass DVBTLocator {
    [default] interface IDVBTLocator;
    interface IBDAComparable;
  };

  [uuid (EFE3FA02-45d7-4920-BE96-53fa7f35b0e6)]
  coclass DVBTLocator2 {
    [default] interface IDVBTLocator2;
    interface IDVBTLocator;
    interface IBDAComparable;
  };

  [uuid (1df7d126-4050-47f0-A7CF-4c4ca9241333)]
  coclass DVBSLocator {
    [default] interface IDVBSLocator2;
    interface IDVBSLocator;
    interface IBDAComparable;
  };

  [uuid (C531D9FD-9685-4028-8b68-6e1232079f1e)]
  coclass DVBCLocator {
    [default] interface IDVBCLocator;
    interface IBDAComparable;
  };

  [uuid (6504afed-A629-455c-A7F1-04964dea5cc4)]
  coclass ISDBSLocator {
    [default] interface IISDBSLocator;
    interface IDVBSLocator;
    interface IBDAComparable;
  };

  [hidden, restricted, uuid (15d6504a-5494-499c-886c-973c9e53b9f1)]
  coclass DVBTuneRequest {
    [default] interface IDVBTuneRequest;
    interface IBDAComparable;
  };

  [hidden, restricted, uuid (8a674b49-1f63-11d3-b64c-00c04f79498e)]
  coclass CreatePropBagOnRegKey {
    interface ICreatePropBagOnRegKey;
  };

  [hidden, restricted, uuid (0b3ffb92-0919-4934-9d5b-619c719d0202)]
  coclass BroadcastEventService {
    interface IBroadcastEvent;
  };

  [hidden, restricted, uuid (6438570b-0c08-4a25-9504-8012bb4d50cf)]
  coclass TunerMarshaler {
    interface IRegisterTuner;
    interface ITuner;
  };

  [uuid (e77026b0-B97F-4cbb-b7Fb-f4f03ad69f11)]
  coclass PersistTuneXmlUtility {
    interface IPersistTuneXmlUtility;
    interface IPersistTuneXmlUtility2;
  };

  [uuid (c20447fc-ec60-475e-813f-d2b0a6decefe)]
  coclass ESEventService {
    [default] interface IESEventService;
    [source] interface IESEvents;
  };

  [uuid (8e8a07da-71f8-40c1-a929-5e3a868ac2c6)]
  coclass ESEventFactory {
    [default] interface IESEventFactory;
    interface IMarshal2;
  };
}

cpp_quote("#endif")
