361 lines
12 KiB
C++
361 lines
12 KiB
C++
// MSVidCtl.cpp : Implementation of DLL Exports.
|
|
|
|
#include "stdafx.h"
|
|
|
|
#if 0
|
|
#ifndef TUNING_MODEL_ONLY
|
|
#include "Devices.h"
|
|
#ifndef _WIN64
|
|
#include "bdatuner.h"
|
|
#include "MSVidTVTuner.h"
|
|
#include "MSVidVideoRenderer.h"
|
|
#include "MSVidAudioRenderer.h"
|
|
#include "MSVidFilePlayback.h"
|
|
#include "MSVidSBESource.h"
|
|
#include "MSVidWebDVD.h"
|
|
#include "MSVidDVDAdm.h"
|
|
#include "seg.h" /// ??? Does this go here or above the _WIN64 ??? (jb 8/31)
|
|
#include "closedcaptioning.h"
|
|
#include "Composition.h"
|
|
#include "vidprot.h"
|
|
#include "anacap.h"
|
|
#include "anadata.h"
|
|
#include "MSViddataservices.h"
|
|
#include "WebDVDComp.h"
|
|
#include "WebDVDARComp.h"
|
|
#include "mp2cc.h"
|
|
#include "fp2vr.h"
|
|
#include "fp2ar.h"
|
|
#include "enc2sin.h"
|
|
#include "dat2sin.h"
|
|
#include "dat2xds.h"
|
|
#include "ana2xds.h"
|
|
#include "ana2enc.h"
|
|
#include "sbes2cc.h"
|
|
#include "sbes2vrm.h"
|
|
#include "VidCtl.h"
|
|
#include "msvidencoder.h"
|
|
|
|
#endif //_WIN64
|
|
|
|
#include "topwin.h"
|
|
#include "msvidStreamBufferrecorder.h"
|
|
#include "cmseventbinder.h"
|
|
#endif //TUNING_MODEL_ONLY
|
|
|
|
#include "createregbag.h"
|
|
#include "TuningSpaceContainer.h"
|
|
#include "ATSCTS.h"
|
|
#include "AnalogTVTS.h"
|
|
#include "AuxiliaryInTs.h"
|
|
#include "AnalogRadioTS.h"
|
|
#include "DVBTS.h"
|
|
#include "DVBSTS.h"
|
|
#include "Component.h"
|
|
#include "Components.h"
|
|
#include "ComponentTypes.h"
|
|
#include "ComponentType.h"
|
|
#include "LanguageComponentType.h"
|
|
#include "MPEG2ComponentType.h"
|
|
#include "ATSCComponentType.h"
|
|
#include "MPEG2Component.h"
|
|
#include "channeltunerequest.h"
|
|
#include "atscchanneltunerequest.h"
|
|
#include "atsclocator.h"
|
|
#include "dvbtlocator.h"
|
|
#include "dvbslocator.h"
|
|
#include "dvbtunerequest.h"
|
|
|
|
#else
|
|
#ifndef TUNING_MODEL_ONLY
|
|
#include "Devices.h"
|
|
#include "seg.h"
|
|
#endif //TUNING_MODEL_ONLY
|
|
#include "TuningSpaceContainer.h"
|
|
|
|
#endif
|
|
#include "dlldatax.h"
|
|
CComModule _Module;
|
|
|
|
#ifndef TUNING_MODEL_ONLY
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CVidCtl)
|
|
// typesafe device collections
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CInputDevices)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(COutputDevices)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CVideoRendererDevices)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CAudioRendererDevices)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CFeatures)
|
|
// device segments
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSVidBDATuner)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSVidTVTuner)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSVidVideoRenderer)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSVidAudioRenderer)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSVidFilePlayback)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSVidWebDVD)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CClosedCaptioning)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSVidStreamBufferSink)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSVidStreamBufferSource)
|
|
// feature segments
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CDataServices)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CEncoder)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CXDS)
|
|
//DECLARE_EXTERN_OBJECT_ENTRY(CMSVidTVEGSeg)
|
|
//DECLARE_EXTERN_OBJECT_ENTRY(CMSVidCAGSeg)
|
|
// composition segments
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CComposition)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CAnaCapComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CAnaDataComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CWebDVDComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CWebDVDARComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMP2CCComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CAnaSinComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMP2SinComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CFP2VRComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CFP2ARComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CEnc2SinComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CDat2XDSComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CDat2SinComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CAna2XDSComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CAna2EncComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CSbeS2CCComp)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CSbeS2VmrComp)
|
|
// pluggable protocols
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CTVProt)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CDVDProt)
|
|
// utility objects
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSVidWebDVDAdm)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSEventBinder)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSVidRect)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMSVidStreamBufferRecordingControl)
|
|
#endif
|
|
// utility objects
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CCreateRegBag)
|
|
// tuning model objects
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CSystemTuningSpaces)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CATSCTS)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CAnalogTVTS)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CAuxInTS)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CAnalogRadioTS)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CDVBTS)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CDVBSTS)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CChannelTuneRequest)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CATSCChannelTuneRequest)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CDVBTuneRequest)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMPEG2TuneRequest)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CComponent)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMPEG2Component)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CComponentTypes)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CComponentType)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CLanguageComponentType)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMPEG2ComponentType)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CATSCComponentType)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CATSCLocator)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CDVBTLocator)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CDVBSLocator)
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CMPEG2TuneRequestFactory)
|
|
#ifndef TUNING_MODEL_ONLY
|
|
DECLARE_EXTERN_OBJECT_ENTRY(CBroadcastEventService)
|
|
#endif
|
|
|
|
BEGIN_EXTERN_OBJECT_MAP(ObjectMap)
|
|
|
|
#ifndef TUNING_MODEL_ONLY
|
|
// primary control
|
|
EXTERN_OBJECT_ENTRY(CVidCtl)
|
|
// typesafe device collections
|
|
EXTERN_OBJECT_ENTRY(CInputDevices)
|
|
EXTERN_OBJECT_ENTRY(COutputDevices)
|
|
EXTERN_OBJECT_ENTRY(CVideoRendererDevices)
|
|
EXTERN_OBJECT_ENTRY(CAudioRendererDevices)
|
|
EXTERN_OBJECT_ENTRY(CFeatures)
|
|
// device segments
|
|
EXTERN_OBJECT_ENTRY(CMSVidBDATuner)
|
|
EXTERN_OBJECT_ENTRY(CMSVidTVTuner)
|
|
EXTERN_OBJECT_ENTRY(CMSVidVideoRenderer)
|
|
EXTERN_OBJECT_ENTRY(CMSVidAudioRenderer)
|
|
EXTERN_OBJECT_ENTRY(CMSVidFilePlayback)
|
|
EXTERN_OBJECT_ENTRY(CMSVidWebDVD)
|
|
EXTERN_OBJECT_ENTRY(CClosedCaptioning)
|
|
EXTERN_OBJECT_ENTRY(CMSVidStreamBufferSink)
|
|
EXTERN_OBJECT_ENTRY(CMSVidStreamBufferSource)
|
|
// feature segments
|
|
EXTERN_OBJECT_ENTRY(CDataServices)
|
|
EXTERN_OBJECT_ENTRY(CEncoder)
|
|
EXTERN_OBJECT_ENTRY(CXDS)
|
|
//EXTERN_OBJECT_ENTRY(CMSVidCAGSeg)
|
|
//EXTERN_OBJECT_ENTRY(CMSVidTVEGSeg)
|
|
// composition segments
|
|
EXTERN_OBJECT_ENTRY(CComposition)
|
|
EXTERN_OBJECT_ENTRY(CAnaCapComp)
|
|
EXTERN_OBJECT_ENTRY(CAnaDataComp)
|
|
EXTERN_OBJECT_ENTRY(CWebDVDComp)
|
|
EXTERN_OBJECT_ENTRY(CWebDVDARComp)
|
|
EXTERN_OBJECT_ENTRY(CMP2CCComp)
|
|
EXTERN_OBJECT_ENTRY(CAnaSinComp)
|
|
EXTERN_OBJECT_ENTRY(CMP2SinComp)
|
|
EXTERN_OBJECT_ENTRY(CFP2VRComp)
|
|
EXTERN_OBJECT_ENTRY(CFP2ARComp)
|
|
EXTERN_OBJECT_ENTRY(CEnc2SinComp)
|
|
EXTERN_OBJECT_ENTRY(CDat2XDSComp)
|
|
EXTERN_OBJECT_ENTRY(CDat2SinComp)
|
|
EXTERN_OBJECT_ENTRY(CAna2XDSComp)
|
|
EXTERN_OBJECT_ENTRY(CAna2EncComp)
|
|
EXTERN_OBJECT_ENTRY(CSbeS2CCComp)
|
|
EXTERN_OBJECT_ENTRY(CSbeS2VmrComp)
|
|
// pluggable protocols
|
|
EXTERN_OBJECT_ENTRY(CTVProt)
|
|
EXTERN_OBJECT_ENTRY(CDVDProt)
|
|
// utility objects
|
|
EXTERN_OBJECT_ENTRY(CMSVidWebDVDAdm)
|
|
EXTERN_OBJECT_ENTRY(CMSEventBinder)
|
|
EXTERN_OBJECT_ENTRY(CMSVidStreamBufferRecordingControl)
|
|
#endif
|
|
// utility objects
|
|
EXTERN_OBJECT_ENTRY(CCreateRegBag)
|
|
// tuning model objects
|
|
EXTERN_OBJECT_ENTRY(CSystemTuningSpaces)
|
|
EXTERN_OBJECT_ENTRY(CATSCTS)
|
|
EXTERN_OBJECT_ENTRY(CAnalogTVTS)
|
|
EXTERN_OBJECT_ENTRY(CAuxInTS)
|
|
EXTERN_OBJECT_ENTRY(CAnalogRadioTS)
|
|
EXTERN_OBJECT_ENTRY(CDVBTS)
|
|
EXTERN_OBJECT_ENTRY(CDVBSTS)
|
|
EXTERN_OBJECT_ENTRY(CChannelTuneRequest)
|
|
EXTERN_OBJECT_ENTRY(CATSCChannelTuneRequest)
|
|
EXTERN_OBJECT_ENTRY(CDVBTuneRequest)
|
|
EXTERN_OBJECT_ENTRY(CMPEG2TuneRequest)
|
|
EXTERN_OBJECT_ENTRY(CComponent)
|
|
EXTERN_OBJECT_ENTRY(CMPEG2Component)
|
|
EXTERN_OBJECT_ENTRY(CComponentTypes)
|
|
EXTERN_OBJECT_ENTRY(CComponentType)
|
|
EXTERN_OBJECT_ENTRY(CLanguageComponentType)
|
|
EXTERN_OBJECT_ENTRY(CMPEG2ComponentType)
|
|
EXTERN_OBJECT_ENTRY(CATSCComponentType)
|
|
EXTERN_OBJECT_ENTRY(CATSCLocator)
|
|
EXTERN_OBJECT_ENTRY(CDVBTLocator)
|
|
EXTERN_OBJECT_ENTRY(CDVBSLocator)
|
|
EXTERN_OBJECT_ENTRY(CMPEG2TuneRequestFactory)
|
|
#ifndef TUNING_MODEL_ONLY
|
|
EXTERN_OBJECT_ENTRY(CBroadcastEventService)
|
|
#endif
|
|
END_EXTERN_OBJECT_MAP()
|
|
|
|
using namespace BDATuningModel;
|
|
#ifndef TUNING_MODEL_ONLY
|
|
using namespace MSVideoControl;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// DLL Entry Point
|
|
extern "C"
|
|
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
|
|
{
|
|
lpReserved;
|
|
if (dwReason == DLL_PROCESS_ATTACH)
|
|
{
|
|
#ifdef _DEBUG
|
|
// Turn on leak-checking bit
|
|
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
|
|
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
|
|
_CrtSetDbgFlag( tmpFlag );
|
|
#endif
|
|
|
|
INTERNALIZE_OBJMAP(ObjectMap);
|
|
_Module.Init(ObjectMap, hInstance, &LIBID_MSVidCtlLib);
|
|
DisableThreadLibraryCalls(hInstance);
|
|
#ifndef TUNING_MODEL_ONLY
|
|
// work around compiler bug where static member intializer's not being ctord
|
|
#ifdef DEBUG
|
|
CString csModuleName;
|
|
csModuleName.LoadString(IDS_PROJNAME);
|
|
DebugInit(csModuleName);
|
|
#endif
|
|
CtorStaticDSExtendFwdSeqPMFs();
|
|
CtorStaticVWSegmentFwdSeqPMFs();
|
|
CtorStaticVWDevicesFwdSeqPMFs();
|
|
#endif
|
|
} else if (dwReason == DLL_PROCESS_DETACH) {
|
|
#ifndef TUNING_MODEL_ONLY
|
|
// work around compiler bug where static member intializer's not being ctord
|
|
DtorStaticDSExtendFwdSeqPMFs();
|
|
DtorStaticVWSegmentFwdSeqPMFs();
|
|
DtorStaticVWDevicesFwdSeqPMFs();
|
|
#ifdef DEBUG
|
|
DebugTerm();
|
|
#endif
|
|
#endif
|
|
_Module.Term();
|
|
DESTROY_OBJMAP(ObjectMap);
|
|
}
|
|
if (!PrxDllMain(hInstance, dwReason, lpReserved))
|
|
return FALSE;
|
|
return TRUE; // ok
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Used to determine whether the DLL can be unloaded by OLE
|
|
|
|
STDAPI DllCanUnloadNow(void)
|
|
{
|
|
if (PrxDllCanUnloadNow() != S_OK)
|
|
return S_FALSE;
|
|
return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Returns a class factory to create an object of the requested type
|
|
|
|
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
|
|
{
|
|
if (PrxDllGetClassObject(rclsid, riid, ppv) == S_OK)
|
|
return S_OK;
|
|
return _Module.GetClassObject(rclsid, riid, ppv);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// DllRegisterServer - Adds entries to the system registry
|
|
|
|
STDAPI DllRegisterServer(void)
|
|
{
|
|
#ifndef TUNING_MODEL_ONLY
|
|
// register secondary .tlb(s)
|
|
HRESULT hr = AtlModuleRegisterTypeLib(&_Module, OLESTR("\\2")); // tuner.tlb
|
|
if (SUCCEEDED(hr)) {
|
|
#else
|
|
HRESULT hr;
|
|
#endif
|
|
// registers object, typelib and all interfaces in typelib
|
|
hr = _Module.RegisterServer(TRUE);
|
|
if (SUCCEEDED(hr)) {
|
|
hr = PrxDllRegisterServer();
|
|
if (SUCCEEDED(hr)) {
|
|
#ifdef REGISTER_CANONICAL_TUNING_SPACES
|
|
hr = RegisterTuningSpaces(_Module.GetModuleInstance());// uses objects in this .dll must be done after any other registering
|
|
#endif
|
|
}
|
|
}
|
|
#ifndef TUNING_MODEL_ONLY
|
|
}
|
|
#endif
|
|
return hr;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// DllUnregisterServer - Removes entries from the system registry
|
|
|
|
STDAPI DllUnregisterServer(void)
|
|
{
|
|
#ifdef REGISTER_CANONICAL_TUNING_SPACES
|
|
// ignore rc and unreg everything we can
|
|
UnregisterTuningSpaces(); // uses objects in this .dll must be done before any other unregistering
|
|
#endif
|
|
PrxDllUnregisterServer();
|
|
#ifndef TUNING_MODEL_ONLY
|
|
AtlModuleUnRegisterTypeLib(&_Module, OLESTR("\\2")); // tuner.tlb
|
|
#endif
|
|
_Module.UnregisterServer(TRUE);
|
|
|
|
return NOERROR;
|
|
}
|
|
// end of file - msvidctl.cpp
|