1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "media/video/capture/video_capture_device.h"
6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/i18n/timezone.h"
8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/strings/string_util.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace media {
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
12558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochconst std::string VideoCaptureDevice::Name::GetNameAndModel() const {
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  const std::string model_id = GetModel();
14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (model_id.empty())
15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    return device_name_;
16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  const std::string suffix = " (" + model_id + ")";
17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (EndsWith(device_name_, suffix, true))  // |true| means case-sensitive.
18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    return device_name_;
19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return device_name_ + suffix;
20558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
21558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
22116680a4aac90f2aa7413d9095a592090648e557Ben MurdochVideoCaptureDevice::Name::Name() {}
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
24116680a4aac90f2aa7413d9095a592090648e557Ben MurdochVideoCaptureDevice::Name::Name(const std::string& name, const std::string& id)
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : device_name_(name), unique_id_(id) {}
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN)
28116680a4aac90f2aa7413d9095a592090648e557Ben MurdochVideoCaptureDevice::Name::Name(const std::string& name,
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                               const std::string& id,
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                               const CaptureApiType api_type)
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : device_name_(name),
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      unique_id_(id),
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      capture_api_class_(api_type),
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      capabilities_id_(id) {}
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_MACOSX)
38116680a4aac90f2aa7413d9095a592090648e557Ben MurdochVideoCaptureDevice::Name::Name(const std::string& name,
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                               const std::string& id,
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                               const CaptureApiType api_type)
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : device_name_(name),
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      unique_id_(id),
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      capture_api_class_(api_type),
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      transport_type_(OTHER_TRANSPORT),
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      is_blacklisted_(false) {}
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
47116680a4aac90f2aa7413d9095a592090648e557Ben MurdochVideoCaptureDevice::Name::Name(const std::string& name,
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                               const std::string& id,
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                               const CaptureApiType api_type,
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                               const TransportType transport_type)
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : device_name_(name),
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      unique_id_(id),
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      capture_api_class_(api_type),
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      transport_type_(transport_type),
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      is_blacklisted_(false) {}
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben MurdochVideoCaptureDevice::Name::~Name() {}
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)VideoCaptureDevice::~VideoCaptureDevice() {}
61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochint VideoCaptureDevice::GetPowerLineFrequencyForLocation() const {
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  std::string current_country = base::CountryCodeForCurrentTimezone();
64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (current_country.empty())
65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    return 0;
66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Sorted out list of countries with 60Hz power line frequency, from
67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // http://en.wikipedia.org/wiki/Mains_electricity_by_country
68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  const char* countries_using_60Hz[] = {
69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "AI", "AO", "AS", "AW", "AZ", "BM", "BR", "BS", "BZ", "CA", "CO",
70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "CR", "CU", "DO", "EC", "FM", "GT", "GU", "GY", "HN", "HT", "JP",
71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "KN", "KR", "KY", "MS", "MX", "NI", "PA", "PE", "PF", "PH", "PR",
72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "PW", "SA", "SR", "SV", "TT", "TW", "UM", "US", "VG", "VI", "VE"};
73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  const char** countries_using_60Hz_end =
74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      countries_using_60Hz + arraysize(countries_using_60Hz);
75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (std::find(countries_using_60Hz, countries_using_60Hz_end,
76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                current_country) == countries_using_60Hz_end) {
77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    return kPowerLine50Hz;
78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return kPowerLine60Hz;
80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace media
83