|
|
//==========================================================================;
// MSVidFilePlayback.h : Declaration of the CMSVidFilePlayback class
// copyright (c) Microsoft Corp. 1998-1999.
//==========================================================================;
#ifndef __MSVidFILEPLAYBACK_H_
#define __MSVidFILEPLAYBACK_H_
#pragma once
#include <algorithm>
#include <objectwithsiteimplsec.h>
#include "pbsegimpl.h"
#include "fileplaybackimpl.h"
#include "fileplaybackcp.h"
#include "seg.h"
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// CMSVidFilePlayback
class ATL_NO_VTABLE __declspec(uuid("37B0353C-A4C8-11d2-B634-00C04F79498E")) CMSVidFilePlayback : public CComObjectRootEx<CComSingleThreadModel>, public CComCoClass<CMSVidFilePlayback, &__uuidof(CMSVidFilePlayback)>, public IObjectWithSiteImplSec<CMSVidFilePlayback>, public ISupportErrorInfo, public IConnectionPointContainerImpl<CMSVidFilePlayback>, public CProxy_FilePlaybackEvent<CMSVidFilePlayback>, public IMSVidPBGraphSegmentImpl<CMSVidFilePlayback, MSVidSEG_SOURCE, &GUID_NULL>, public IMSVidFilePlaybackImpl<CMSVidFilePlayback, &LIBID_MSVidCtlLib, &GUID_NULL, IMSVidFilePlayback>, public IProvideClassInfo2Impl<&CLSID_MSVidFilePlaybackDevice, &IID_IMSVidFilePlaybackEvent, &LIBID_MSVidCtlLib> { public: CMSVidFilePlayback() { m_fEnableResetOnStop = true; }
REGISTER_AUTOMATION_OBJECT(IDS_PROJNAME, IDS_REG_FILEPLAYBACK_PROGID, IDS_REG_FILEPLAYBACK_DESC, LIBID_MSVidCtlLib, __uuidof(CMSVidFilePlayback));
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CMSVidFilePlayback) COM_INTERFACE_ENTRY(IMSVidFilePlayback) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IObjectWithSite) 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(CMSVidFilePlayback) IMPLEMENTED_CATEGORY(CATID_SafeForScripting) IMPLEMENTED_CATEGORY(CATID_SafeForInitializing) IMPLEMENTED_CATEGORY(CATID_PersistsToPropertyBag) END_CATEGORY_MAP()
BEGIN_CONNECTION_POINT_MAP(CMSVidFilePlayback) CONNECTION_POINT_ENTRY(IID_IMSVidFilePlaybackEvent) END_CONNECTION_POINT_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
public: STDMETHOD(put_Rate)(double lRate); STDMETHOD(get_Rate)(double *lRate); STDMETHOD(PostStop)(); STDMETHOD(PostRun)(); STDMETHOD(PreStop)(); // 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("File Playback"); } return CComBSTR(csName); } HRESULT Unload(void) { HRESULT hr = IMSVidGraphSegmentImpl<CMSVidFilePlayback, MSVidSEG_SOURCE, &GUID_NULL>::Unload(); m_iReader = -1; return hr; }
virtual ~CMSVidFilePlayback() {}
// IMSVidGraphSegment
STDMETHOD(put_Init)(IUnknown *pInit) { HRESULT hr = IMSVidGraphSegmentImpl<CMSVidFilePlayback, MSVidSEG_SOURCE, &GUID_NULL>::put_Init(pInit); if (FAILED(hr)) { return hr; } if (pInit) { m_fInit = false; return E_NOTIMPL; } return NOERROR; }
STDMETHOD(Build)(); STDMETHOD(put_Container)(IMSVidGraphSegmentContainer *pVal); STDMETHOD(OnEventNotify)(long lEvent, LONG_PTR lParam1, LONG_PTR lParam2);
// IMSVidDevice
STDMETHOD(get_Name)(BSTR * Name) { if (!m_fInit) { return Error(IDS_OBJ_NO_INIT, __uuidof(IMSVidFilePlayback), CO_E_NOTINITIALIZED); } if (Name == NULL) return E_POINTER; try { *Name = m_Name.Copy(); } catch(...) { return E_POINTER; } return NOERROR; } // IMSVidInputDevice
STDMETHOD(IsViewable)(VARIANT* pv, VARIANT_BOOL *pfViewable) { if (!m_fInit) { return Error(IDS_OBJ_NO_INIT, __uuidof(IMSVidFilePlayback), CO_E_NOTINITIALIZED); } if (!pv) { return E_POINTER; } return E_NOTIMPL; } STDMETHOD(View)(VARIANT* pv) { if (!m_fInit) { return Error(IDS_OBJ_NO_INIT, __uuidof(IMSVidFilePlayback), CO_E_NOTINITIALIZED); } if (!pv) { return E_POINTER; } if (pv->vt != VT_BSTR) { return E_INVALIDARG; } // if its a string then its either a dvd url or a filename
// we don't do dvd urls
if (!_wcsnicmp(pv->bstrVal, L"DVD:", 4)) { return E_FAIL; } if (m_pGraph && !m_pGraph.IsStopped()) { return Error(IDS_INVALID_STATE, __uuidof(IMSVidFilePlayback), HRESULT_FROM_WIN32(ERROR_INVALID_STATE)); } return put_FileName(pv->bstrVal); } // IMSVidPlayback
// IMSVidFilePlayback
};
#endif //__MSVidFILEPLAYBACK_H_
|