Changing to new interface. [PART 16]
[xy_vsfilter.git] / src / subpic / SimpleSubPicProviderImpl.h
blob2f1478b4abd0c47ffff785789f15b05be40f19e8
1 #pragma once
3 #include "ISimpleSubPic.h"
4 #include "SubPicQueueImpl.h"
6 //////////////////////////////////////////////////////////////////////////
7 //
8 // SimpleSubPicProvider
9 //
11 class SimpleSubPicProvider: public CUnknown, public ISimpleSubPicProvider
13 public:
14 SimpleSubPicProvider(int alpha_blt_dst_type, SIZE spd_size, RECT video_rect, HRESULT* phr=NULL);
15 virtual ~SimpleSubPicProvider();
17 DECLARE_IUNKNOWN;
18 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
20 bool LookupSubPicEx(REFERENCE_TIME rtNow, IXySubRenderFrame** sub_render_frame);
21 HRESULT GetSubPicProviderEx(ISubPicProviderEx2** pSubPicProviderEx);
22 HRESULT RenderTo(IXySubRenderFrame** pSubPic, REFERENCE_TIME rtStart, REFERENCE_TIME rtStop, double fps, BOOL bIsAnimated);
23 bool IsSpdColorTypeSupported(int type);
24 public:
25 // ISimpleSubPicProvider
27 STDMETHODIMP SetSubPicProvider(IUnknown* subpic_provider);
28 STDMETHODIMP GetSubPicProvider(IUnknown** subpic_provider);
30 STDMETHODIMP SetFPS(double fps);
31 STDMETHODIMP SetTime(REFERENCE_TIME rtNow);
33 STDMETHODIMP Invalidate(REFERENCE_TIME rtInvalidate = -1);
34 STDMETHODIMP_(bool) LookupSubPic(REFERENCE_TIME now /*[in]*/, ISimpleSubPic** output_subpic/*[out]*/);
36 STDMETHODIMP GetStats(int& nSubPics, REFERENCE_TIME& rtNow, REFERENCE_TIME& rtStart, REFERENCE_TIME& rtStop);
37 STDMETHODIMP GetStats(int nSubPic, REFERENCE_TIME& rtStart, REFERENCE_TIME& rtStop);
38 private:
39 CCritSec m_csSubPicProvider;
40 CComPtr<ISubPicProviderEx2> m_pSubPicProviderEx;
42 CAtlList<int> m_prefered_colortype;
43 protected:
44 int m_alpha_blt_dst_type;
45 SIZE m_spd_size;
46 RECT m_video_rect;
47 int m_spd_type;
48 double m_fps;
49 REFERENCE_TIME m_rtNow;
51 CComPtr<ISubPicExAllocator> m_pAllocator;
53 CCritSec m_csLock;
54 REFERENCE_TIME m_subpic_start,m_subpic_stop;
55 CComPtr<IXySubRenderFrame> m_pSubPic;
58 //////////////////////////////////////////////////////////////////////////
60 // SimpleSubPicProvider2
61 //
63 class SimpleSubPicProvider2: public CUnknown, public ISimpleSubPicProvider
65 public:
66 SimpleSubPicProvider2(int alpha_blt_dst_type, SIZE max_size, SIZE cur_size, RECT video_rect, HRESULT* phr=NULL);
67 virtual ~SimpleSubPicProvider2();
69 DECLARE_IUNKNOWN;
70 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
71 public:
72 SimpleSubPicProvider2(const SimpleSubPicProvider2&);
73 void operator=(const SimpleSubPicProvider2&)const;
75 // ISimpleSubPicProvider
77 STDMETHODIMP SetSubPicProvider(IUnknown* subpic_provider);
78 STDMETHODIMP GetSubPicProvider(IUnknown** subpic_provider);
80 STDMETHODIMP SetFPS(double fps);
81 STDMETHODIMP SetTime(REFERENCE_TIME rtNow);
83 STDMETHODIMP Invalidate(REFERENCE_TIME rtInvalidate = -1);
84 STDMETHODIMP_(bool) LookupSubPic(REFERENCE_TIME now /*[in]*/, ISimpleSubPic** output_subpic/*[out]*/);
86 STDMETHODIMP GetStats(int& nSubPics, REFERENCE_TIME& rtNow, REFERENCE_TIME& rtStart, REFERENCE_TIME& rtStop);
87 STDMETHODIMP GetStats(int nSubPic, REFERENCE_TIME& rtStart, REFERENCE_TIME& rtStop);
89 protected:
90 int m_alpha_blt_dst_type;
91 SIZE m_max_size;
92 SIZE m_cur_size;
93 RECT m_video_rect;
95 double m_fps;
96 REFERENCE_TIME m_now;
98 ISimpleSubPicProvider *m_cur_provider;
99 SimpleSubPicProvider *m_ex_provider;
100 CSubPicQueueNoThread *m_old_provider;