144 lines
5.6 KiB
C++
144 lines
5.6 KiB
C++
//==========================================================================;
|
|
// MSVidSBESource.h : Declaration of the CMSVidStreamBufferSource class
|
|
// copyright (c) Microsoft Corp. 1998-1999.
|
|
//==========================================================================;
|
|
|
|
#ifndef __MSVIDSTREAMBUFFERSOURCE_H_
|
|
#define __MSVIDSTREAMBUFFERSOURCE_H_
|
|
|
|
#pragma once
|
|
|
|
#include <algorithm>
|
|
#include <dvdmedia.h>
|
|
#include <objectwithsiteimplsec.h>
|
|
#include <bcasteventimpl.h>
|
|
#include "pbsegimpl.h"
|
|
#include "fileplaybackimpl.h"
|
|
#include "seg.h"
|
|
#include <dvdmedia.h>
|
|
#include "sbesourcecp.h"
|
|
#include "resource.h" // main symbols
|
|
#include "sbe.h"
|
|
|
|
typedef CComQIPtr<IStreamBufferMediaSeeking> PQISBEMSeeking;
|
|
typedef CComQIPtr<IFileSourceFilter> QIFileSource;
|
|
|
|
class ATL_NO_VTABLE __declspec(uuid("AD8E510D-217F-409b-8076-29C5E73B98E8")) CMSVidStreamBufferSource:
|
|
public CComObjectRootEx<CComSingleThreadModel>,
|
|
public CComCoClass<CMSVidStreamBufferSource, &__uuidof(CMSVidStreamBufferSource)>,
|
|
public IObjectWithSiteImplSec<CMSVidStreamBufferSource>,
|
|
public ISupportErrorInfo,
|
|
public IBroadcastEventImpl<CMSVidStreamBufferSource>,
|
|
public IConnectionPointContainerImpl<CMSVidStreamBufferSource>,
|
|
public CProxy_StreamBufferSourceEvent<CMSVidStreamBufferSource>,
|
|
public IMSVidPBGraphSegmentImpl<CMSVidStreamBufferSource, MSVidSEG_SOURCE, &GUID_NULL>,
|
|
public IMSVidFilePlaybackImpl<CMSVidStreamBufferSource, &LIBID_MSVidCtlLib, &GUID_NULL, IMSVidStreamBufferSource>,
|
|
public IProvideClassInfo2Impl<&CLSID_MSVidStreamBufferSource, &IID_IMSVidStreamBufferSourceEvent, &LIBID_MSVidCtlLib>
|
|
{
|
|
public:
|
|
CMSVidStreamBufferSource() : m_dwEventCookie(0) {
|
|
m_fEnableResetOnStop = true;
|
|
}
|
|
virtual ~CMSVidStreamBufferSource() {}
|
|
|
|
REGISTER_AUTOMATION_OBJECT(IDS_PROJNAME,
|
|
IDS_REG_MSVIDSTREAMBUFFERSOURCE_PROGID,
|
|
IDS_REG_MSVIDSTREAMBUFFERSOURCE_DESC,
|
|
LIBID_MSVidCtlLib,
|
|
__uuidof(CMSVidStreamBufferSource));
|
|
|
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
|
|
|
BEGIN_COM_MAP(CMSVidStreamBufferSource)
|
|
COM_INTERFACE_ENTRY(IMSVidStreamBufferSource)
|
|
COM_INTERFACE_ENTRY(IDispatch)
|
|
COM_INTERFACE_ENTRY(IObjectWithSite)
|
|
COM_INTERFACE_ENTRY(IBroadcastEvent)
|
|
COM_INTERFACE_ENTRY(IMSVidGraphSegment)
|
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
|
COM_INTERFACE_ENTRY(IConnectionPointContainer)
|
|
COM_INTERFACE_ENTRY(IMSVidPlayback)
|
|
COM_INTERFACE_ENTRY(IMSVidInputDevice)
|
|
COM_INTERFACE_ENTRY(IMSVidDevice)
|
|
COM_INTERFACE_ENTRY(IPersist)
|
|
COM_INTERFACE_ENTRY(IProvideClassInfo2)
|
|
COM_INTERFACE_ENTRY(IProvideClassInfo)
|
|
END_COM_MAP()
|
|
|
|
BEGIN_CATEGORY_MAP(CMSVidStreamBufferSource)
|
|
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
|
|
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
|
|
IMPLEMENTED_CATEGORY(CATID_PersistsToPropertyBag)
|
|
END_CATEGORY_MAP()
|
|
|
|
BEGIN_CONNECTION_POINT_MAP(CMSVidStreamBufferSource)
|
|
CONNECTION_POINT_ENTRY(IID_IMSVidStreamBufferSourceEvent)
|
|
END_CONNECTION_POINT_MAP()
|
|
|
|
|
|
// ISupportsErrorInfo
|
|
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
|
|
protected:
|
|
QIFileSource m_spFileSource;
|
|
DSFilterList m_decFilters;
|
|
PQBroadcastEvent m_pBcast;
|
|
DWORD m_dwEventCookie;
|
|
public:
|
|
STDMETHOD(PostStop)();
|
|
|
|
// DON'T addref the container. we're guaranteed nested lifetimes
|
|
// and an addref creates circular refcounts so we never unload.
|
|
CComBSTR __declspec(property(get=GetName)) m_Name;
|
|
CComBSTR GetName(void) {
|
|
CString csName;
|
|
if(m_iReader != -1){
|
|
csName = (m_Filters[m_iReader]).GetName();
|
|
}
|
|
if (csName.IsEmpty()) {
|
|
csName = _T("Stream Buffer Source");
|
|
}
|
|
return CComBSTR(csName);
|
|
}
|
|
STDMETHOD(Unload)(void);
|
|
// IMSVidGraphSegment
|
|
STDMETHOD(put_Init)(IUnknown *pInit);
|
|
STDMETHOD(Build)();
|
|
STDMETHOD(put_Container)(IMSVidGraphSegmentContainer *pVal);
|
|
STDMETHOD(OnEventNotify)(long lEvent, LONG_PTR lParam1, LONG_PTR lParam2);
|
|
STDMETHOD(Decompose)();
|
|
// IMSVidDevice
|
|
STDMETHOD(get_Name)(BSTR * Name);
|
|
// IMSVidInputDevice
|
|
STDMETHOD(IsViewable)(VARIANT* pv, VARIANT_BOOL *pfViewable);
|
|
STDMETHOD(View)(VARIANT* pv);
|
|
// IMSVidPlayback
|
|
// IMSVidPlayback
|
|
STDMETHOD(get_RecordingAttribute)(/*[out, retval]*/ IUnknown **pRecordingAttribute);
|
|
STDMETHOD(CurrentRatings)(/*[out, retval]*/ EnTvRat_System *pEnSystem, /*[out, retval]*/ EnTvRat_GenericLevel *pEnRating, /*[out, retval]*/ LONG *plbfEnAttr); //attrs are bitfields of BfEnTvRat_GenericAttributes
|
|
STDMETHOD(MaxRatingsLevel)(/*[in]*/ EnTvRat_System enSystem, /*[in]*/ EnTvRat_GenericLevel enRating, /*[in]*/ LONG lbfEnAttr);
|
|
|
|
|
|
STDMETHOD(put_BlockUnrated)(/*[in]*/ VARIANT_BOOL bBlock);
|
|
STDMETHOD(put_UnratedDelay)(/*[in]*/ long dwDelay);
|
|
|
|
STDMETHOD(get_Start)(/*[out, retval]*/long *lStart);
|
|
///////////////////////////////////////////////////////////////////////////////////////////
|
|
// IMSVidPlaybackimpl
|
|
///////////////////////////////////////////////////////////////////////////////////////////
|
|
STDMETHOD(get_Length)(/*[out, retval]*/long *lLength);
|
|
STDMETHOD(get_CurrentPosition)(/*[out,retval]*/long *lPosition);
|
|
STDMETHOD(put_CurrentPosition)(/*[in]*/long lPosition);
|
|
STDMETHOD(put_PositionMode)(/*[in]*/PositionModeList lPositionMode);
|
|
STDMETHOD(get_PositionMode)(/*[out,retval]*/PositionModeList* lPositionMode);
|
|
STDMETHOD(put_Rate)(double lRate);
|
|
STDMETHOD(get_Rate)(double *plRate);
|
|
STDMETHOD(get_CanStep)(VARIANT_BOOL fBackwards, VARIANT_BOOL *pfCan);
|
|
STDMETHOD(Step)(long lStep);
|
|
STDMETHOD(PreRun)();
|
|
// IBroadcastEvent
|
|
STDMETHOD(Fire)(GUID gEventID);
|
|
STDMETHOD(get_SBESource)(/*[out, retval]*/ IUnknown **sbeFilter);
|
|
};
|
|
|
|
#endif
|