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 18namespace media { 19 20struct 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 33class 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 float 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