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/basictypes.h" 15 #include "base/threading/non_thread_safe.h" 16 #include "media/video/capture/video_capture_types.h" 17 18 namespace media { 19 20 struct VideoCaptureCapabilityWin { 21 explicit VideoCaptureCapabilityWin(int index) 22 : stream_index(index), 23 frame_rate_numerator(0), 24 frame_rate_denominator(1) {} 25 int stream_index; 26 // Internally to Media Foundation Api type devices we use rational framerates 27 // so framerates can be properly represented, f.i. 29.971fps= 30000/1001. 28 int frame_rate_numerator; 29 int frame_rate_denominator; 30 VideoCaptureFormat supported_format; 31 }; 32 33 class CapabilityList : public base::NonThreadSafe { 34 public: 35 CapabilityList(); 36 ~CapabilityList(); 37 38 bool empty() const { return capabilities_.empty(); } 39 40 // Appends an entry to the list. 41 void Add(const VideoCaptureCapabilityWin& capability); 42 43 // Loops through the list of capabilities and returns an index of the best 44 // matching capability. The algorithm prioritizes height, width, frame rate 45 // and color format in that order. 46 const VideoCaptureCapabilityWin& GetBestMatchedFormat( 47 int requested_width, 48 int requested_height, 49 int requested_frame_rate) const; 50 51 private: 52 typedef std::list<VideoCaptureCapabilityWin> Capabilities; 53 Capabilities capabilities_; 54 55 DISALLOW_COPY_AND_ASSIGN(CapabilityList); 56 }; 57 58 } // namespace media 59 60 #endif // MEDIA_VIDEO_CAPTURE_WIN_CAPABILITY_LIST_WIN_H_ 61