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 // 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       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