Index: media/capture/video/mac/video_capture_device_mac.mm |
diff --git a/media/capture/video/mac/video_capture_device_mac.mm b/media/capture/video/mac/video_capture_device_mac.mm |
index e11e646de7f847979beb018dbe337ca03937dfbd..8a87ec94387a2295a460182739de511a3c46e42c 100644 |
--- a/media/capture/video/mac/video_capture_device_mac.mm |
+++ b/media/capture/video/mac/video_capture_device_mac.mm |
@@ -292,32 +292,13 @@ static void SetAntiFlickerInUsbDevice(const int vendor_id, |
} |
} |
-const std::string VideoCaptureDevice::Name::GetModel() const { |
- // Skip the AVFoundation's not USB nor built-in devices. |
- if (capture_api_type() == AVFOUNDATION && transport_type() != USB_OR_BUILT_IN) |
- return ""; |
- if (capture_api_type() == DECKLINK) |
- return ""; |
- // Both PID and VID are 4 characters. |
- if (unique_id_.size() < 2 * kVidPidSize) |
- return ""; |
- |
- // The last characters of device id is a concatenation of VID and then PID. |
- const size_t vid_location = unique_id_.size() - 2 * kVidPidSize; |
- std::string id_vendor = unique_id_.substr(vid_location, kVidPidSize); |
- const size_t pid_location = unique_id_.size() - kVidPidSize; |
- std::string id_product = unique_id_.substr(pid_location, kVidPidSize); |
- |
- return id_vendor + ":" + id_product; |
-} |
- |
-VideoCaptureDeviceMac::VideoCaptureDeviceMac(const Name& device_name) |
- : device_name_(device_name), |
+VideoCaptureDeviceMac::VideoCaptureDeviceMac( |
+ const VideoCaptureDeviceDescriptor& device_descriptor) |
+ : device_descriptor_(device_descriptor), |
task_runner_(base::ThreadTaskRunnerHandle::Get()), |
state_(kNotInitialized), |
capture_device_(nil), |
- weak_factory_(this) { |
-} |
+ weak_factory_(this) {} |
VideoCaptureDeviceMac::~VideoCaptureDeviceMac() { |
DCHECK(task_runner_->BelongsToCurrentThread()); |
@@ -332,11 +313,12 @@ void VideoCaptureDeviceMac::AllocateAndStart( |
} |
client_ = std::move(client); |
- if (device_name_.capture_api_type() == Name::AVFOUNDATION) |
- LogMessage("Using AVFoundation for device: " + device_name_.name()); |
+ if (device_descriptor_.capture_api == VideoCaptureApi::MACOSX_AVFOUNDATION) |
+ LogMessage("Using AVFoundation for device: " + |
+ device_descriptor_.display_name); |
NSString* deviceId = |
- [NSString stringWithUTF8String:device_name_.id().c_str()]; |
+ [NSString stringWithUTF8String:device_descriptor_.device_id.c_str()]; |
[capture_device_ setFrameReceiver:this]; |
@@ -359,7 +341,9 @@ void VideoCaptureDeviceMac::AllocateAndStart( |
// Try setting the power line frequency removal (anti-flicker). The built-in |
// cameras are normally suspended so the configuration must happen right |
// before starting capture and during configuration. |
- const std::string& device_model = device_name_.GetModel(); |
+ const std::string device_model = GetDeviceModelId( |
+ device_descriptor_.device_id, device_descriptor_.capture_api, |
+ device_descriptor_.transport_type); |
if (device_model.length() > 2 * kVidPidSize) { |
std::string vendor_id = device_model.substr(0, kVidPidSize); |
std::string model_id = device_model.substr(kVidPidSize + 1); |
@@ -400,12 +384,11 @@ void VideoCaptureDeviceMac::TakePhoto(TakePhotoCallback callback) { |
[capture_device_ takePhoto]; |
} |
-bool VideoCaptureDeviceMac::Init( |
- VideoCaptureDevice::Name::CaptureApiType capture_api_type) { |
+bool VideoCaptureDeviceMac::Init(VideoCaptureApi capture_api_type) { |
DCHECK(task_runner_->BelongsToCurrentThread()); |
DCHECK_EQ(state_, kNotInitialized); |
- if (capture_api_type != Name::AVFOUNDATION) |
+ if (capture_api_type != VideoCaptureApi::MACOSX_AVFOUNDATION) |
return false; |
capture_device_.reset( |
@@ -464,6 +447,36 @@ void VideoCaptureDeviceMac::ReceiveError( |
weak_factory_.GetWeakPtr(), from_here, reason)); |
} |
+void VideoCaptureDeviceMac::LogMessage(const std::string& message) { |
+ DCHECK(task_runner_->BelongsToCurrentThread()); |
+ if (client_) |
+ client_->OnLog(message); |
+} |
+ |
+// static |
+std::string VideoCaptureDeviceMac::GetDeviceModelId( |
+ const std::string& device_id, |
+ VideoCaptureApi capture_api, |
+ VideoCaptureTransportType transport_type) { |
+ // Skip the AVFoundation's not USB nor built-in devices. |
+ if (capture_api == VideoCaptureApi::MACOSX_AVFOUNDATION && |
+ transport_type != VideoCaptureTransportType::MACOSX_USB_OR_BUILT_IN) |
+ return ""; |
+ if (capture_api == VideoCaptureApi::MACOSX_DECKLINK) |
+ return ""; |
+ // Both PID and VID are 4 characters. |
+ if (device_id.size() < 2 * kVidPidSize) |
+ return ""; |
+ |
+ // The last characters of device id is a concatenation of VID and then PID. |
+ const size_t vid_location = device_id.size() - 2 * kVidPidSize; |
+ std::string id_vendor = device_id.substr(vid_location, kVidPidSize); |
+ const size_t pid_location = device_id.size() - kVidPidSize; |
+ std::string id_product = device_id.substr(pid_location, kVidPidSize); |
+ |
+ return id_vendor + ":" + id_product; |
+} |
+ |
void VideoCaptureDeviceMac::SetErrorState( |
const tracked_objects::Location& from_here, |
const std::string& reason) { |
@@ -472,12 +485,6 @@ void VideoCaptureDeviceMac::SetErrorState( |
client_->OnError(from_here, reason); |
} |
-void VideoCaptureDeviceMac::LogMessage(const std::string& message) { |
- DCHECK(task_runner_->BelongsToCurrentThread()); |
- if (client_) |
- client_->OnLog(message); |
-} |
- |
bool VideoCaptureDeviceMac::UpdateCaptureResolution() { |
if (![capture_device_ setCaptureHeight:capture_format_.frame_size.height() |
width:capture_format_.frame_size.width() |