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