Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / media / video / capture / win / capability_list_win.cc
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 #include "media/video/capture/win/capability_list_win.h"
6
7 #include <algorithm>
8 #include <functional>
9
10 #include "base/logging.h"
11
12 namespace media {
13
14 static bool CompareCapability(const VideoCaptureFormat& requested,
15                               const CapabilityWin& capability_lhs,
16                               const CapabilityWin& capability_rhs) {
17   const VideoCaptureFormat& lhs = capability_lhs.supported_format;
18   const VideoCaptureFormat& rhs = capability_rhs.supported_format;
19
20   const int diff_height_lhs =
21       std::abs(lhs.frame_size.height() - requested.frame_size.height());
22   const int diff_height_rhs =
23       std::abs(rhs.frame_size.height() - requested.frame_size.height());
24   if (diff_height_lhs != diff_height_rhs)
25     return diff_height_lhs < diff_height_rhs;
26
27   const int diff_width_lhs =
28       std::abs(lhs.frame_size.width() - requested.frame_size.width());
29   const int diff_width_rhs =
30       std::abs(rhs.frame_size.width() - requested.frame_size.width());
31   if (diff_width_lhs != diff_width_rhs)
32     return diff_width_lhs < diff_width_rhs;
33
34   const float diff_fps_lhs = std::fabs(lhs.frame_rate - requested.frame_rate);
35   const float diff_fps_rhs = std::fabs(rhs.frame_rate - requested.frame_rate);
36   if (diff_fps_lhs != diff_fps_rhs)
37     return diff_fps_lhs < diff_fps_rhs;
38
39   return lhs.pixel_format < rhs.pixel_format;
40 }
41
42 CapabilityWin GetBestMatchedCapability(const VideoCaptureFormat& requested,
43                                        const CapabilityList& capabilities) {
44   DCHECK(!capabilities.empty());
45   CapabilityWin best_match = capabilities.front();
46   for (const CapabilityWin& capability : capabilities) {
47     if (CompareCapability(requested, capability, best_match))
48       best_match = capability;
49   }
50   return best_match;
51 }
52
53 }  // namespace media