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 |