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.
5 // Windows specific implementation of VideoCaptureDevice.
6 // DirectShow is used for capturing. DirectShow provide its own threads
9 #ifndef MEDIA_VIDEO_CAPTURE_WIN_CAPABILITY_LIST_WIN_H_
10 #define MEDIA_VIDEO_CAPTURE_WIN_CAPABILITY_LIST_WIN_H_
14 #include "base/threading/non_thread_safe.h"
15 #include "media/video/capture/video_capture_types.h"
19 struct VideoCaptureCapabilityWin : public VideoCaptureCapability {
20 explicit VideoCaptureCapabilityWin(int index)
21 : stream_index(index),
22 frame_rate_numerator(0),
23 frame_rate_denominator(1) {}
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;
31 class CapabilityList : public base::NonThreadSafe {
36 bool empty() const { return capabilities_.empty(); }
38 // Appends an entry to the list.
39 void Add(const VideoCaptureCapabilityWin& capability);
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;
49 typedef std::list<VideoCaptureCapabilityWin> Capabilities;
50 Capabilities capabilities_;
52 DISALLOW_COPY_AND_ASSIGN(CapabilityList);
57 #endif // MEDIA_VIDEO_CAPTURE_WIN_CAPABILITY_LIST_WIN_H_