]> git.vomp.tv Git - vompclient.git/blob - dssourcefilter.h
10 CWFs
[vompclient.git] / dssourcefilter.h
1 /*
2     Copyright 2004-2005 Chris Tallon
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP; if not, write to the Free Software
18     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19 */
20
21 #ifndef DSSOURCEFILTER_H
22 #define DSSOURCEFILTER_H
23
24
25 #include "dssourcepin.h"
26
27 struct mptype_video_detail{ //here should be all information added the Video Draintarget needs for rendering, to be extended in the future
28     UINT width;
29     UINT height;
30 };
31
32 [uuid("EB87AB22-7A95-49c3-8CCE-2F6D61A87009")]
33 class DsSourceFilter: public IBaseFilter {
34 friend class DsSourcePin; 
35 public:
36         DsSourceFilter();
37         ~DsSourceFilter();
38         virtual int GetPinCount();
39         int getCurrentAudioMediaSample(IMediaSample** ms);
40         int DeliverAudioMediaSample(IMediaSample* ms);
41         int getCurrentVideoMediaSample(IMediaSample** ms);
42         int DeliverVideoMediaSample(IMediaSample* ms);
43         REFERENCE_TIME getStartOffset(){return laststart;};
44         BOOL IsActive() {EnterCriticalSection(&filterlock);
45         FILTER_STATE tempstate=mystate;LeaveCriticalSection(&filterlock); 
46         return (tempstate==State_Running) || (tempstate==State_Paused);};
47
48 /* IUnknown */
49         virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID id,void ** object);
50         virtual ULONG STDMETHODCALLTYPE AddRef();
51     virtual ULONG STDMETHODCALLTYPE Release();
52 /*IPersist*/
53         virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *clsid);
54
55 /*IBaseFilter*/
56         virtual HRESULT STDMETHODCALLTYPE EnumPins(IEnumPins **enumar);
57         virtual HRESULT STDMETHODCALLTYPE FindPin(LPCWSTR iden,IPin **pin);
58         virtual HRESULT STDMETHODCALLTYPE QueryFilterInfo(FILTER_INFO *info);
59         virtual HRESULT STDMETHODCALLTYPE JoinFilterGraph(IFilterGraph *graph,LPCWSTR name);
60         virtual HRESULT STDMETHODCALLTYPE QueryVendorInfo(LPWSTR *vendinf);
61 /*IMediaFilter*/
62         virtual HRESULT STDMETHODCALLTYPE GetState(DWORD timeout,FILTER_STATE *state);
63         virtual HRESULT STDMETHODCALLTYPE SetSyncSource(IReferenceClock *uhr);
64         virtual HRESULT STDMETHODCALLTYPE GetSyncSource(IReferenceClock **uhr);
65         virtual HRESULT STDMETHODCALLTYPE Stop();
66         virtual HRESULT STDMETHODCALLTYPE Pause();
67         virtual HRESULT STDMETHODCALLTYPE Run(REFERENCE_TIME start);
68
69         DsSourcePin *GetAudioPin() {return audiopin;};
70         DsSourcePin *GetVideoPin() {return videopin;};
71
72     bool supportsAc3();
73     bool changeAType(int type,IMediaSample* ms);
74     bool changeVType(int type,IMediaSample* ms, void *details);
75
76
77 protected:
78         DsSourcePin *audiopin;
79         DsSourcePin *videopin;
80         IFilterGraph* filtergraph;
81         IReferenceClock* clock;
82         FILTER_STATE mystate;
83         REFERENCE_TIME laststart;
84         CRITICAL_SECTION filterlock;
85
86         volatile long refs;
87
88
89 };
90
91 #endif
92