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

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

Issue 2766473002: Image Capture: wire getSettings() from MediaStreamTrack (Closed)
Patch Set: Created 3 years, 9 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
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"
11 #include "core/fileapi/Blob.h" 11 #include "core/fileapi/Blob.h"
12 #include "core/frame/ImageBitmap.h" 12 #include "core/frame/ImageBitmap.h"
13 #include "modules/EventTargetModules.h" 13 #include "modules/EventTargetModules.h"
14 #include "modules/imagecapture/MediaSettingsRange.h" 14 #include "modules/imagecapture/MediaSettingsRange.h"
15 #include "modules/imagecapture/PhotoCapabilities.h" 15 #include "modules/imagecapture/PhotoCapabilities.h"
16 #include "modules/imagecapture/PhotoSettings.h" 16 #include "modules/imagecapture/PhotoSettings.h"
17 #include "modules/mediastream/MediaStreamTrack.h" 17 #include "modules/mediastream/MediaStreamTrack.h"
18 #include "modules/mediastream/MediaTrackCapabilities.h" 18 #include "modules/mediastream/MediaTrackCapabilities.h"
19 #include "modules/mediastream/MediaTrackSettings.h"
19 #include "platform/WaitableEvent.h" 20 #include "platform/WaitableEvent.h"
20 #include "platform/mojo/MojoHelper.h" 21 #include "platform/mojo/MojoHelper.h"
21 #include "public/platform/InterfaceProvider.h" 22 #include "public/platform/InterfaceProvider.h"
22 #include "public/platform/Platform.h" 23 #include "public/platform/Platform.h"
23 #include "public/platform/WebImageCaptureFrameGrabber.h" 24 #include "public/platform/WebImageCaptureFrameGrabber.h"
24 #include "public/platform/WebMediaStreamTrack.h" 25 #include "public/platform/WebMediaStreamTrack.h"
25 #include "wtf/PtrUtil.h" 26 #include "wtf/PtrUtil.h"
26 27
27 namespace blink { 28 namespace blink {
28 29
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 std::move(settings), 380 std::move(settings),
380 convertToBaseCallback(WTF::bind( 381 convertToBaseCallback(WTF::bind(
381 &ImageCapture::onSetOptions, wrapPersistent(this), 382 &ImageCapture::onSetOptions, wrapPersistent(this),
382 wrapPersistent(resolver)))); 383 wrapPersistent(resolver))));
383 } 384 }
384 385
385 const MediaTrackConstraintSet& ImageCapture::getMediaTrackConstraints() const { 386 const MediaTrackConstraintSet& ImageCapture::getMediaTrackConstraints() const {
386 return m_currentConstraints; 387 return m_currentConstraints;
387 } 388 }
388 389
390 void ImageCapture::getMediaTrackSettings(MediaTrackSettings& settings) const {
391 DVLOG(1) << __func__;
Reilly Grant (use Gerrit) 2017/03/21 01:25:17 Left over logging?
mcasas 2017/03/21 02:40:10 Done.
392 if (m_capabilities.hasWhiteBalanceMode())
393 settings.setWhiteBalanceMode(m_capabilities.whiteBalanceMode()[0]);
394 if (m_capabilities.hasExposureMode())
395 settings.setExposureMode(m_capabilities.exposureMode()[0]);
396 if (m_capabilities.hasFocusMode())
397 settings.setFocusMode(m_capabilities.focusMode()[0]);
398
399 if (m_capabilities.hasExposureCompensation()) {
400 settings.setExposureCompensation(
401 m_capabilities.exposureCompensation()->current());
402 }
403 if (m_capabilities.hasColorTemperature())
404 settings.setColorTemperature(m_capabilities.colorTemperature()->current());
405 if (m_capabilities.hasIso())
406 settings.setIso(m_capabilities.iso()->current());
407
408 if (m_capabilities.hasBrightness())
409 settings.setBrightness(m_capabilities.brightness()->current());
410 if (m_capabilities.hasContrast())
411 settings.setContrast(m_capabilities.contrast()->current());
412 if (m_capabilities.hasSaturation())
413 settings.setSaturation(m_capabilities.saturation()->current());
414 if (m_capabilities.hasSharpness())
415 settings.setSharpness(m_capabilities.sharpness()->current());
416
417 if (m_capabilities.hasZoom())
418 settings.setZoom(m_capabilities.zoom()->current());
419
420 // TODO(mcasas): add |torch| when the mojom interface is updated,
421 // https://crbug.com/700607.
422 }
423
389 ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track) 424 ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track)
390 : ContextLifecycleObserver(context), m_streamTrack(track) { 425 : ContextLifecycleObserver(context), m_streamTrack(track) {
391 DCHECK(m_streamTrack); 426 DCHECK(m_streamTrack);
392 DCHECK(!m_service.is_bound()); 427 DCHECK(!m_service.is_bound());
393 428
394 Platform::current()->interfaceProvider()->getInterface( 429 Platform::current()->interfaceProvider()->getInterface(
395 mojo::MakeRequest(&m_service)); 430 mojo::MakeRequest(&m_service));
396 431
397 m_service.set_connection_error_handler(convertToBaseCallback(WTF::bind( 432 m_service.set_connection_error_handler(convertToBaseCallback(WTF::bind(
398 &ImageCapture::onServiceConnectionError, wrapWeakPersistent(this)))); 433 &ImageCapture::onServiceConnectionError, wrapWeakPersistent(this))));
399 434
400 // Launch a retrieval of the current capabilities, which arrive asynchronously 435 // Launch a retrieval of the current capabilities, which arrive asynchronously
401 // to avoid blocking the main UI thread. 436 // to avoid blocking the main UI thread.
402 m_service->GetCapabilities( 437 m_service->GetCapabilities(
403 m_streamTrack->component()->source()->id(), 438 m_streamTrack->component()->source()->id(),
404 convertToBaseCallback(WTF::bind(&ImageCapture::onCapabilitiesBootstrap, 439 convertToBaseCallback(WTF::bind(&ImageCapture::onCapabilitiesUpdate,
405 wrapPersistent(this)))); 440 wrapPersistent(this))));
406 } 441 }
407 442
408 void ImageCapture::onCapabilities( 443 void ImageCapture::onCapabilities(
409 ScriptPromiseResolver* resolver, 444 ScriptPromiseResolver* resolver,
410 media::mojom::blink::PhotoCapabilitiesPtr capabilities) { 445 media::mojom::blink::PhotoCapabilitiesPtr capabilities) {
411 DVLOG(1) << __func__; 446 DVLOG(1) << __func__;
Reilly Grant (use Gerrit) 2017/03/21 01:25:17 Left over debug logging?
mcasas 2017/03/21 02:40:10 Removed all stray DVLOG()s
412 if (!m_serviceRequests.contains(resolver)) 447 if (!m_serviceRequests.contains(resolver))
413 return; 448 return;
414 if (capabilities.is_null()) { 449 if (capabilities.is_null()) {
415 resolver->reject(DOMException::create(UnknownError, "platform error")); 450 resolver->reject(DOMException::create(UnknownError, "platform error"));
416 } else { 451 } else {
452 // Update the local capabilities cache.
453 onCapabilitiesUpdate(capabilities.Clone());
454
417 PhotoCapabilities* caps = PhotoCapabilities::create(); 455 PhotoCapabilities* caps = PhotoCapabilities::create();
418 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when 456 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when
419 // mojo::StructTraits supports garbage-collected mappings, 457 // mojo::StructTraits supports garbage-collected mappings,
420 // https://crbug.com/700180. 458 // https://crbug.com/700180.
421 caps->setIso(MediaSettingsRange::create(std::move(capabilities->iso))); 459 caps->setIso(MediaSettingsRange::create(std::move(capabilities->iso)));
422 caps->setImageHeight( 460 caps->setImageHeight(
423 MediaSettingsRange::create(std::move(capabilities->height))); 461 MediaSettingsRange::create(std::move(capabilities->height)));
424 caps->setImageWidth( 462 caps->setImageWidth(
425 MediaSettingsRange::create(std::move(capabilities->width))); 463 MediaSettingsRange::create(std::move(capabilities->width)));
426 caps->setZoom(MediaSettingsRange::create(std::move(capabilities->zoom))); 464 caps->setZoom(MediaSettingsRange::create(std::move(capabilities->zoom)));
(...skipping 18 matching lines...) Expand all
445 caps->setRedEyeReduction(capabilities->red_eye_reduction); 483 caps->setRedEyeReduction(capabilities->red_eye_reduction);
446 resolver->resolve(caps); 484 resolver->resolve(caps);
447 } 485 }
448 m_serviceRequests.erase(resolver); 486 m_serviceRequests.erase(resolver);
449 } 487 }
450 488
451 void ImageCapture::onSetOptions(ScriptPromiseResolver* resolver, bool result) { 489 void ImageCapture::onSetOptions(ScriptPromiseResolver* resolver, bool result) {
452 if (!m_serviceRequests.contains(resolver)) 490 if (!m_serviceRequests.contains(resolver))
453 return; 491 return;
454 492
455 if (result) 493 if (!result) {
456 resolver->resolve();
457 else
458 resolver->reject(DOMException::create(UnknownError, "setOptions failed")); 494 resolver->reject(DOMException::create(UnknownError, "setOptions failed"));
459 m_serviceRequests.erase(resolver); 495 m_serviceRequests.erase(resolver);
496 return;
497 }
498
499 // Retrieve the current device status after setting the options.
500 m_service->GetCapabilities(
501 m_streamTrack->component()->source()->id(),
502 convertToBaseCallback(WTF::bind(&ImageCapture::onCapabilities,
503 wrapPersistent(this),
504 wrapPersistent(resolver))));
460 } 505 }
461 506
462 void ImageCapture::onTakePhoto(ScriptPromiseResolver* resolver, 507 void ImageCapture::onTakePhoto(ScriptPromiseResolver* resolver,
463 media::mojom::blink::BlobPtr blob) { 508 media::mojom::blink::BlobPtr blob) {
464 if (!m_serviceRequests.contains(resolver)) 509 if (!m_serviceRequests.contains(resolver))
465 return; 510 return;
466 511
467 // TODO(mcasas): Should be using a mojo::StructTraits. 512 // TODO(mcasas): Should be using a mojo::StructTraits.
468 if (blob->data.isEmpty()) 513 if (blob->data.isEmpty())
469 resolver->reject(DOMException::create(UnknownError, "platform error")); 514 resolver->reject(DOMException::create(UnknownError, "platform error"));
470 else 515 else
471 resolver->resolve( 516 resolver->resolve(
472 Blob::create(blob->data.data(), blob->data.size(), blob->mime_type)); 517 Blob::create(blob->data.data(), blob->data.size(), blob->mime_type));
473 m_serviceRequests.erase(resolver); 518 m_serviceRequests.erase(resolver);
474 } 519 }
475 520
476 void ImageCapture::onCapabilitiesBootstrap( 521 void ImageCapture::onCapabilitiesUpdate(
477 media::mojom::blink::PhotoCapabilitiesPtr capabilities) { 522 media::mojom::blink::PhotoCapabilitiesPtr capabilities) {
478 DVLOG(1) << __func__; 523 DVLOG(1) << __func__;
479 if (capabilities.is_null()) 524 if (capabilities.is_null())
480 return; 525 return;
481 526
482 // TODO(mcasas): adapt the mojo interface to return a list of supported Modes 527 // TODO(mcasas): adapt the mojo interface to return a list of supported Modes
483 // when moving these out of PhotoCapabilities, https://crbug.com/700607. 528 // when moving these out of PhotoCapabilities, https://crbug.com/700607.
484 m_capabilities.setWhiteBalanceMode( 529 m_capabilities.setWhiteBalanceMode(
485 WTF::Vector<WTF::String>({toString(capabilities->white_balance_mode)})); 530 WTF::Vector<WTF::String>({toString(capabilities->white_balance_mode)}));
486 m_capabilities.setExposureMode( 531 m_capabilities.setExposureMode(
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 586
542 DEFINE_TRACE(ImageCapture) { 587 DEFINE_TRACE(ImageCapture) {
543 visitor->trace(m_streamTrack); 588 visitor->trace(m_streamTrack);
544 visitor->trace(m_capabilities); 589 visitor->trace(m_capabilities);
545 visitor->trace(m_serviceRequests); 590 visitor->trace(m_serviceRequests);
546 EventTargetWithInlineData::trace(visitor); 591 EventTargetWithInlineData::trace(visitor);
547 ContextLifecycleObserver::trace(visitor); 592 ContextLifecycleObserver::trace(visitor);
548 } 593 }
549 594
550 } // namespace blink 595 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698