Home | History | Annotate | Download | only in win
      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