Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "modules/imagecapture/ImageCapture.h" | 5 #include "modules/imagecapture/ImageCapture.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/CallbackPromiseAdapter.h" | 7 #include "bindings/core/v8/CallbackPromiseAdapter.h" |
| 8 #include "bindings/core/v8/ScriptPromiseResolver.h" | 8 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 9 #include "core/dom/DOMException.h" | 9 #include "core/dom/DOMException.h" |
| 10 #include "core/dom/ExceptionCode.h" | 10 #include "core/dom/ExceptionCode.h" |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 288 // TODO(mcasas): support ConstrainPoint2DParameters. | 288 // TODO(mcasas): support ConstrainPoint2DParameters. |
| 289 if (constraints.hasPointsOfInterest() && | 289 if (constraints.hasPointsOfInterest() && |
| 290 constraints.pointsOfInterest().isPoint2DSequence()) { | 290 constraints.pointsOfInterest().isPoint2DSequence()) { |
| 291 for (const auto& point : | 291 for (const auto& point : |
| 292 constraints.pointsOfInterest().getAsPoint2DSequence()) { | 292 constraints.pointsOfInterest().getAsPoint2DSequence()) { |
| 293 auto mojoPoint = media::mojom::blink::Point2D::New(); | 293 auto mojoPoint = media::mojom::blink::Point2D::New(); |
| 294 mojoPoint->x = point.x(); | 294 mojoPoint->x = point.x(); |
| 295 mojoPoint->y = point.y(); | 295 mojoPoint->y = point.y(); |
| 296 settings->points_of_interest.push_back(std::move(mojoPoint)); | 296 settings->points_of_interest.push_back(std::move(mojoPoint)); |
| 297 } | 297 } |
| 298 m_currentConstraints.setPointsOfInterest(constraints.pointsOfInterest()); | |
| 298 } | 299 } |
| 299 | 300 |
| 300 // TODO(mcasas): support ConstrainDoubleRange where applicable. | 301 // TODO(mcasas): support ConstrainDoubleRange where applicable. |
| 301 settings->has_exposure_compensation = | 302 settings->has_exposure_compensation = |
| 302 constraints.hasExposureCompensation() && | 303 constraints.hasExposureCompensation() && |
| 303 constraints.exposureCompensation().isDouble(); | 304 constraints.exposureCompensation().isDouble(); |
| 304 if (settings->has_exposure_compensation) { | 305 if (settings->has_exposure_compensation) { |
| 305 m_currentConstraints.setExposureCompensation( | 306 m_currentConstraints.setExposureCompensation( |
| 306 constraints.exposureCompensation()); | 307 constraints.exposureCompensation()); |
| 307 settings->exposure_compensation = | 308 settings->exposure_compensation = |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 370 } | 371 } |
| 371 | 372 |
| 372 void ImageCapture::getMediaTrackSettings(MediaTrackSettings& settings) const { | 373 void ImageCapture::getMediaTrackSettings(MediaTrackSettings& settings) const { |
| 373 if (m_capabilities.hasWhiteBalanceMode()) | 374 if (m_capabilities.hasWhiteBalanceMode()) |
| 374 settings.setWhiteBalanceMode(m_capabilities.whiteBalanceMode()[0]); | 375 settings.setWhiteBalanceMode(m_capabilities.whiteBalanceMode()[0]); |
| 375 if (m_capabilities.hasExposureMode()) | 376 if (m_capabilities.hasExposureMode()) |
| 376 settings.setExposureMode(m_capabilities.exposureMode()[0]); | 377 settings.setExposureMode(m_capabilities.exposureMode()[0]); |
| 377 if (m_capabilities.hasFocusMode()) | 378 if (m_capabilities.hasFocusMode()) |
| 378 settings.setFocusMode(m_capabilities.focusMode()[0]); | 379 settings.setFocusMode(m_capabilities.focusMode()[0]); |
| 379 | 380 |
| 381 if (!m_currentPointsOfInterest.isEmpty()) | |
| 382 settings.setPointsOfInterest(m_currentPointsOfInterest); | |
| 383 | |
| 380 if (m_capabilities.hasExposureCompensation()) { | 384 if (m_capabilities.hasExposureCompensation()) { |
| 381 settings.setExposureCompensation( | 385 settings.setExposureCompensation( |
| 382 m_capabilities.exposureCompensation()->current()); | 386 m_capabilities.exposureCompensation()->current()); |
| 383 } | 387 } |
| 384 if (m_capabilities.hasColorTemperature()) | 388 if (m_capabilities.hasColorTemperature()) |
| 385 settings.setColorTemperature(m_capabilities.colorTemperature()->current()); | 389 settings.setColorTemperature(m_capabilities.colorTemperature()->current()); |
| 386 if (m_capabilities.hasIso()) | 390 if (m_capabilities.hasIso()) |
| 387 settings.setIso(m_capabilities.iso()->current()); | 391 settings.setIso(m_capabilities.iso()->current()); |
| 388 | 392 |
| 389 if (m_capabilities.hasBrightness()) | 393 if (m_capabilities.hasBrightness()) |
| 390 settings.setBrightness(m_capabilities.brightness()->current()); | 394 settings.setBrightness(m_capabilities.brightness()->current()); |
| 391 if (m_capabilities.hasContrast()) | 395 if (m_capabilities.hasContrast()) |
| 392 settings.setContrast(m_capabilities.contrast()->current()); | 396 settings.setContrast(m_capabilities.contrast()->current()); |
| 393 if (m_capabilities.hasSaturation()) | 397 if (m_capabilities.hasSaturation()) |
| 394 settings.setSaturation(m_capabilities.saturation()->current()); | 398 settings.setSaturation(m_capabilities.saturation()->current()); |
| 395 if (m_capabilities.hasSharpness()) | 399 if (m_capabilities.hasSharpness()) |
| 396 settings.setSharpness(m_capabilities.sharpness()->current()); | 400 settings.setSharpness(m_capabilities.sharpness()->current()); |
| 397 | 401 |
| 398 if (m_capabilities.hasZoom()) | 402 if (m_capabilities.hasZoom()) |
| 399 settings.setZoom(m_capabilities.zoom()->current()); | 403 settings.setZoom(m_capabilities.zoom()->current()); |
| 400 if (m_capabilities.hasTorch()) | 404 if (m_capabilities.hasTorch()) |
| 401 settings.setTorch(m_capabilities.torch()); | 405 settings.setTorch(m_capabilities.torch()); |
| 402 | |
| 403 // TODO(mcasas): add |torch| when the mojom interface is updated, | |
| 404 // https://crbug.com/700607. | |
| 405 } | 406 } |
| 406 | 407 |
| 407 ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track) | 408 ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track) |
| 408 : ContextLifecycleObserver(context), m_streamTrack(track) { | 409 : ContextLifecycleObserver(context), m_streamTrack(track) { |
| 409 DCHECK(m_streamTrack); | 410 DCHECK(m_streamTrack); |
| 410 DCHECK(!m_service.is_bound()); | 411 DCHECK(!m_service.is_bound()); |
| 411 | 412 |
| 412 Platform::current()->interfaceProvider()->getInterface( | 413 Platform::current()->interfaceProvider()->getInterface( |
| 413 mojo::MakeRequest(&m_service)); | 414 mojo::MakeRequest(&m_service)); |
| 414 | 415 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 425 | 426 |
| 426 void ImageCapture::onPhotoCapabilities( | 427 void ImageCapture::onPhotoCapabilities( |
| 427 ScriptPromiseResolver* resolver, | 428 ScriptPromiseResolver* resolver, |
| 428 media::mojom::blink::PhotoCapabilitiesPtr capabilities) { | 429 media::mojom::blink::PhotoCapabilitiesPtr capabilities) { |
| 429 if (!m_serviceRequests.contains(resolver)) | 430 if (!m_serviceRequests.contains(resolver)) |
| 430 return; | 431 return; |
| 431 if (capabilities.is_null()) { | 432 if (capabilities.is_null()) { |
| 432 resolver->reject(DOMException::create(UnknownError, "platform error")); | 433 resolver->reject(DOMException::create(UnknownError, "platform error")); |
| 433 } else { | 434 } else { |
| 434 // Update the local capabilities cache. | 435 // Update the local capabilities cache. |
| 435 onCapabilitiesUpdate(capabilities.Clone()); | 436 onCapabilitiesUpdateInternal(*capabilities); |
| 436 | 437 |
| 437 PhotoCapabilities* caps = PhotoCapabilities::create(); | 438 PhotoCapabilities* caps = PhotoCapabilities::create(); |
| 438 | 439 |
| 439 caps->setRedEyeReduction(capabilities->red_eye_reduction); | 440 caps->setRedEyeReduction(capabilities->red_eye_reduction); |
| 440 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when | 441 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when |
| 441 // mojo::StructTraits supports garbage-collected mappings, | 442 // mojo::StructTraits supports garbage-collected mappings, |
| 442 // https://crbug.com/700180. | 443 // https://crbug.com/700180. |
| 443 caps->setImageHeight( | 444 caps->setImageHeight( |
| 444 MediaSettingsRange::create(std::move(capabilities->height))); | 445 MediaSettingsRange::create(std::move(capabilities->height))); |
| 445 caps->setImageWidth( | 446 caps->setImageWidth( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 478 if (blob->data.isEmpty()) | 479 if (blob->data.isEmpty()) |
| 479 resolver->reject(DOMException::create(UnknownError, "platform error")); | 480 resolver->reject(DOMException::create(UnknownError, "platform error")); |
| 480 else | 481 else |
| 481 resolver->resolve( | 482 resolver->resolve( |
| 482 Blob::create(blob->data.data(), blob->data.size(), blob->mime_type)); | 483 Blob::create(blob->data.data(), blob->data.size(), blob->mime_type)); |
| 483 m_serviceRequests.erase(resolver); | 484 m_serviceRequests.erase(resolver); |
| 484 } | 485 } |
| 485 | 486 |
| 486 void ImageCapture::onCapabilitiesUpdate( | 487 void ImageCapture::onCapabilitiesUpdate( |
| 487 media::mojom::blink::PhotoCapabilitiesPtr capabilities) { | 488 media::mojom::blink::PhotoCapabilitiesPtr capabilities) { |
| 488 if (capabilities.is_null()) | 489 if (!capabilities.is_null()) |
| 489 return; | 490 onCapabilitiesUpdateInternal(*capabilities); |
| 491 } | |
| 490 | 492 |
| 493 void ImageCapture::onCapabilitiesUpdateInternal( | |
| 494 const media::mojom::blink::PhotoCapabilities& capabilities) { | |
| 491 // TODO(mcasas): adapt the mojo interface to return a list of supported Modes | 495 // TODO(mcasas): adapt the mojo interface to return a list of supported Modes |
| 492 // when moving these out of PhotoCapabilities, https://crbug.com/700607. | 496 // when moving these out of PhotoCapabilities, https://crbug.com/700607. |
| 493 m_capabilities.setWhiteBalanceMode( | 497 m_capabilities.setWhiteBalanceMode( |
| 494 WTF::Vector<WTF::String>({toString(capabilities->white_balance_mode)})); | 498 WTF::Vector<WTF::String>({toString(capabilities.white_balance_mode)})); |
| 495 m_capabilities.setExposureMode( | 499 m_capabilities.setExposureMode( |
| 496 WTF::Vector<WTF::String>({toString(capabilities->exposure_mode)})); | 500 WTF::Vector<WTF::String>({toString(capabilities.exposure_mode)})); |
| 497 m_capabilities.setFocusMode( | 501 m_capabilities.setFocusMode( |
| 498 WTF::Vector<WTF::String>({toString(capabilities->focus_mode)})); | 502 WTF::Vector<WTF::String>({toString(capabilities.focus_mode)})); |
| 503 | |
| 504 if (!capabilities.points_of_interest.isEmpty()) { | |
| 505 m_currentPointsOfInterest.clear(); | |
| 506 for (const auto& point : capabilities.points_of_interest) { | |
| 507 Point2D webPoint; | |
| 508 webPoint.setX(point->x); | |
| 509 webPoint.setY(point->y); | |
| 510 m_currentPointsOfInterest.push_back(mojo::Clone(webPoint)); | |
| 511 } | |
| 512 } | |
| 499 | 513 |
| 500 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when | 514 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when |
| 501 // mojo::StructTraits supports garbage-collected mappings, | 515 // mojo::StructTraits supports garbage-collected mappings, |
| 502 // https://crbug.com/700180. | 516 // https://crbug.com/700180. |
| 503 if (capabilities->exposure_compensation->max != | 517 if (capabilities.exposure_compensation->max != |
| 504 capabilities->exposure_compensation->min) { | 518 capabilities.exposure_compensation->min) { |
| 505 m_capabilities.setExposureCompensation(MediaSettingsRange::create( | 519 m_capabilities.setExposureCompensation( |
| 506 std::move(capabilities->exposure_compensation))); | 520 MediaSettingsRange::create(*capabilities.exposure_compensation.get())); |
|
Reilly Grant (use Gerrit)
2017/04/04 03:59:37
.get() can be removed here as well.
| |
| 507 } | 521 } |
| 508 if (capabilities->color_temperature->max != | 522 if (capabilities.color_temperature->max != |
| 509 capabilities->color_temperature->min) { | 523 capabilities.color_temperature->min) { |
| 510 m_capabilities.setColorTemperature( | 524 m_capabilities.setColorTemperature( |
| 511 MediaSettingsRange::create(std::move(capabilities->color_temperature))); | 525 MediaSettingsRange::create(*capabilities.color_temperature.get())); |
| 512 } | 526 } |
| 513 if (capabilities->iso->max != capabilities->iso->min) { | 527 if (capabilities.iso->max != capabilities.iso->min) |
| 514 m_capabilities.setIso( | 528 m_capabilities.setIso(MediaSettingsRange::create(*capabilities.iso.get())); |
| 515 MediaSettingsRange::create(std::move(capabilities->iso))); | 529 |
| 530 if (capabilities.brightness->max != capabilities.brightness->min) { | |
| 531 m_capabilities.setBrightness( | |
| 532 MediaSettingsRange::create(*capabilities.brightness.get())); | |
| 533 } | |
| 534 if (capabilities.contrast->max != capabilities.contrast->min) { | |
| 535 m_capabilities.setContrast( | |
| 536 MediaSettingsRange::create(*capabilities.contrast.get())); | |
| 537 } | |
| 538 if (capabilities.saturation->max != capabilities.saturation->min) { | |
| 539 m_capabilities.setSaturation( | |
| 540 MediaSettingsRange::create(*capabilities.saturation.get())); | |
| 541 } | |
| 542 if (capabilities.sharpness->max != capabilities.sharpness->min) { | |
| 543 m_capabilities.setSharpness( | |
| 544 MediaSettingsRange::create(*capabilities.sharpness.get())); | |
| 516 } | 545 } |
| 517 | 546 |
| 518 if (capabilities->brightness->max != capabilities->brightness->min) { | 547 if (capabilities.zoom->max != capabilities.zoom->min) { |
| 519 m_capabilities.setBrightness( | 548 m_capabilities.setZoom( |
| 520 MediaSettingsRange::create(std::move(capabilities->brightness))); | 549 MediaSettingsRange::create(*capabilities.zoom.get())); |
| 521 } | |
| 522 if (capabilities->contrast->max != capabilities->contrast->min) { | |
| 523 m_capabilities.setContrast( | |
| 524 MediaSettingsRange::create(std::move(capabilities->contrast))); | |
| 525 } | |
| 526 if (capabilities->saturation->max != capabilities->saturation->min) { | |
| 527 m_capabilities.setSaturation( | |
| 528 MediaSettingsRange::create(std::move(capabilities->saturation))); | |
| 529 } | |
| 530 if (capabilities->sharpness->max != capabilities->sharpness->min) { | |
| 531 m_capabilities.setSharpness( | |
| 532 MediaSettingsRange::create(std::move(capabilities->sharpness))); | |
| 533 } | 550 } |
| 534 | 551 |
| 535 if (capabilities->zoom->max != capabilities->zoom->min) { | 552 m_capabilities.setTorch(capabilities.torch); |
| 536 m_capabilities.setZoom( | |
| 537 MediaSettingsRange::create(std::move(capabilities->zoom))); | |
| 538 } | |
| 539 | |
| 540 m_capabilities.setTorch(capabilities->torch); | |
| 541 | 553 |
| 542 // TODO(mcasas): do |torch| when the mojom interface is updated, | 554 // TODO(mcasas): do |torch| when the mojom interface is updated, |
| 543 // https://crbug.com/700607. | 555 // https://crbug.com/700607. |
| 544 } | 556 } |
| 545 | 557 |
| 546 void ImageCapture::onServiceConnectionError() { | 558 void ImageCapture::onServiceConnectionError() { |
| 547 m_service.reset(); | 559 m_service.reset(); |
| 548 for (ScriptPromiseResolver* resolver : m_serviceRequests) | 560 for (ScriptPromiseResolver* resolver : m_serviceRequests) |
| 549 resolver->reject(DOMException::create(NotFoundError, kNoServiceError)); | 561 resolver->reject(DOMException::create(NotFoundError, kNoServiceError)); |
| 550 m_serviceRequests.clear(); | 562 m_serviceRequests.clear(); |
| 551 } | 563 } |
| 552 | 564 |
| 553 DEFINE_TRACE(ImageCapture) { | 565 DEFINE_TRACE(ImageCapture) { |
| 554 visitor->trace(m_streamTrack); | 566 visitor->trace(m_streamTrack); |
| 555 visitor->trace(m_capabilities); | 567 visitor->trace(m_capabilities); |
| 556 visitor->trace(m_currentConstraints); | 568 visitor->trace(m_currentConstraints); |
| 569 visitor->trace(m_currentPointsOfInterest); | |
| 557 visitor->trace(m_serviceRequests); | 570 visitor->trace(m_serviceRequests); |
| 558 EventTargetWithInlineData::trace(visitor); | 571 EventTargetWithInlineData::trace(visitor); |
| 559 ContextLifecycleObserver::trace(visitor); | 572 ContextLifecycleObserver::trace(visitor); |
| 560 } | 573 } |
| 561 | 574 |
| 562 } // namespace blink | 575 } // namespace blink |
| OLD | NEW |