- add sources.
[platform/framework/web/crosswalk.git] / src / media / video / capture / win / capability_list_win.h
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 // Windows specific implementation of VideoCaptureDevice.
6 // DirectShow is used for capturing. DirectShow provide its own threads
7 // for capturing.
8
9 #ifndef MEDIA_VIDEO_CAPTURE_WIN_CAPABILITY_LIST_WIN_H_
10 #define MEDIA_VIDEO_CAPTURE_WIN_CAPABILITY_LIST_WIN_H_
11
12 #include <list>
13
14 #include "base/threading/non_thread_safe.h"
15 #include "media/video/capture/video_capture_types.h"
16
17 namespace media {
18
19 struct VideoCaptureCapabilityWin : public VideoCaptureCapability {
20   explicit VideoCaptureCapabilityWin(int index)
21       : stream_index(index),
22         frame_rate_numerator(0),
23         frame_rate_denominator(1) {}
24   int stream_index;
25   // Internally to Media Foundation Api type devices we use rational framerates
26   // so framerates can be properly represented, f.i. 29.971fps= 30000/1001.
27   int frame_rate_numerator;
28   int frame_rate_denominator;
29 };
30
31 class CapabilityList : public base::NonThreadSafe {
32  public:
33   CapabilityList();
34   ~CapabilityList();
35
36   bool empty() const { return capabilities_.empty(); }
37
38   // Appends an entry to the list.
39   void Add(const VideoCaptureCapabilityWin& capability);
40
41   // Loops through the list of capabilities and returns an index of the best
42   // matching capability.  The algorithm prioritizes height, width, frame rate
43   // and color format in that order.
44   const VideoCaptureCapabilityWin& GetBestMatchedCapability(
45       int requested_width, int requested_height,
46       int requested_frame_rate) const;
47
48  private:
49   typedef std::list<VideoCaptureCapabilityWin> Capabilities;
50   Capabilities capabilities_;
51
52   DISALLOW_COPY_AND_ASSIGN(CapabilityList);
53 };
54
55 }  // namespace media
56
57 #endif  // MEDIA_VIDEO_CAPTURE_WIN_CAPABILITY_LIST_WIN_H_