1// Copyright 2013 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/video_capture_device.h"
6
7#include "base/i18n/timezone.h"
8#include "base/strings/string_util.h"
9
10namespace media {
11
12const std::string VideoCaptureDevice::Name::GetNameAndModel() const {
13  const std::string model_id = GetModel();
14  if (model_id.empty())
15    return device_name_;
16  const std::string suffix = " (" + model_id + ")";
17  if (EndsWith(device_name_, suffix, true))  // |true| means case-sensitive.
18    return device_name_;
19  return device_name_ + suffix;
20}
21
22VideoCaptureDevice::Name::Name() {}
23
24VideoCaptureDevice::Name::Name(const std::string& name, const std::string& id)
25    : device_name_(name), unique_id_(id) {}
26
27#if defined(OS_WIN)
28VideoCaptureDevice::Name::Name(const std::string& name,
29                               const std::string& id,
30                               const CaptureApiType api_type)
31    : device_name_(name),
32      unique_id_(id),
33      capture_api_class_(api_type),
34      capabilities_id_(id) {}
35#endif
36
37#if defined(OS_MACOSX)
38VideoCaptureDevice::Name::Name(const std::string& name,
39                               const std::string& id,
40                               const CaptureApiType api_type)
41    : device_name_(name),
42      unique_id_(id),
43      capture_api_class_(api_type),
44      transport_type_(OTHER_TRANSPORT),
45      is_blacklisted_(false) {}
46
47VideoCaptureDevice::Name::Name(const std::string& name,
48                               const std::string& id,
49                               const CaptureApiType api_type,
50                               const TransportType transport_type)
51    : device_name_(name),
52      unique_id_(id),
53      capture_api_class_(api_type),
54      transport_type_(transport_type),
55      is_blacklisted_(false) {}
56#endif
57
58VideoCaptureDevice::Name::~Name() {}
59
60VideoCaptureDevice::~VideoCaptureDevice() {}
61
62int VideoCaptureDevice::GetPowerLineFrequencyForLocation() const {
63  std::string current_country = base::CountryCodeForCurrentTimezone();
64  if (current_country.empty())
65    return 0;
66  // Sorted out list of countries with 60Hz power line frequency, from
67  // http://en.wikipedia.org/wiki/Mains_electricity_by_country
68  const char* countries_using_60Hz[] = {
69      "AI", "AO", "AS", "AW", "AZ", "BM", "BR", "BS", "BZ", "CA", "CO",
70      "CR", "CU", "DO", "EC", "FM", "GT", "GU", "GY", "HN", "HT", "JP",
71      "KN", "KR", "KY", "MS", "MX", "NI", "PA", "PE", "PF", "PH", "PR",
72      "PW", "SA", "SR", "SV", "TT", "TW", "UM", "US", "VG", "VI", "VE"};
73  const char** countries_using_60Hz_end =
74      countries_using_60Hz + arraysize(countries_using_60Hz);
75  if (std::find(countries_using_60Hz, countries_using_60Hz_end,
76                current_country) == countries_using_60Hz_end) {
77    return kPowerLine50Hz;
78  }
79  return kPowerLine60Hz;
80}
81
82}  // namespace media
83