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

Unified Diff: third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp

Issue 2766473002: Image Capture: wire getSettings() from MediaStreamTrack (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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
diff --git a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
index 2e1170ba7d5907d5505d6d73f67c89a2fda03337..ebb86a9dffc4c2cec8437613c05e6530e6600b33 100644
--- a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
+++ b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
@@ -16,6 +16,7 @@
#include "modules/imagecapture/PhotoSettings.h"
#include "modules/mediastream/MediaStreamTrack.h"
#include "modules/mediastream/MediaTrackCapabilities.h"
+#include "modules/mediastream/MediaTrackSettings.h"
#include "platform/WaitableEvent.h"
#include "platform/mojo/MojoHelper.h"
#include "public/platform/InterfaceProvider.h"
@@ -386,6 +387,39 @@ const MediaTrackConstraintSet& ImageCapture::getMediaTrackConstraints() const {
return m_currentConstraints;
}
+void ImageCapture::getMediaTrackSettings(MediaTrackSettings& settings) const {
+ if (m_capabilities.hasWhiteBalanceMode())
+ settings.setWhiteBalanceMode(m_capabilities.whiteBalanceMode()[0]);
+ if (m_capabilities.hasExposureMode())
+ settings.setExposureMode(m_capabilities.exposureMode()[0]);
+ if (m_capabilities.hasFocusMode())
+ settings.setFocusMode(m_capabilities.focusMode()[0]);
+
+ if (m_capabilities.hasExposureCompensation()) {
+ settings.setExposureCompensation(
+ m_capabilities.exposureCompensation()->current());
+ }
+ if (m_capabilities.hasColorTemperature())
+ settings.setColorTemperature(m_capabilities.colorTemperature()->current());
+ if (m_capabilities.hasIso())
+ settings.setIso(m_capabilities.iso()->current());
+
+ if (m_capabilities.hasBrightness())
+ settings.setBrightness(m_capabilities.brightness()->current());
+ if (m_capabilities.hasContrast())
+ settings.setContrast(m_capabilities.contrast()->current());
+ if (m_capabilities.hasSaturation())
+ settings.setSaturation(m_capabilities.saturation()->current());
+ if (m_capabilities.hasSharpness())
+ settings.setSharpness(m_capabilities.sharpness()->current());
+
+ if (m_capabilities.hasZoom())
+ settings.setZoom(m_capabilities.zoom()->current());
+
+ // TODO(mcasas): add |torch| when the mojom interface is updated,
+ // https://crbug.com/700607.
+}
+
ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track)
: ContextLifecycleObserver(context), m_streamTrack(track) {
DCHECK(m_streamTrack);
@@ -401,19 +435,21 @@ ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track)
// to avoid blocking the main UI thread.
m_service->GetCapabilities(
m_streamTrack->component()->source()->id(),
- convertToBaseCallback(WTF::bind(&ImageCapture::onCapabilitiesBootstrap,
+ convertToBaseCallback(WTF::bind(&ImageCapture::onCapabilitiesUpdate,
wrapPersistent(this))));
}
void ImageCapture::onCapabilities(
ScriptPromiseResolver* resolver,
media::mojom::blink::PhotoCapabilitiesPtr capabilities) {
- DVLOG(1) << __func__;
if (!m_serviceRequests.contains(resolver))
return;
if (capabilities.is_null()) {
resolver->reject(DOMException::create(UnknownError, "platform error"));
} else {
+ // Update the local capabilities cache.
+ onCapabilitiesUpdate(capabilities.Clone());
+
PhotoCapabilities* caps = PhotoCapabilities::create();
// TODO(mcasas): Remove the explicit MediaSettingsRange::create() when
// mojo::StructTraits supports garbage-collected mappings,
@@ -452,11 +488,18 @@ void ImageCapture::onSetOptions(ScriptPromiseResolver* resolver, bool result) {
if (!m_serviceRequests.contains(resolver))
return;
- if (result)
- resolver->resolve();
- else
+ if (!result) {
resolver->reject(DOMException::create(UnknownError, "setOptions failed"));
- m_serviceRequests.erase(resolver);
+ m_serviceRequests.erase(resolver);
+ return;
+ }
+
+ // Retrieve the current device status after setting the options.
+ m_service->GetCapabilities(
+ m_streamTrack->component()->source()->id(),
+ convertToBaseCallback(WTF::bind(&ImageCapture::onCapabilities,
+ wrapPersistent(this),
+ wrapPersistent(resolver))));
}
void ImageCapture::onTakePhoto(ScriptPromiseResolver* resolver,
@@ -473,9 +516,8 @@ void ImageCapture::onTakePhoto(ScriptPromiseResolver* resolver,
m_serviceRequests.erase(resolver);
}
-void ImageCapture::onCapabilitiesBootstrap(
+void ImageCapture::onCapabilitiesUpdate(
media::mojom::blink::PhotoCapabilitiesPtr capabilities) {
- DVLOG(1) << __func__;
if (capabilities.is_null())
return;

Powered by Google App Engine
This is Rietveld 408576698