windows-nt/Source/XPSP1/NT/multimedia/dshow/vidctl/msvidctl/bdatuner.h
2020-09-26 16:20:57 +08:00

142 lines
4.2 KiB
C++

//==========================================================================;
// MSVidBDATuner.h : Declaration of the CMSVidBDATuner
// copyright (c) Microsoft Corp. 1998-1999.
/////////////////////////////////////////////////////////////////////////////
#pragma once
#ifndef __MSVidBDATUNER_H_
#define __MSVidBDATUNER_H_
#include <algorithm>
#include <tchar.h>
#include <bdamedia.h>
#include <objectwithsiteimplsec.h>
#include "bcasteventimpl.h"
#include "segimpl.h"
#include "tunerimpl.h"
#include "seg.h"
typedef CComQIPtr<ITuner> PQTuner;
/////////////////////////////////////////////////////////////////////////////
// CMSVidBDATuner
class ATL_NO_VTABLE __declspec(uuid("A2E3074E-6C3D-11d3-B653-00C04F79498E")) CMSVidBDATuner :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMSVidBDATuner, &__uuidof(CMSVidBDATuner)>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CMSVidBDATuner>,
public CProxy_Tuner<CMSVidBDATuner>,
public IBroadcastEventImpl<CMSVidBDATuner>,
public IObjectWithSiteImplSec<CMSVidBDATuner>,
public IMSVidGraphSegmentImpl<CMSVidBDATuner, MSVidSEG_SOURCE, &KSCATEGORY_BDA_RECEIVER_COMPONENT>,
public IMSVidTunerImpl<CMSVidBDATuner, &LIBID_MSVidCtlLib, &KSCATEGORY_BDA_RECEIVER_COMPONENT, IMSVidTuner>,
public IProvideClassInfo2Impl<&CLSID_MSVidBDATunerDevice, &IID_IMSVidTunerEvent, &LIBID_MSVidCtlLib>
{
public:
CMSVidBDATuner() : m_iNetworkProvider(-1), m_iTuner(-1), m_iTIF(-1) {
}
REGISTER_AUTOMATION_OBJECT(IDS_PROJNAME,
IDS_REG_BDATUNER_PROGID,
IDS_REG_BDATUNER_DESC,
LIBID_MSVidCtlLib,
__uuidof(CMSVidBDATuner));
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CMSVidBDATuner)
COM_INTERFACE_ENTRY(IMSVidGraphSegment)
COM_INTERFACE_ENTRY(IMSVidTuner)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IMSVidDevice)
COM_INTERFACE_ENTRY(IMSVidInputDevice)
COM_INTERFACE_ENTRY(IMSVidVideoInputDevice)
COM_INTERFACE_ENTRY(IObjectWithSite)
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(CMSVidBDATuner)
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
IMPLEMENTED_CATEGORY(CATID_PersistsToPropertyBag)
END_CATEGORY_MAP()
BEGIN_CONNECTION_POINT_MAP(CMSVidBDATuner)
CONNECTION_POINT_ENTRY(IID_IMSVidTunerEvent)
END_CONNECTION_POINT_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
public:
PQCreateDevEnum m_pSystemEnum;
int m_iNetworkProvider;
int m_iTuner;
int m_iTIF;
virtual HRESULT DoTune(TNTuneRequest &ctr);
virtual HRESULT UpdateTR(TNTuneRequest& pTR);
HRESULT Unload(void);
HRESULT LoadTunerSection(DSFilter& np, const GUID& kscategory);
// IMSVidGraphSegment
STDMETHOD(put_Init)(IUnknown *pDeviceMoniker)
{
if (!pDeviceMoniker) {
return E_POINTER;
}
HRESULT hr = IMSVidGraphSegmentImpl<CMSVidBDATuner, MSVidSEG_SOURCE, &KSCATEGORY_BDA_RECEIVER_COMPONENT>::put_Init(pDeviceMoniker);
if (FAILED(hr)) {
return hr;
}
if (!m_pDev) {
m_fInit = false;
return E_NOINTERFACE;
}
return NOERROR;
}
STDMETHOD(Build)() {
// undone: should we tune here?
return NOERROR;
}
STDMETHOD(PreRun)() {
if (m_pCurrentTR) {
return DoTune(m_pCurrentTR);
}
// undone: do any np initialization.
return NOERROR;
}
STDMETHOD(put_Container)(IMSVidGraphSegmentContainer *pCtl);
// IMSVidDevice
STDMETHOD(get_Name)(BSTR * Name)
{
if (!m_fInit) {
return Error(IDS_OBJ_NO_INIT, __uuidof(CMSVidBDATuner), CO_E_NOTINITIALIZED);
}
try {
return GetName(((m_iNetworkProvider > -1) ? (m_Filters[m_iNetworkProvider]) : DSFilter()), m_pDev, CComBSTR(_T("BDA NetworkProvider"))).CopyTo(Name);
return NOERROR;
} catch(...) {
return E_POINTER;
}
}
// IBroadcastEvent
STDMETHOD(Fire)(GUID gEventID);
};
#endif //__MSVidBDATUNER_H_