Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp

Issue 2795693004: Image Capture: add |points_of_interest| to mojo and wire it to IDL layer (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/modules/imagecapture/ImageCapture.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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(MediaSettingsRange::create(
506 std::move(capabilities->exposure_compensation))); 520 mojo::Clone(capabilities.exposure_compensation)));
Reilly Grant (use Gerrit) 2017/04/04 00:06:06 Update MediaSettingsRange::create() to take a cons
mcasas 2017/04/04 00:30:42 Done.
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(MediaSettingsRange::create(
511 MediaSettingsRange::create(std::move(capabilities->color_temperature))); 525 mojo::Clone(capabilities.color_temperature)));
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(
515 MediaSettingsRange::create(std::move(capabilities->iso))); 529 MediaSettingsRange::create(mojo::Clone(capabilities.iso)));
516 } 530 }
517 531
518 if (capabilities->brightness->max != capabilities->brightness->min) { 532 if (capabilities.brightness->max != capabilities.brightness->min) {
519 m_capabilities.setBrightness( 533 m_capabilities.setBrightness(
520 MediaSettingsRange::create(std::move(capabilities->brightness))); 534 MediaSettingsRange::create(mojo::Clone(capabilities.brightness)));
521 } 535 }
522 if (capabilities->contrast->max != capabilities->contrast->min) { 536 if (capabilities.contrast->max != capabilities.contrast->min) {
523 m_capabilities.setContrast( 537 m_capabilities.setContrast(
524 MediaSettingsRange::create(std::move(capabilities->contrast))); 538 MediaSettingsRange::create(mojo::Clone(capabilities.contrast)));
525 } 539 }
526 if (capabilities->saturation->max != capabilities->saturation->min) { 540 if (capabilities.saturation->max != capabilities.saturation->min) {
527 m_capabilities.setSaturation( 541 m_capabilities.setSaturation(
528 MediaSettingsRange::create(std::move(capabilities->saturation))); 542 MediaSettingsRange::create(mojo::Clone(capabilities.saturation)));
529 } 543 }
530 if (capabilities->sharpness->max != capabilities->sharpness->min) { 544 if (capabilities.sharpness->max != capabilities.sharpness->min) {
531 m_capabilities.setSharpness( 545 m_capabilities.setSharpness(
532 MediaSettingsRange::create(std::move(capabilities->sharpness))); 546 MediaSettingsRange::create(mojo::Clone(capabilities.sharpness)));
533 } 547 }
534 548
535 if (capabilities->zoom->max != capabilities->zoom->min) { 549 if (capabilities.zoom->max != capabilities.zoom->min) {
536 m_capabilities.setZoom( 550 m_capabilities.setZoom(
537 MediaSettingsRange::create(std::move(capabilities->zoom))); 551 MediaSettingsRange::create(mojo::Clone(capabilities.zoom)));
538 } 552 }
539 553
540 m_capabilities.setTorch(capabilities->torch); 554 m_capabilities.setTorch(capabilities.torch);
541 555
542 // TODO(mcasas): do |torch| when the mojom interface is updated, 556 // TODO(mcasas): do |torch| when the mojom interface is updated,
543 // https://crbug.com/700607. 557 // https://crbug.com/700607.
544 } 558 }
545 559
546 void ImageCapture::onServiceConnectionError() { 560 void ImageCapture::onServiceConnectionError() {
547 m_service.reset(); 561 m_service.reset();
548 for (ScriptPromiseResolver* resolver : m_serviceRequests) 562 for (ScriptPromiseResolver* resolver : m_serviceRequests)
549 resolver->reject(DOMException::create(NotFoundError, kNoServiceError)); 563 resolver->reject(DOMException::create(NotFoundError, kNoServiceError));
550 m_serviceRequests.clear(); 564 m_serviceRequests.clear();
551 } 565 }
552 566
553 DEFINE_TRACE(ImageCapture) { 567 DEFINE_TRACE(ImageCapture) {
554 visitor->trace(m_streamTrack); 568 visitor->trace(m_streamTrack);
555 visitor->trace(m_capabilities); 569 visitor->trace(m_capabilities);
556 visitor->trace(m_currentConstraints); 570 visitor->trace(m_currentConstraints);
571 visitor->trace(m_currentPointsOfInterest);
557 visitor->trace(m_serviceRequests); 572 visitor->trace(m_serviceRequests);
558 EventTargetWithInlineData::trace(visitor); 573 EventTargetWithInlineData::trace(visitor);
559 ContextLifecycleObserver::trace(visitor); 574 ContextLifecycleObserver::trace(visitor);
560 } 575 }
561 576
562 } // namespace blink 577 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/imagecapture/ImageCapture.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698