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