Chromium Code Reviews| 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..af601c87ea11f2ff601bf83bc6a1961c613315ac 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_.friendly_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(); |
| + std::string device_model = GetDeviceModelId( |
|
emircan
2016/07/28 21:23:02
const std::string& device_model?
chfremer
2016/07/29 18:09:51
I will add const, but const reference is not possi
|
| + 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() |