• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // Implement a simple base class for DirectShow filters. It may only be used in
6 // a single threaded apartment.
7 
8 #ifndef MEDIA_VIDEO_CAPTURE_WIN_FILTER_BASE_WIN_H_
9 #define MEDIA_VIDEO_CAPTURE_WIN_FILTER_BASE_WIN_H_
10 
11 // Avoid including strsafe.h via dshow as it will cause build warnings.
12 #define NO_DSHOW_STRSAFE
13 #include <dshow.h>
14 
15 #include "base/memory/ref_counted.h"
16 #include "base/win/scoped_comptr.h"
17 
18 namespace media {
19 
20 class FilterBase
21     : public IBaseFilter,
22       public base::RefCounted<FilterBase> {
23  public:
24   FilterBase();
25   virtual ~FilterBase();
26 
27   // Number of pins connected to this filter.
28   virtual size_t NoOfPins() = 0;
29   // Returns the IPin interface pin no index.
30   virtual IPin* GetPin(int index) = 0;
31 
32   // Inherited from IUnknown.
33   STDMETHOD(QueryInterface)(REFIID id, void** object_ptr);
34   STDMETHOD_(ULONG, AddRef)();
35   STDMETHOD_(ULONG, Release)();
36 
37   // Inherited from IBaseFilter.
38   STDMETHOD(EnumPins)(IEnumPins** enum_pins);
39 
40   STDMETHOD(FindPin)(LPCWSTR id, IPin** pin);
41 
42   STDMETHOD(QueryFilterInfo)(FILTER_INFO* info);
43 
44   STDMETHOD(JoinFilterGraph)(IFilterGraph* graph, LPCWSTR name);
45 
46   STDMETHOD(QueryVendorInfo)(LPWSTR* vendor_info);
47 
48   // Inherited from IMediaFilter.
49   STDMETHOD(Stop)();
50 
51   STDMETHOD(Pause)();
52 
53   STDMETHOD(Run)(REFERENCE_TIME start);
54 
55   STDMETHOD(GetState)(DWORD msec_timeout, FILTER_STATE* state);
56 
57   STDMETHOD(SetSyncSource)(IReferenceClock* clock);
58 
59   STDMETHOD(GetSyncSource)(IReferenceClock** clock);
60 
61   // Inherited from IPersistent.
62   STDMETHOD(GetClassID)(CLSID* class_id) = 0;
63 
64  private:
65   FILTER_STATE state_;
66   base::win::ScopedComPtr<IFilterGraph> owning_graph_;
67 
68   DISALLOW_COPY_AND_ASSIGN(FilterBase);
69 };
70 
71 }  // namespace media
72 
73 #endif  // MEDIA_VIDEO_CAPTURE_WIN_FILTER_BASE_WIN_H_
74