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

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

Issue 2758063002: Image Capture: cache constraints and append them to MediaStreamTrack.getConstraints() (Closed)
Patch Set: reillyg@s comments 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/MediaTrackConstraintSet.h"
20 #include "platform/WaitableEvent.h" 19 #include "platform/WaitableEvent.h"
21 #include "platform/mojo/MojoHelper.h" 20 #include "platform/mojo/MojoHelper.h"
22 #include "public/platform/InterfaceProvider.h" 21 #include "public/platform/InterfaceProvider.h"
23 #include "public/platform/Platform.h" 22 #include "public/platform/Platform.h"
24 #include "public/platform/WebImageCaptureFrameGrabber.h" 23 #include "public/platform/WebImageCaptureFrameGrabber.h"
25 #include "public/platform/WebMediaStreamTrack.h" 24 #include "public/platform/WebMediaStreamTrack.h"
26 #include "wtf/PtrUtil.h" 25 #include "wtf/PtrUtil.h"
27 26
28 namespace blink { 27 namespace blink {
29 28
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 } 292 }
294 m_serviceRequests.insert(resolver); 293 m_serviceRequests.insert(resolver);
295 294
296 auto settings = media::mojom::blink::PhotoSettings::New(); 295 auto settings = media::mojom::blink::PhotoSettings::New();
297 296
298 // TODO(mcasas): support other Mode types beyond simple string i.e. the 297 // TODO(mcasas): support other Mode types beyond simple string i.e. the
299 // equivalents of "sequence<DOMString>"" or "ConstrainDOMStringParameters". 298 // equivalents of "sequence<DOMString>"" or "ConstrainDOMStringParameters".
300 settings->has_white_balance_mode = constraints.hasWhiteBalanceMode() && 299 settings->has_white_balance_mode = constraints.hasWhiteBalanceMode() &&
301 constraints.whiteBalanceMode().isString(); 300 constraints.whiteBalanceMode().isString();
302 if (settings->has_white_balance_mode) { 301 if (settings->has_white_balance_mode) {
302 m_currentConstraints.setWhiteBalanceMode(constraints.whiteBalanceMode());
303 settings->white_balance_mode = 303 settings->white_balance_mode =
304 parseMeteringMode(constraints.whiteBalanceMode().getAsString()); 304 parseMeteringMode(constraints.whiteBalanceMode().getAsString());
305 } 305 }
306 settings->has_exposure_mode = 306 settings->has_exposure_mode =
307 constraints.hasExposureMode() && constraints.exposureMode().isString(); 307 constraints.hasExposureMode() && constraints.exposureMode().isString();
308 if (settings->has_exposure_mode) { 308 if (settings->has_exposure_mode) {
309 m_currentConstraints.setExposureMode(constraints.exposureMode());
309 settings->exposure_mode = 310 settings->exposure_mode =
310 parseMeteringMode(constraints.exposureMode().getAsString()); 311 parseMeteringMode(constraints.exposureMode().getAsString());
311 } 312 }
312 313
313 settings->has_focus_mode = 314 settings->has_focus_mode =
314 constraints.hasFocusMode() && constraints.focusMode().isString(); 315 constraints.hasFocusMode() && constraints.focusMode().isString();
315 if (settings->has_focus_mode) { 316 if (settings->has_focus_mode) {
317 m_currentConstraints.setFocusMode(constraints.focusMode());
316 settings->focus_mode = 318 settings->focus_mode =
317 parseMeteringMode(constraints.focusMode().getAsString()); 319 parseMeteringMode(constraints.focusMode().getAsString());
318 } 320 }
319 321
320 // TODO(mcasas): support ConstrainDoubleRange where applicable. 322 // TODO(mcasas): support ConstrainDoubleRange where applicable.
321 settings->has_exposure_compensation = 323 settings->has_exposure_compensation =
322 constraints.hasExposureCompensation() && 324 constraints.hasExposureCompensation() &&
323 constraints.exposureCompensation().isDouble(); 325 constraints.exposureCompensation().isDouble();
324 if (settings->has_exposure_compensation) { 326 if (settings->has_exposure_compensation) {
327 m_currentConstraints.setExposureCompensation(
328 constraints.exposureCompensation());
325 settings->exposure_compensation = 329 settings->exposure_compensation =
326 constraints.exposureCompensation().getAsDouble(); 330 constraints.exposureCompensation().getAsDouble();
327 } 331 }
328 settings->has_color_temperature = constraints.hasColorTemperature() && 332 settings->has_color_temperature = constraints.hasColorTemperature() &&
329 constraints.colorTemperature().isDouble(); 333 constraints.colorTemperature().isDouble();
330 if (settings->has_color_temperature) 334 if (settings->has_color_temperature) {
335 m_currentConstraints.setColorTemperature(constraints.colorTemperature());
331 settings->color_temperature = constraints.colorTemperature().getAsDouble(); 336 settings->color_temperature = constraints.colorTemperature().getAsDouble();
337 }
332 settings->has_iso = constraints.hasIso() && constraints.iso().isDouble(); 338 settings->has_iso = constraints.hasIso() && constraints.iso().isDouble();
333 if (settings->has_iso) 339 if (settings->has_iso) {
340 m_currentConstraints.setIso(constraints.iso());
334 settings->iso = constraints.iso().getAsDouble(); 341 settings->iso = constraints.iso().getAsDouble();
342 }
335 343
336 settings->has_brightness = 344 settings->has_brightness =
337 constraints.hasBrightness() && constraints.brightness().isDouble(); 345 constraints.hasBrightness() && constraints.brightness().isDouble();
338 if (settings->has_brightness) 346 if (settings->has_brightness) {
347 m_currentConstraints.setBrightness(constraints.brightness());
339 settings->brightness = constraints.brightness().getAsDouble(); 348 settings->brightness = constraints.brightness().getAsDouble();
349 }
340 settings->has_contrast = 350 settings->has_contrast =
341 constraints.hasContrast() && constraints.contrast().isDouble(); 351 constraints.hasContrast() && constraints.contrast().isDouble();
342 if (settings->has_contrast) 352 if (settings->has_contrast) {
353 m_currentConstraints.setContrast(constraints.contrast());
343 settings->contrast = constraints.contrast().getAsDouble(); 354 settings->contrast = constraints.contrast().getAsDouble();
355 }
344 settings->has_saturation = 356 settings->has_saturation =
345 constraints.hasSaturation() && constraints.saturation().isDouble(); 357 constraints.hasSaturation() && constraints.saturation().isDouble();
346 if (settings->has_saturation) 358 if (settings->has_saturation) {
359 m_currentConstraints.setSaturation(constraints.saturation());
347 settings->saturation = constraints.saturation().getAsDouble(); 360 settings->saturation = constraints.saturation().getAsDouble();
361 }
348 settings->has_sharpness = 362 settings->has_sharpness =
349 constraints.hasSharpness() && constraints.sharpness().isDouble(); 363 constraints.hasSharpness() && constraints.sharpness().isDouble();
350 if (settings->has_sharpness) 364 if (settings->has_sharpness) {
365 m_currentConstraints.setSharpness(constraints.sharpness());
351 settings->sharpness = constraints.sharpness().getAsDouble(); 366 settings->sharpness = constraints.sharpness().getAsDouble();
367 }
352 368
353 settings->has_zoom = constraints.hasZoom() && constraints.zoom().isDouble(); 369 settings->has_zoom = constraints.hasZoom() && constraints.zoom().isDouble();
354 if (settings->has_zoom) 370 if (settings->has_zoom) {
371 m_currentConstraints.setZoom(constraints.zoom());
355 settings->zoom = constraints.zoom().getAsDouble(); 372 settings->zoom = constraints.zoom().getAsDouble();
373 }
356 374
357 // TODO(mcasas): add |torch| when the mojom interface is updated, 375 // TODO(mcasas): add |torch| when the mojom interface is updated,
358 // https://crbug.com/700607. 376 // https://crbug.com/700607.
359 377
360 m_service->SetOptions(m_streamTrack->component()->source()->id(), 378 m_service->SetOptions(m_streamTrack->component()->source()->id(),
361 std::move(settings), 379 std::move(settings),
362 convertToBaseCallback(WTF::bind( 380 convertToBaseCallback(WTF::bind(
363 &ImageCapture::onSetOptions, wrapPersistent(this), 381 &ImageCapture::onSetOptions, wrapPersistent(this),
364 wrapPersistent(resolver)))); 382 wrapPersistent(resolver))));
365 } 383 }
366 384
385 const MediaTrackConstraintSet& ImageCapture::getMediaTrackConstraints() const {
386 return m_currentConstraints;
387 }
388
367 ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track) 389 ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track)
368 : ContextLifecycleObserver(context), m_streamTrack(track) { 390 : ContextLifecycleObserver(context), m_streamTrack(track) {
369 DCHECK(m_streamTrack); 391 DCHECK(m_streamTrack);
370 DCHECK(!m_service.is_bound()); 392 DCHECK(!m_service.is_bound());
371 393
372 Platform::current()->interfaceProvider()->getInterface( 394 Platform::current()->interfaceProvider()->getInterface(
373 mojo::MakeRequest(&m_service)); 395 mojo::MakeRequest(&m_service));
374 396
375 m_service.set_connection_error_handler(convertToBaseCallback(WTF::bind( 397 m_service.set_connection_error_handler(convertToBaseCallback(WTF::bind(
376 &ImageCapture::onServiceConnectionError, wrapWeakPersistent(this)))); 398 &ImageCapture::onServiceConnectionError, wrapWeakPersistent(this))));
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 541
520 DEFINE_TRACE(ImageCapture) { 542 DEFINE_TRACE(ImageCapture) {
521 visitor->trace(m_streamTrack); 543 visitor->trace(m_streamTrack);
522 visitor->trace(m_capabilities); 544 visitor->trace(m_capabilities);
523 visitor->trace(m_serviceRequests); 545 visitor->trace(m_serviceRequests);
524 EventTargetWithInlineData::trace(visitor); 546 EventTargetWithInlineData::trace(visitor);
525 ContextLifecycleObserver::trace(visitor); 547 ContextLifecycleObserver::trace(visitor);
526 } 548 }
527 549
528 } // namespace blink 550 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698