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

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

Issue 2787933002: ImageCapture: separate fillLightMode, redEyeReduction and Torch (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
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 10 matching lines...) Expand all
21 #include "platform/mojo/MojoHelper.h" 21 #include "platform/mojo/MojoHelper.h"
22 #include "public/platform/InterfaceProvider.h" 22 #include "public/platform/InterfaceProvider.h"
23 #include "public/platform/Platform.h" 23 #include "public/platform/Platform.h"
24 #include "public/platform/WebImageCaptureFrameGrabber.h" 24 #include "public/platform/WebImageCaptureFrameGrabber.h"
25 #include "public/platform/WebMediaStreamTrack.h" 25 #include "public/platform/WebMediaStreamTrack.h"
26 #include "wtf/PtrUtil.h" 26 #include "wtf/PtrUtil.h"
27 27
28 namespace blink { 28 namespace blink {
29 29
30 using FillLightMode = media::mojom::blink::FillLightMode; 30 using FillLightMode = media::mojom::blink::FillLightMode;
31 using MeteringMode = media::mojom::blink::MeteringMode;
31 32
32 namespace { 33 namespace {
33 34
34 const char kNoServiceError[] = "ImageCapture service unavailable."; 35 const char kNoServiceError[] = "ImageCapture service unavailable.";
35 36
36 bool trackIsInactive(const MediaStreamTrack& track) { 37 bool trackIsInactive(const MediaStreamTrack& track) {
37 // Spec instructs to return an exception if the Track's readyState() is not 38 // Spec instructs to return an exception if the Track's readyState() is not
38 // "live". Also reject if the track is disabled or muted. 39 // "live". Also reject if the track is disabled or muted.
39 return track.readyState() != "live" || !track.enabled() || track.muted(); 40 return track.readyState() != "live" || !track.enabled() || track.muted();
40 } 41 }
41 42
42 media::mojom::blink::MeteringMode parseMeteringMode(const String& blinkMode) { 43 MeteringMode parseMeteringMode(const String& blinkMode) {
43 if (blinkMode == "manual") 44 if (blinkMode == "manual")
44 return media::mojom::blink::MeteringMode::MANUAL; 45 return MeteringMode::MANUAL;
45 if (blinkMode == "single-shot") 46 if (blinkMode == "single-shot")
46 return media::mojom::blink::MeteringMode::SINGLE_SHOT; 47 return MeteringMode::SINGLE_SHOT;
47 if (blinkMode == "continuous") 48 if (blinkMode == "continuous")
48 return media::mojom::blink::MeteringMode::CONTINUOUS; 49 return MeteringMode::CONTINUOUS;
49 return media::mojom::blink::MeteringMode::NONE; 50 if (blinkMode == "none")
51 return MeteringMode::NONE;
52 NOTREACHED();
53 return MeteringMode::NONE;
50 } 54 }
51 55
52 FillLightMode parseFillLightMode(const String& blinkMode) { 56 FillLightMode parseFillLightMode(const String& blinkMode) {
53 if (blinkMode == "off") 57 if (blinkMode == "off")
54 return FillLightMode::OFF; 58 return FillLightMode::OFF;
55 if (blinkMode == "auto") 59 if (blinkMode == "auto")
56 return FillLightMode::AUTO; 60 return FillLightMode::AUTO;
57 if (blinkMode == "flash") 61 if (blinkMode == "flash")
58 return FillLightMode::FLASH; 62 return FillLightMode::FLASH;
59 return FillLightMode::NONE; 63 NOTREACHED();
64 return FillLightMode::OFF;
60 } 65 }
61 66
62 WebString toString(media::mojom::blink::MeteringMode value) { 67 WebString toString(MeteringMode value) {
63 switch (value) { 68 switch (value) {
64 case media::mojom::blink::MeteringMode::NONE: 69 case MeteringMode::NONE:
65 return WebString::fromUTF8("none"); 70 return WebString::fromUTF8("none");
66 case media::mojom::blink::MeteringMode::MANUAL: 71 case MeteringMode::MANUAL:
67 return WebString::fromUTF8("manual"); 72 return WebString::fromUTF8("manual");
68 case media::mojom::blink::MeteringMode::SINGLE_SHOT: 73 case MeteringMode::SINGLE_SHOT:
69 return WebString::fromUTF8("single-shot"); 74 return WebString::fromUTF8("single-shot");
70 case media::mojom::blink::MeteringMode::CONTINUOUS: 75 case MeteringMode::CONTINUOUS:
71 return WebString::fromUTF8("continuous"); 76 return WebString::fromUTF8("continuous");
72 default: 77 default:
73 NOTREACHED() << "Unknown MeteringMode"; 78 NOTREACHED() << "Unknown MeteringMode";
74 } 79 }
75 return WebString(); 80 return WebString();
76 } 81 }
77 82
78 } // anonymous namespace 83 } // anonymous namespace
79 84
80 ImageCapture* ImageCapture::create(ExecutionContext* context, 85 ImageCapture* ImageCapture::create(ExecutionContext* context,
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 m_currentConstraints.setSharpness(constraints.sharpness()); 343 m_currentConstraints.setSharpness(constraints.sharpness());
339 settings->sharpness = constraints.sharpness().getAsDouble(); 344 settings->sharpness = constraints.sharpness().getAsDouble();
340 } 345 }
341 346
342 settings->has_zoom = constraints.hasZoom() && constraints.zoom().isDouble(); 347 settings->has_zoom = constraints.hasZoom() && constraints.zoom().isDouble();
343 if (settings->has_zoom) { 348 if (settings->has_zoom) {
344 m_currentConstraints.setZoom(constraints.zoom()); 349 m_currentConstraints.setZoom(constraints.zoom());
345 settings->zoom = constraints.zoom().getAsDouble(); 350 settings->zoom = constraints.zoom().getAsDouble();
346 } 351 }
347 352
348 // TODO(mcasas): add |torch| when the mojom interface is updated, 353 // TODO(mcasas): support ConstrainBooleanParameters where applicable.
349 // https://crbug.com/700607. 354 settings->has_torch =
355 constraints.hasTorch() && constraints.torch().isBoolean();
356 if (settings->has_torch) {
357 m_currentConstraints.setTorch(constraints.torch());
358 settings->torch = constraints.torch().getAsBoolean();
359 }
350 360
351 m_service->SetOptions(m_streamTrack->component()->source()->id(), 361 m_service->SetOptions(m_streamTrack->component()->source()->id(),
352 std::move(settings), 362 std::move(settings),
353 convertToBaseCallback(WTF::bind( 363 convertToBaseCallback(WTF::bind(
354 &ImageCapture::onSetOptions, wrapPersistent(this), 364 &ImageCapture::onSetOptions, wrapPersistent(this),
355 wrapPersistent(resolver)))); 365 wrapPersistent(resolver))));
356 } 366 }
357 367
358 const MediaTrackConstraintSet& ImageCapture::getMediaTrackConstraints() const { 368 const MediaTrackConstraintSet& ImageCapture::getMediaTrackConstraints() const {
359 return m_currentConstraints; 369 return m_currentConstraints;
(...skipping 20 matching lines...) Expand all
380 settings.setBrightness(m_capabilities.brightness()->current()); 390 settings.setBrightness(m_capabilities.brightness()->current());
381 if (m_capabilities.hasContrast()) 391 if (m_capabilities.hasContrast())
382 settings.setContrast(m_capabilities.contrast()->current()); 392 settings.setContrast(m_capabilities.contrast()->current());
383 if (m_capabilities.hasSaturation()) 393 if (m_capabilities.hasSaturation())
384 settings.setSaturation(m_capabilities.saturation()->current()); 394 settings.setSaturation(m_capabilities.saturation()->current());
385 if (m_capabilities.hasSharpness()) 395 if (m_capabilities.hasSharpness())
386 settings.setSharpness(m_capabilities.sharpness()->current()); 396 settings.setSharpness(m_capabilities.sharpness()->current());
387 397
388 if (m_capabilities.hasZoom()) 398 if (m_capabilities.hasZoom())
389 settings.setZoom(m_capabilities.zoom()->current()); 399 settings.setZoom(m_capabilities.zoom()->current());
400 if (m_capabilities.hasTorch())
401 settings.setTorch(m_capabilities.torch());
390 402
391 // TODO(mcasas): add |torch| when the mojom interface is updated, 403 // TODO(mcasas): add |torch| when the mojom interface is updated,
392 // https://crbug.com/700607. 404 // https://crbug.com/700607.
393 } 405 }
394 406
395 ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track) 407 ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track)
396 : ContextLifecycleObserver(context), m_streamTrack(track) { 408 : ContextLifecycleObserver(context), m_streamTrack(track) {
397 DCHECK(m_streamTrack); 409 DCHECK(m_streamTrack);
398 DCHECK(!m_service.is_bound()); 410 DCHECK(!m_service.is_bound());
399 411
(...skipping 16 matching lines...) Expand all
416 media::mojom::blink::PhotoCapabilitiesPtr capabilities) { 428 media::mojom::blink::PhotoCapabilitiesPtr capabilities) {
417 if (!m_serviceRequests.contains(resolver)) 429 if (!m_serviceRequests.contains(resolver))
418 return; 430 return;
419 if (capabilities.is_null()) { 431 if (capabilities.is_null()) {
420 resolver->reject(DOMException::create(UnknownError, "platform error")); 432 resolver->reject(DOMException::create(UnknownError, "platform error"));
421 } else { 433 } else {
422 // Update the local capabilities cache. 434 // Update the local capabilities cache.
423 onCapabilitiesUpdate(capabilities.Clone()); 435 onCapabilitiesUpdate(capabilities.Clone());
424 436
425 PhotoCapabilities* caps = PhotoCapabilities::create(); 437 PhotoCapabilities* caps = PhotoCapabilities::create();
438
439 caps->setRedEyeReduction(capabilities->red_eye_reduction);
426 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when 440 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when
427 // mojo::StructTraits supports garbage-collected mappings, 441 // mojo::StructTraits supports garbage-collected mappings,
428 // https://crbug.com/700180. 442 // https://crbug.com/700180.
429 caps->setImageHeight( 443 caps->setImageHeight(
430 MediaSettingsRange::create(std::move(capabilities->height))); 444 MediaSettingsRange::create(std::move(capabilities->height)));
431 caps->setImageWidth( 445 caps->setImageWidth(
432 MediaSettingsRange::create(std::move(capabilities->width))); 446 MediaSettingsRange::create(std::move(capabilities->width)));
433 447 caps->setFillLightMode(capabilities->fill_light_mode);
434 // TODO(mcasas): use a list of supported modes when mojo is updated.
435 // https://crbug.com/700607.
436 if (capabilities->fill_light_mode == FillLightMode::NONE)
437 caps->setFillLightMode(Vector<FillLightMode>());
438 else
439 caps->setFillLightMode({capabilities->fill_light_mode});
440
441 // TODO(mcasas): use a list of supported modes when mojo is updated.
442 // https://crbug.com/700607.
443 caps->setRedEyeReduction(capabilities->red_eye_reduction);
444 448
445 resolver->resolve(caps); 449 resolver->resolve(caps);
446 } 450 }
447 m_serviceRequests.erase(resolver); 451 m_serviceRequests.erase(resolver);
448 } 452 }
449 453
450 void ImageCapture::onSetOptions(ScriptPromiseResolver* resolver, bool result) { 454 void ImageCapture::onSetOptions(ScriptPromiseResolver* resolver, bool result) {
451 if (!m_serviceRequests.contains(resolver)) 455 if (!m_serviceRequests.contains(resolver))
452 return; 456 return;
453 457
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 if (capabilities->sharpness->max != capabilities->sharpness->min) { 530 if (capabilities->sharpness->max != capabilities->sharpness->min) {
527 m_capabilities.setSharpness( 531 m_capabilities.setSharpness(
528 MediaSettingsRange::create(std::move(capabilities->sharpness))); 532 MediaSettingsRange::create(std::move(capabilities->sharpness)));
529 } 533 }
530 534
531 if (capabilities->zoom->max != capabilities->zoom->min) { 535 if (capabilities->zoom->max != capabilities->zoom->min) {
532 m_capabilities.setZoom( 536 m_capabilities.setZoom(
533 MediaSettingsRange::create(std::move(capabilities->zoom))); 537 MediaSettingsRange::create(std::move(capabilities->zoom)));
534 } 538 }
535 539
540 m_capabilities.setTorch(capabilities->torch);
541
536 // TODO(mcasas): do |torch| when the mojom interface is updated, 542 // TODO(mcasas): do |torch| when the mojom interface is updated,
537 // https://crbug.com/700607. 543 // https://crbug.com/700607.
538 } 544 }
539 545
540 void ImageCapture::onServiceConnectionError() { 546 void ImageCapture::onServiceConnectionError() {
541 m_service.reset(); 547 m_service.reset();
542 for (ScriptPromiseResolver* resolver : m_serviceRequests) 548 for (ScriptPromiseResolver* resolver : m_serviceRequests)
543 resolver->reject(DOMException::create(NotFoundError, kNoServiceError)); 549 resolver->reject(DOMException::create(NotFoundError, kNoServiceError));
544 m_serviceRequests.clear(); 550 m_serviceRequests.clear();
545 } 551 }
546 552
547 DEFINE_TRACE(ImageCapture) { 553 DEFINE_TRACE(ImageCapture) {
548 visitor->trace(m_streamTrack); 554 visitor->trace(m_streamTrack);
549 visitor->trace(m_capabilities); 555 visitor->trace(m_capabilities);
550 visitor->trace(m_currentConstraints); 556 visitor->trace(m_currentConstraints);
551 visitor->trace(m_serviceRequests); 557 visitor->trace(m_serviceRequests);
552 EventTargetWithInlineData::trace(visitor); 558 EventTargetWithInlineData::trace(visitor);
553 ContextLifecycleObserver::trace(visitor); 559 ContextLifecycleObserver::trace(visitor);
554 } 560 }
555 561
556 } // namespace blink 562 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698