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

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

Issue 2804653003: Image Capture: make sure applyConstraints() only works for ImageCapture constraints (Closed)
Patch Set: LayoutTests 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"
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/MediaTrackConstraints.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 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 m_frameGrabber->grabFrame( 240 m_frameGrabber->grabFrame(
240 &track, new CallbackPromiseAdapter<ImageBitmap, void>(resolver)); 241 &track, new CallbackPromiseAdapter<ImageBitmap, void>(resolver));
241 242
242 return promise; 243 return promise;
243 } 244 }
244 245
245 MediaTrackCapabilities& ImageCapture::getMediaTrackCapabilities() { 246 MediaTrackCapabilities& ImageCapture::getMediaTrackCapabilities() {
246 return m_capabilities; 247 return m_capabilities;
247 } 248 }
248 249
249 // TODO(mcasas): make the implementation fully Spec compliant, see inside the 250 // TODO(mcasas): make the implementation fully Spec compliant, see the TODOs
250 // method, https://crbug.com/700607. 251 // inside the method, https://crbug.com/708723.
251 void ImageCapture::setMediaTrackConstraints( 252 void ImageCapture::setMediaTrackConstraints(
252 ScriptPromiseResolver* resolver, 253 ScriptPromiseResolver* resolver,
253 const MediaTrackConstraintSet& constraints) { 254 const HeapVector<MediaTrackConstraintSet>& constraintsVector) {
254 if (!m_service) { 255 if (!m_service) {
255 resolver->reject(DOMException::create(NotFoundError, kNoServiceError)); 256 resolver->reject(DOMException::create(NotFoundError, kNoServiceError));
256 return; 257 return;
257 } 258 }
258 m_serviceRequests.insert(resolver); 259 m_serviceRequests.insert(resolver);
259 260
261 // TODO(mcasas): add support more than one single advanced constraint.
262 const auto constraints = constraintsVector[0];
263
260 auto settings = media::mojom::blink::PhotoSettings::New(); 264 auto settings = media::mojom::blink::PhotoSettings::New();
261 265
262 // TODO(mcasas): support other Mode types beyond simple string i.e. the 266 // TODO(mcasas): support other Mode types beyond simple string i.e. the
263 // equivalents of "sequence<DOMString>"" or "ConstrainDOMStringParameters". 267 // equivalents of "sequence<DOMString>"" or "ConstrainDOMStringParameters".
264 settings->has_white_balance_mode = constraints.hasWhiteBalanceMode() && 268 settings->has_white_balance_mode = constraints.hasWhiteBalanceMode() &&
265 constraints.whiteBalanceMode().isString(); 269 constraints.whiteBalanceMode().isString();
266 if (settings->has_white_balance_mode) { 270 if (settings->has_white_balance_mode) {
267 m_currentConstraints.setWhiteBalanceMode(constraints.whiteBalanceMode()); 271 m_currentConstraints.setWhiteBalanceMode(constraints.whiteBalanceMode());
268 settings->white_balance_mode = 272 settings->white_balance_mode =
269 parseMeteringMode(constraints.whiteBalanceMode().getAsString()); 273 parseMeteringMode(constraints.whiteBalanceMode().getAsString());
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 std::move(settings), 366 std::move(settings),
363 convertToBaseCallback(WTF::bind( 367 convertToBaseCallback(WTF::bind(
364 &ImageCapture::onSetOptions, wrapPersistent(this), 368 &ImageCapture::onSetOptions, wrapPersistent(this),
365 wrapPersistent(resolver)))); 369 wrapPersistent(resolver))));
366 } 370 }
367 371
368 const MediaTrackConstraintSet& ImageCapture::getMediaTrackConstraints() const { 372 const MediaTrackConstraintSet& ImageCapture::getMediaTrackConstraints() const {
369 return m_currentConstraints; 373 return m_currentConstraints;
370 } 374 }
371 375
376 void ImageCapture::clearMediaTrackConstraints(ScriptPromiseResolver* resolver) {
377 m_currentConstraints = MediaTrackConstraintSet();
378 resolver->resolve();
379
380 // TODO(mcasas): Clear also any PhotoSettings that the device might have got
381 // configured, for that we need to know a "default" state of the device; take
382 // a snapshot upon first opening. https://crbug.com/700607.
383 }
384
372 void ImageCapture::getMediaTrackSettings(MediaTrackSettings& settings) const { 385 void ImageCapture::getMediaTrackSettings(MediaTrackSettings& settings) const {
373 // Merge any present |m_settings| members into |settings|. 386 // Merge any present |m_settings| members into |settings|.
374 387
375 if (m_settings.hasWhiteBalanceMode()) 388 if (m_settings.hasWhiteBalanceMode())
376 settings.setWhiteBalanceMode(m_settings.whiteBalanceMode()); 389 settings.setWhiteBalanceMode(m_settings.whiteBalanceMode());
377 if (m_settings.hasExposureMode()) 390 if (m_settings.hasExposureMode())
378 settings.setExposureMode(m_settings.exposureMode()); 391 settings.setExposureMode(m_settings.exposureMode());
379 if (m_settings.hasFocusMode()) 392 if (m_settings.hasFocusMode())
380 settings.setFocusMode(m_settings.focusMode()); 393 settings.setFocusMode(m_settings.focusMode());
381 394
(...skipping 15 matching lines...) Expand all
397 settings.setSaturation(m_settings.saturation()); 410 settings.setSaturation(m_settings.saturation());
398 if (m_settings.hasSharpness()) 411 if (m_settings.hasSharpness())
399 settings.setSharpness(m_settings.sharpness()); 412 settings.setSharpness(m_settings.sharpness());
400 413
401 if (m_settings.hasZoom()) 414 if (m_settings.hasZoom())
402 settings.setZoom(m_settings.zoom()); 415 settings.setZoom(m_settings.zoom());
403 if (m_settings.hasTorch()) 416 if (m_settings.hasTorch())
404 settings.setTorch(m_settings.torch()); 417 settings.setTorch(m_settings.torch());
405 } 418 }
406 419
420 bool ImageCapture::hasNonImageCaptureConstraints(
421 const MediaTrackConstraints& constraints) const {
422 if (!constraints.hasAdvanced())
423 return false;
424
425 const auto& advancedConstraints = constraints.advanced();
426 for (const auto& constraint : advancedConstraints) {
427 if (constraint.hasWidth() || constraint.hasHeight() ||
428 constraint.hasAspectRatio() || constraint.hasFrameRate() ||
429 constraint.hasFacingMode() || constraint.hasVolume() ||
430 constraint.hasSampleRate() || constraint.hasSampleSize() ||
431 constraint.hasEchoCancellation() || constraint.hasLatency() ||
432 constraint.hasChannelCount() || constraint.hasDeviceId() ||
433 constraint.hasGroupId() || constraint.hasVideoKind() ||
434 constraint.hasDepthNear() || constraint.hasDepthFar() ||
435 constraint.hasFocalLengthX() || constraint.hasFocalLengthY() ||
436 constraint.hasMandatory() || constraint.hasOptional()) {
437 return true;
438 }
439 }
440 return false;
441 }
442
407 ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track) 443 ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track)
408 : ContextLifecycleObserver(context), m_streamTrack(track) { 444 : ContextLifecycleObserver(context), m_streamTrack(track) {
409 DCHECK(m_streamTrack); 445 DCHECK(m_streamTrack);
410 DCHECK(!m_service.is_bound()); 446 DCHECK(!m_service.is_bound());
411 447
412 Platform::current()->interfaceProvider()->getInterface( 448 Platform::current()->interfaceProvider()->getInterface(
413 mojo::MakeRequest(&m_service)); 449 mojo::MakeRequest(&m_service));
414 450
415 m_service.set_connection_error_handler(convertToBaseCallback(WTF::bind( 451 m_service.set_connection_error_handler(convertToBaseCallback(WTF::bind(
416 &ImageCapture::onServiceConnectionError, wrapWeakPersistent(this)))); 452 &ImageCapture::onServiceConnectionError, wrapWeakPersistent(this))));
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 visitor->trace(m_streamTrack); 617 visitor->trace(m_streamTrack);
582 visitor->trace(m_capabilities); 618 visitor->trace(m_capabilities);
583 visitor->trace(m_settings); 619 visitor->trace(m_settings);
584 visitor->trace(m_currentConstraints); 620 visitor->trace(m_currentConstraints);
585 visitor->trace(m_serviceRequests); 621 visitor->trace(m_serviceRequests);
586 EventTargetWithInlineData::trace(visitor); 622 EventTargetWithInlineData::trace(visitor);
587 ContextLifecycleObserver::trace(visitor); 623 ContextLifecycleObserver::trace(visitor);
588 } 624 }
589 625
590 } // namespace blink 626 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698