OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/capture/video/mac/video_capture_device_factory_mac.h" | 5 #include "media/capture/video/mac/video_capture_device_factory_mac.h" |
6 | 6 |
7 #import <IOKit/audio/IOAudioTypes.h> | 7 #import <IOKit/audio/IOAudioTypes.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 | 9 |
| 10 #include <utility> |
| 11 |
10 #include "base/bind.h" | 12 #include "base/bind.h" |
11 #include "base/location.h" | 13 #include "base/location.h" |
12 #include "base/macros.h" | 14 #include "base/macros.h" |
13 #include "base/profiler/scoped_tracker.h" | 15 #include "base/profiler/scoped_tracker.h" |
14 #include "base/strings/string_util.h" | 16 #include "base/strings/string_util.h" |
15 #include "base/task_runner_util.h" | 17 #include "base/task_runner_util.h" |
16 #import "media/base/mac/avfoundation_glue.h" | 18 #import "media/base/mac/avfoundation_glue.h" |
17 #import "media/capture/video/mac/video_capture_device_avfoundation_mac.h" | 19 #import "media/capture/video/mac/video_capture_device_avfoundation_mac.h" |
18 #import "media/capture/video/mac/video_capture_device_decklink_mac.h" | 20 #import "media/capture/video/mac/video_capture_device_decklink_mac.h" |
19 #include "media/capture/video/mac/video_capture_device_mac.h" | 21 #include "media/capture/video/mac/video_capture_device_mac.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 [[[NSMutableDictionary alloc] init] autorelease]; | 63 [[[NSMutableDictionary alloc] init] autorelease]; |
62 [VideoCaptureDeviceQTKit getDeviceNames:capture_devices]; | 64 [VideoCaptureDeviceQTKit getDeviceNames:capture_devices]; |
63 for (NSString* key in capture_devices) { | 65 for (NSString* key in capture_devices) { |
64 VideoCaptureDevice::Name name( | 66 VideoCaptureDevice::Name name( |
65 [[[capture_devices valueForKey:key] deviceName] UTF8String], | 67 [[[capture_devices valueForKey:key] deviceName] UTF8String], |
66 [key UTF8String], VideoCaptureDevice::Name::QTKIT); | 68 [key UTF8String], VideoCaptureDevice::Name::QTKIT); |
67 if (IsDeviceBlacklisted(name)) | 69 if (IsDeviceBlacklisted(name)) |
68 name.set_is_blacklisted(true); | 70 name.set_is_blacklisted(true); |
69 device_names->push_back(name); | 71 device_names->push_back(name); |
70 } | 72 } |
71 return device_names.Pass(); | 73 return device_names; |
72 } | 74 } |
73 | 75 |
74 static void RunDevicesEnumeratedCallback( | 76 static void RunDevicesEnumeratedCallback( |
75 const base::Callback<void(scoped_ptr<media::VideoCaptureDevice::Names>)>& | 77 const base::Callback<void(scoped_ptr<media::VideoCaptureDevice::Names>)>& |
76 callback, | 78 callback, |
77 scoped_ptr<media::VideoCaptureDevice::Names> device_names) { | 79 scoped_ptr<media::VideoCaptureDevice::Names> device_names) { |
78 // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/458397 is | 80 // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/458397 is |
79 // fixed. | 81 // fixed. |
80 tracked_objects::ScopedTracker tracking_profile( | 82 tracked_objects::ScopedTracker tracking_profile( |
81 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 83 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
82 "458397 media::RunDevicesEnumeratedCallback")); | 84 "458397 media::RunDevicesEnumeratedCallback")); |
83 callback.Run(device_names.Pass()); | 85 callback.Run(std::move(device_names)); |
84 } | 86 } |
85 | 87 |
86 VideoCaptureDeviceFactoryMac::VideoCaptureDeviceFactoryMac( | 88 VideoCaptureDeviceFactoryMac::VideoCaptureDeviceFactoryMac( |
87 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) | 89 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) |
88 : ui_task_runner_(ui_task_runner) { | 90 : ui_task_runner_(ui_task_runner) { |
89 thread_checker_.DetachFromThread(); | 91 thread_checker_.DetachFromThread(); |
90 } | 92 } |
91 | 93 |
92 VideoCaptureDeviceFactoryMac::~VideoCaptureDeviceFactoryMac() { | 94 VideoCaptureDeviceFactoryMac::~VideoCaptureDeviceFactoryMac() { |
93 } | 95 } |
94 | 96 |
95 scoped_ptr<VideoCaptureDevice> VideoCaptureDeviceFactoryMac::Create( | 97 scoped_ptr<VideoCaptureDevice> VideoCaptureDeviceFactoryMac::Create( |
96 const VideoCaptureDevice::Name& device_name) { | 98 const VideoCaptureDevice::Name& device_name) { |
97 DCHECK(thread_checker_.CalledOnValidThread()); | 99 DCHECK(thread_checker_.CalledOnValidThread()); |
98 DCHECK_NE(device_name.capture_api_type(), | 100 DCHECK_NE(device_name.capture_api_type(), |
99 VideoCaptureDevice::Name::API_TYPE_UNKNOWN); | 101 VideoCaptureDevice::Name::API_TYPE_UNKNOWN); |
100 | 102 |
101 scoped_ptr<VideoCaptureDevice> capture_device; | 103 scoped_ptr<VideoCaptureDevice> capture_device; |
102 if (device_name.capture_api_type() == VideoCaptureDevice::Name::DECKLINK) { | 104 if (device_name.capture_api_type() == VideoCaptureDevice::Name::DECKLINK) { |
103 capture_device.reset(new VideoCaptureDeviceDeckLinkMac(device_name)); | 105 capture_device.reset(new VideoCaptureDeviceDeckLinkMac(device_name)); |
104 } else { | 106 } else { |
105 VideoCaptureDeviceMac* device = new VideoCaptureDeviceMac(device_name); | 107 VideoCaptureDeviceMac* device = new VideoCaptureDeviceMac(device_name); |
106 capture_device.reset(device); | 108 capture_device.reset(device); |
107 if (!device->Init(device_name.capture_api_type())) { | 109 if (!device->Init(device_name.capture_api_type())) { |
108 LOG(ERROR) << "Could not initialize VideoCaptureDevice."; | 110 LOG(ERROR) << "Could not initialize VideoCaptureDevice."; |
109 capture_device.reset(); | 111 capture_device.reset(); |
110 } | 112 } |
111 } | 113 } |
112 return scoped_ptr<VideoCaptureDevice>(capture_device.Pass()); | 114 return scoped_ptr<VideoCaptureDevice>(std::move(capture_device)); |
113 } | 115 } |
114 | 116 |
115 void VideoCaptureDeviceFactoryMac::GetDeviceNames( | 117 void VideoCaptureDeviceFactoryMac::GetDeviceNames( |
116 VideoCaptureDevice::Names* device_names) { | 118 VideoCaptureDevice::Names* device_names) { |
117 // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/458397 is | 119 // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/458397 is |
118 // fixed. | 120 // fixed. |
119 tracked_objects::ScopedTracker tracking_profile( | 121 tracked_objects::ScopedTracker tracking_profile( |
120 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 122 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
121 "458397 VideoCaptureDeviceFactoryMac::GetDeviceNames")); | 123 "458397 VideoCaptureDeviceFactoryMac::GetDeviceNames")); |
122 DCHECK(thread_checker_.CalledOnValidThread()); | 124 DCHECK(thread_checker_.CalledOnValidThread()); |
(...skipping 28 matching lines...) Expand all Loading... |
151 } | 153 } |
152 } | 154 } |
153 | 155 |
154 void VideoCaptureDeviceFactoryMac::EnumerateDeviceNames(const base::Callback< | 156 void VideoCaptureDeviceFactoryMac::EnumerateDeviceNames(const base::Callback< |
155 void(scoped_ptr<media::VideoCaptureDevice::Names>)>& callback) { | 157 void(scoped_ptr<media::VideoCaptureDevice::Names>)>& callback) { |
156 DCHECK(thread_checker_.CalledOnValidThread()); | 158 DCHECK(thread_checker_.CalledOnValidThread()); |
157 if (AVFoundationGlue::IsAVFoundationSupported()) { | 159 if (AVFoundationGlue::IsAVFoundationSupported()) { |
158 scoped_ptr<VideoCaptureDevice::Names> device_names( | 160 scoped_ptr<VideoCaptureDevice::Names> device_names( |
159 new VideoCaptureDevice::Names()); | 161 new VideoCaptureDevice::Names()); |
160 GetDeviceNames(device_names.get()); | 162 GetDeviceNames(device_names.get()); |
161 callback.Run(device_names.Pass()); | 163 callback.Run(std::move(device_names)); |
162 } else { | 164 } else { |
163 DVLOG(1) << "Enumerating video capture devices using QTKit"; | 165 DVLOG(1) << "Enumerating video capture devices using QTKit"; |
164 base::PostTaskAndReplyWithResult( | 166 base::PostTaskAndReplyWithResult( |
165 ui_task_runner_.get(), FROM_HERE, | 167 ui_task_runner_.get(), FROM_HERE, |
166 base::Bind(&EnumerateDevicesUsingQTKit), | 168 base::Bind(&EnumerateDevicesUsingQTKit), |
167 base::Bind(&RunDevicesEnumeratedCallback, callback)); | 169 base::Bind(&RunDevicesEnumeratedCallback, callback)); |
168 } | 170 } |
169 } | 171 } |
170 | 172 |
171 void VideoCaptureDeviceFactoryMac::GetDeviceSupportedFormats( | 173 void VideoCaptureDeviceFactoryMac::GetDeviceSupportedFormats( |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 } | 209 } |
208 | 210 |
209 // static | 211 // static |
210 VideoCaptureDeviceFactory* | 212 VideoCaptureDeviceFactory* |
211 VideoCaptureDeviceFactory::CreateVideoCaptureDeviceFactory( | 213 VideoCaptureDeviceFactory::CreateVideoCaptureDeviceFactory( |
212 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) { | 214 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) { |
213 return new VideoCaptureDeviceFactoryMac(ui_task_runner); | 215 return new VideoCaptureDeviceFactoryMac(ui_task_runner); |
214 } | 216 } |
215 | 217 |
216 } // namespace media | 218 } // namespace media |
OLD | NEW |