mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:18:48 +00:00
86a3aa0b54
- missing part of Bug 1165772: P1. (7311039be4) - missing gstreamer stuff (54a80d69b2) - Bug 1214208: Do not use MP3Decoder on B2G. r=alfredo (0a19e7946e) - Bug 1194014 - Remove redundant includes. r=jya (ccc3753113) - Bug 1039639 - Add support for Flac on Firefox OS. r=cajbir (7d76197e07) - Bug 875573 - Add video/x-m4v mime type. r=kentuckyfriedtakahe (6ec8af93e6) - cleanup (6fb3d5dd26) - Bug 1180621 - [FxOS] Enable VP9 codec for the Android version after KK. r=sotaro (58f7c2b657) - Bug 1187247: [MSE] P2. Enable WebM in MediaSource. r=jya (2df0ee1f7a) - Bug 1187247: [MSE] P1. Continue parsing MediaSegment if buffer starts with SimpleBlock/Block. r=kinetik (574475ed6f) - Bug 1217170: P1. Rename functions to explicitly reflect what they are doing. r=kentuckyfriedtakahe (70c81a8179) - Bug 1070216 - Split DOMMediaStream::InitStreamCommon into three. r=roc (1bda71cc88) - Bug 1215582 - Rename Blacklist to Block list in GStreamerFormatReader. r=gerald (4f08077f5e) - Bug 1170958 - Destroy track-locked MediaInputPorts when the track ends. r=roc (ff3922a2d6) - Bug 1070216 - constify DOMMediaStream::Get[Audio/Video]Tracks(). r=roc (ba09f6f191) - Bug 1070216 - Guard against adding a track owned by one MSG to a stream owned by another. r=padenot (a80deb8b30) - Bug 1070216 - Implement MediaStream constructors. r=smaug,jib,padenot (3403ef2599) - Bug 1070216 - Guard against a null MediaInputPort in DOMMediaStream::FindPlaybackDOMTrack(). r=roc (453a9ffbc1) - Bug 1212783 - Expose TrackPort in DOMMediaStream.h r=roc (fb61c79ae7) - Bug 1219711 - Ensure MediaStreamTrack.enabled propagates across peer connections. r=jesup (d9d1e54dae) - Bug 1129051 - Fix double free in Camera Control Listener. Fix webrtc memory leak. r=aosmond (3e9b3bccfd) - Bug 1152260 - Generate focused event for drivers that do not notify us when using continuous auto focus. r=mikeh (6c7bd42fdc) - Bug 1175656 - Implement generation of recording posters in Gecko. r=dhylands,bz (51b2c66dc7) - Bug 1187364 - Part 1. Add ability for camera to pause/resume recording. r=dhylands,bz (c54c735e37) - Bug 1187364 - Part 2. Ensure that recording is resumed with a key frame. r=mchiang (c1c6048982) - Bug 1187364 - Part 3. Fix missing end comment in WebIDL. r=me,bz (7faf106cc1) - Bug 1212783 - Add a MediaStreamTrack to DOMCameraControl. r=aosmond (91e11efd3a) - Bug 1124338 - Fix possible camera cached parameters invalidation from underlying driver modification. r=aosmond (dea67dc155) - Bug 1196330 - Do not restart preview if configuration is unchanged. r=dhylands (097644f5d9) - Bug 1215372 - Filter empty camera face detected events at gonk layer. r=dhylands (733efe50eb) - Bug 1179726 - Prefer lower resolutions than 4kuhd as the default video recording profile. r=dhylands (27c71273dc) - Bug 1222122 - Add picture size to verified parameters when reconfiguring the camera. r=dhylands (8c1fac6a4a) - Bug 1141267 - register CameraThread with profiler, r=aosmond (299592a024) - Bug 1008483 - removes the RW lock in CameraControlImpl and replaces it with a standard mutex. r=aosmond (45936cb90d) - Bug 1008483 - Part 2. Readd missing nsPrintfCString.h include which has broken some local builds. r=me (9dd84b0f19) - Bug 1191731 - Update poster API to allow application control over when poster is saved. r=bz, r=dhylands (73f9e7e0f4) - Bug 1155648 - Fix documentation for DOMMediaStream::OnTracksAvailable. r=jesup (702828c304) - Bug 1217170: [MSE] P2. Enable WebM/MSE on systems with no MP4/H264 support. r=kentuckyfriedtakahe (0b814b0708) - Bug 1213177: Enable WebM on machines where H264 HW decoding is disabled. r=kentuckyfriedtakahe (e64da2ea24) - add back some sps telemetry (52c2c64f5b) - missing bit of Bug 1195073: [MSE/webm] P1 (9c45e82c3d) - Bug 1150305 - sourcebuffer.buffered returns the same object if not changed. r=roc, r=bz, r=jya (6005d56c0c) - Bug 1215447 - move flag setting from SeekStarted() to Seek(). r=roc. (a646b744c1) - Bug 1119936 - Audio from FM Radio or Music app ceases to play when switching between front/back camera. r=roc (1a60aa7d69) - Bug 1186806 - Part 1: Replace nsBaseHashtable::EnumerateRead() with iterators in HTMLFormControlsCollection. r=khuey (ccb8cb180a) - Bug 1186806 - Part 2: Use NS_IMPL_CYCLE_COLLECTION_TRAVERSE instead of manual traversal in HTMLFormElement. r=khuey (57e6eabf1b) - Bug 1186806 - Part 3: Replace nsBaseHashtable::EnumerateRead() with iterators in HTMLMediaElement. r=khuey (243ef6e83b) - Bug 1186806 - Part 4: Replace nsBaseHashtable::EnumerateRead() with iterators in HTMLPropertiesCollection. r=khuey (499bdef85f) - Bug 1163958 - Reduce the allocation in MediaStreamGraph - patch 3 CLOSED TREE (a557661df1) - Bug 1219330 - Prevent the creation of TextureClient after shutdown. r=mattwoodrow (a6c047d54f) - Bug 1205559: Make TextureChild/TextureClient thread-safe. r=nical (307c089631) - missing bit of 1219330 (0e351ea419) - nsRefPtr -> RefPtr (07ba248e69) - Bug 1215023. Part 1 - make MediaDecoder::mOwner a const member. We will check mShuttingDown before calling functions of mOwner. r=kinetik. (da7f201815) - Bug 1215023. Part 2 - remove null check of mOwner. We check mShuttingDown to know whether it is valid to call functions of mOwner. r=kinetik. (8d28a04bbe) - Bug 1220558. Part 2 - remove unused members. r=jya. (d3a9ed8c68) - Bug 1223599 - Remove the throttling argument from AbstractMediaDecoder::NotifyDataArrived(). r=jya. (320323ff1d) - Bug 1194606 - Make MediaDecoderStateMachine capable of requesting different kind (decoded/raw) of media data. r=jya (1e2b6a5c44) - Bug 1197075: P3. Decode frames ahead of MDSM requesting them. r=edwin This makes the media.*-decode-ahead pref performs more according to its name. We decode audio and video in advance so a MediaDataPromise can be resolved almost instantly. Default is 2. (b3f56447c4) - Bug 1189964 - Fix bustage. r=bustage CLOSED TREE (afaa49b4b5) - Bug 1212149 - e10s support for opening notification settings. r=wchen (f0e7778fb6) - Bug 1215644 - Use child process volume service cache for available and storage status requests. r=dhylands (dfd49f2ef3) - bug 1215552 - nsHttpConnectionMgr::PostEvent shouldnt manually ref count r=hurley (5e2f1886e6) - Bug 1219392 - Capitalize mozilla::unused to avoid conflicts. r=froydnj (0c8bb7f15a) - bug 1217834 - buzzfeed packet loss r=dragana (e9a60b605f) - Bug 1168033 - Add a comment to nsHttpConnectionMgr.cpp explaining the assignment of attemptedOptimisticPipeline. r=mcmanus (2451996350) - bug 1189645 - remove spdy telem r=hurley (cda90abbdb) - Bug 1148268 - fixed misspelling attribute mActorDestoryed. r=dhyland. (3615d68765) - Bug 1216031 - Make MediaDecoder::mVideoFrameContainer const. r=kinetik. (a3feb9d6bc) - missing bits of Bug 1165515 - Part 13-2 (009e32281f) - Bug 1131473 - crash in -[NativeMenuItemTarget menuItemHit:]. r=spohl (ea2da6441c) - Bug 1216416 - Fix -Wimplicit-fallthrough warnings in widget/cocoa. r=spohl (faaa390b20) - Bug 1181977 - Firefox app menu contains only "Quit" in certain edgecases. r=spohl (0b9d912961)
518 lines
19 KiB
Plaintext
518 lines
19 KiB
Plaintext
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
/* Camera regions are used to set focus and metering areas;
|
|
the coordinates are referenced to the sensor:
|
|
(-1000, -1000) is the top-left corner
|
|
(1000, 1000) is the bottom-right corner
|
|
The weight of the region can range from 0 to 1000. */
|
|
dictionary CameraRegion
|
|
{
|
|
long top = -1000;
|
|
long left = -1000;
|
|
long bottom = 1000;
|
|
long right = 1000;
|
|
unsigned long weight = 1000;
|
|
};
|
|
|
|
/* The position information to record in the image header.
|
|
'NaN' indicates the information is not available. */
|
|
dictionary CameraPosition
|
|
{
|
|
unrestricted double latitude = NaN;
|
|
unrestricted double longitude = NaN;
|
|
unrestricted double altitude = NaN;
|
|
unrestricted double timestamp = NaN;
|
|
};
|
|
|
|
/*
|
|
Options for takePicture().
|
|
*/
|
|
dictionary CameraPictureOptions
|
|
{
|
|
/* an object with a combination of 'height' and 'width' properties
|
|
chosen from CameraCapabilities.pictureSizes */
|
|
CameraSize pictureSize = null;
|
|
|
|
/* one of the file formats chosen from
|
|
CameraCapabilities.fileFormats */
|
|
DOMString fileFormat = "";
|
|
|
|
/* the rotation of the image in degrees, from 0 to 270 in
|
|
steps of 90; this doesn't affect the image, only the
|
|
rotation recorded in the image header.*/
|
|
long rotation = 0;
|
|
|
|
/* an object containing any or all of 'latitude', 'longitude',
|
|
'altitude', and 'timestamp', used to record when and where
|
|
the image was taken. e.g.
|
|
{
|
|
latitude: 43.647118,
|
|
longitude: -79.3943,
|
|
altitude: 500
|
|
// timestamp not specified, in this case, and
|
|
// won't be included in the image header
|
|
}
|
|
|
|
can be null in the case where position information isn't
|
|
available/desired.
|
|
|
|
'altitude' is in metres; 'timestamp' is UTC, in seconds from
|
|
January 1, 1970.
|
|
*/
|
|
CameraPosition position = null;
|
|
|
|
/* the number of seconds from January 1, 1970 UTC. This can be
|
|
different from the positional timestamp (above). */
|
|
// XXXbz this should really accept a date too, no?
|
|
long long dateTime = 0;
|
|
};
|
|
|
|
/* These properties affect the actual video recording, e.g.
|
|
{
|
|
rotation: 0,
|
|
maxFileSizeBytes: 1024 * 1024,
|
|
maxVideoLengthMs: 0
|
|
}
|
|
|
|
'rotation' is the degrees clockwise to rotate the recorded video; if
|
|
this options is not supported, it will be ignored; if this option is
|
|
missing, the default is 0.
|
|
|
|
'maxFileSizeBytes' is the maximum size in bytes to which the recorded
|
|
video file will be allowed to grow.
|
|
|
|
'maxVideoLengthMs' is the maximum length in milliseconds to which the
|
|
recorded video will be allowed to grow.
|
|
|
|
if either 'maxFileSizeBytes' or 'maxVideoLengthMs' is missing or zero,
|
|
that limit will be disabled; if either value is out of range, it will
|
|
be clamped from 0 to the upper limit for an 'unsigned long long'.
|
|
*/
|
|
dictionary CameraStartRecordingOptions
|
|
{
|
|
long rotation = 0;
|
|
[Clamp]
|
|
unsigned long long maxFileSizeBytes = 0;
|
|
[Clamp]
|
|
unsigned long long maxVideoLengthMs = 0;
|
|
|
|
/* If startRecording() is called with flashMode set to "auto" and the
|
|
camera has determined that the scene is poorly lit, the flash mode
|
|
will be automatically changed to "torch" until stopRecording() is
|
|
called. During this time, flashMode will reflect the new setting. If
|
|
flashMode is changed while recording is in progress, the new setting
|
|
will be left as-is on stopRecording(). If the camera does not
|
|
support this setting, it will be ignored. */
|
|
boolean autoEnableLowLightTorch = false;
|
|
|
|
/* If true, a poster JPG will be created from the recording and issued
|
|
via the poster event. PosterCreated or PosterFailed recording state
|
|
changes will indicate whether or not it was created. */
|
|
boolean createPoster = false;
|
|
};
|
|
|
|
/*
|
|
attributes here affect the preview, any pictures taken, and/or
|
|
any video recorded by the camera.
|
|
*/
|
|
[Func="nsDOMCameraControl::HasSupport"]
|
|
interface CameraControl : MediaStream
|
|
{
|
|
[Constant, Cached]
|
|
readonly attribute CameraCapabilities capabilities;
|
|
|
|
/* one of the values chosen from capabilities.effects;
|
|
default is "none" */
|
|
[Throws]
|
|
attribute DOMString effect;
|
|
|
|
/* one of the values chosen from capabilities.whiteBalanceModes;
|
|
default is "auto" */
|
|
[Throws]
|
|
attribute DOMString whiteBalanceMode;
|
|
|
|
/* one of the values chosen from capabilities.sceneModes;
|
|
default is "auto" */
|
|
[Throws]
|
|
attribute DOMString sceneMode;
|
|
|
|
/* one of the values chosen from capabilities.flashModes;
|
|
default is "auto" */
|
|
[Throws]
|
|
attribute DOMString flashMode;
|
|
|
|
/* one of the values chosen from capabilities.focusModes;
|
|
default is "auto", if supported, or "fixed" */
|
|
[Throws]
|
|
attribute DOMString focusMode;
|
|
|
|
/* one of the values chosen from capabilities.zoomRatios; other
|
|
values will be rounded to the nearest supported value;
|
|
default is 1.0 */
|
|
[Throws]
|
|
attribute double zoom;
|
|
|
|
/* an array of one or more objects that define where the
|
|
camera will perform light metering, each defining the properties:
|
|
{
|
|
top: -1000,
|
|
left: -1000,
|
|
bottom: 1000,
|
|
right: 1000,
|
|
weight: 1000
|
|
}
|
|
|
|
'top', 'left', 'bottom', and 'right' all range from -1000 at
|
|
the top-/leftmost of the sensor to 1000 at the bottom-/rightmost
|
|
of the sensor.
|
|
|
|
objects missing one or more of these properties will be ignored;
|
|
if the array contains more than capabilities.maxMeteringAreas,
|
|
extra areas will be ignored.
|
|
|
|
if this setter is called with no arguments, the camera will
|
|
determine metering areas on its own. */
|
|
[Throws]
|
|
sequence<CameraRegion> getMeteringAreas();
|
|
[Throws]
|
|
void setMeteringAreas(optional sequence<CameraRegion> meteringAreas);
|
|
|
|
/* an array of one or more objects that define where the camera will
|
|
perform auto-focusing, with the same definition as meteringAreas.
|
|
|
|
if the array contains more than capabilities.maxFocusAreas, extra
|
|
areas will be ignored.
|
|
|
|
if this setter is called with no arguments, the camera will
|
|
determine focus areas on its own. */
|
|
[Throws]
|
|
sequence<CameraRegion> getFocusAreas();
|
|
[Throws]
|
|
void setFocusAreas(optional sequence<CameraRegion> focusAreas);
|
|
|
|
/* focal length in millimetres */
|
|
[Throws]
|
|
readonly attribute double focalLength;
|
|
|
|
/* the distances in metres to where the image subject appears to be
|
|
in focus. 'focusDistanceOptimum' is where the subject will appear
|
|
sharpest; the difference between 'focusDistanceFar' and
|
|
'focusDistanceNear' is the image's depth of field.
|
|
|
|
'focusDistanceFar' may be infinity. */
|
|
[Throws]
|
|
readonly attribute double focusDistanceNear;
|
|
[Throws]
|
|
readonly attribute double focusDistanceOptimum;
|
|
[Throws]
|
|
readonly attribute unrestricted double focusDistanceFar;
|
|
|
|
/* over- or under-expose the image; acceptable values must range from
|
|
minExposureCompensation to maxExposureCompensation in steps of
|
|
stepExposureCompensation. Invalid values will be rounded to the nearest
|
|
valid value; out-of-bounds values will be limited to the range
|
|
supported by the camera. */
|
|
[Throws]
|
|
attribute double exposureCompensation;
|
|
|
|
/* one of the values chosen from capabilities.isoModes; default
|
|
value is "auto" if supported. */
|
|
[Throws]
|
|
attribute DOMString isoMode;
|
|
|
|
/* the event dispatched on the camera's shutter event, to trigger
|
|
a shutter sound and/or a visual shutter indicator.
|
|
|
|
contains no event-specific data. */
|
|
attribute EventHandler onshutter;
|
|
|
|
/* the event dispatched when the camera hardware is closed; this may
|
|
be due to a system failure, another process taking over the camera,
|
|
or a call to release().
|
|
|
|
The event has a 'reason' attribute that will be one of the following
|
|
string values:
|
|
- SystemFailure : the camera subsystem failed and was closed;
|
|
- HardwareReleased : a call to release() was successful;
|
|
- NotAvailable : the camera hardware is in use by another process.
|
|
*/
|
|
attribute EventHandler onclose;
|
|
|
|
/* the event dispatched when the recorder changes state, either because
|
|
the recording process encountered an error, or because one of the
|
|
recording limits (see CameraStartRecordingOptions) was reached.
|
|
|
|
event type is CameraStateChangeEvent where:
|
|
'newState' is one of the following states:
|
|
'Started' if the recording has begun capturing data
|
|
'Stopped' when the recording has completed (success and failure)
|
|
'Paused' if the recording is paused
|
|
'Resumed' if the recording is resumed after pausing
|
|
'PosterCreated' if a poster was requested and created
|
|
'PosterFailed' if a poster was requested and failed to create
|
|
'FileSizeLimitReached' if stopped due to file size limit
|
|
'VideoLengthLimitReached' if stopped due to a time limit
|
|
'TrackCompleted' if audio or video track complete when stopping
|
|
'TrackFailed' if audio or video track incomplete when stopping
|
|
'MediaRecorderFailed' if failed due to local error
|
|
'MediaServerFailed' if failed due to media server */
|
|
attribute EventHandler onrecorderstatechange;
|
|
|
|
/* the event dispatched when a poster is successfully captured; it is of the
|
|
type BlobEvent, where the data attribute contains the poster. */
|
|
attribute EventHandler onposter;
|
|
|
|
/* the event dispatched when the viewfinder stops or starts,
|
|
useful for synchronizing other UI elements.
|
|
|
|
event type is CameraStateChangeEvent where:
|
|
'newState' is the new preview state */
|
|
attribute EventHandler onpreviewstatechange;
|
|
|
|
/* the size of the picture to be returned by a call to takePicture();
|
|
an object with 'height' and 'width' properties that corresponds to
|
|
one of the options returned by capabilities.pictureSizes.
|
|
|
|
note that unlike when one uses setConfiguration instead to update the
|
|
picture size, this will not recalculate the ideal preview size. */
|
|
[Throws]
|
|
CameraSize getPictureSize();
|
|
[Throws]
|
|
void setPictureSize(optional CameraSize size);
|
|
|
|
/* if the image blob to be returned by takePicture() supports lossy
|
|
compression, this setting controls the quality-size trade-off;
|
|
valid values range from 0.0 for smallest size/worst quality to 1.0
|
|
for largest size/best quality. Note that depending on the range of
|
|
values supported by the underlying platform, this attribute may not
|
|
'get' the exact value that was previously 'set'. If this setting is
|
|
not supported, it is ignored. */
|
|
[Throws]
|
|
attribute double pictureQuality;
|
|
|
|
/* the size of the thumbnail to be included in the picture returned
|
|
by a call to takePicture(), assuming the chosen fileFormat supports
|
|
one; an object with 'height' and 'width' properties that corresponds
|
|
to one of the options returned by capabilities.pictureSizes.
|
|
|
|
this setting should be considered a hint: the implementation will
|
|
respect it when possible, and override it if necessary. */
|
|
[Throws]
|
|
CameraSize getThumbnailSize();
|
|
[Throws]
|
|
void setThumbnailSize(optional CameraSize size);
|
|
|
|
/* the angle, in degrees, that the image sensor is mounted relative
|
|
to the display; e.g. if 'sensorAngle' is 270 degrees (or -90 degrees),
|
|
then the preview stream needs to be rotated +90 degrees to have the
|
|
same orientation as the real world. */
|
|
[Constant, Cached]
|
|
readonly attribute long sensorAngle;
|
|
|
|
/* the mode the camera will use to determine the correct exposure of
|
|
the scene; supported modes are exposed by capabilities.meteringModes. */
|
|
[Throws]
|
|
attribute DOMString meteringMode;
|
|
|
|
/* tell the camera to attempt to focus the image */
|
|
[Throws]
|
|
Promise<boolean> autoFocus();
|
|
|
|
/* the event dispatched whenever the focus state changes due to calling
|
|
autoFocus or due to continuous autofocus.
|
|
|
|
if continuous autofocus is supported and focusMode is set to enable it,
|
|
then this event is dispatched whenever the camera decides to start and
|
|
stop moving the focus position; it can be used to update a UI element to
|
|
indicate that the camera is still trying to focus, or has finished. Some
|
|
platforms do not support this event, in which case the callback is never
|
|
invoked.
|
|
|
|
event type is CameraStateChangeEvent where:
|
|
'newState' is one of the following states:
|
|
'focused' if the focus is now set
|
|
'focusing' if the focus is moving
|
|
'unfocused' if last attempt to focus failed */
|
|
attribute EventHandler onfocus;
|
|
|
|
/* capture an image and return it as a blob to the 'onSuccess' callback;
|
|
if the camera supports it, this may be invoked while the camera is
|
|
already recording video.
|
|
|
|
invoking this function will stop the preview stream, which must be
|
|
manually restarted by calling resumePreview(). */
|
|
[Throws]
|
|
Promise<Blob> takePicture(optional CameraPictureOptions options);
|
|
|
|
/* the event dispatched when a picture is successfully taken; it is of the
|
|
type BlobEvent, where the data attribute contains the picture. */
|
|
attribute EventHandler onpicture;
|
|
|
|
/* start recording video; 'options' is a CameraStartRecordingOptions object.
|
|
If the success/error callbacks are not used, one may determine success by
|
|
waiting for the recorderstatechange event. */
|
|
[Throws]
|
|
Promise<void> startRecording(CameraStartRecordingOptions options,
|
|
DeviceStorage storageArea,
|
|
DOMString filename);
|
|
|
|
/* stop recording video. */
|
|
[Throws]
|
|
void stopRecording();
|
|
|
|
/* pause recording video. The camera remains active but audio and video
|
|
frames are no longer saved in the output file. If called when not
|
|
recording or already paused, it fails silently. */
|
|
[Throws]
|
|
void pauseRecording();
|
|
|
|
/* resume recording video while paused. If called when not recording or
|
|
not paused, it fails silently. */
|
|
[Throws]
|
|
void resumeRecording();
|
|
|
|
/* call in or after the takePicture() onSuccess callback to
|
|
resume the camera preview stream. */
|
|
[Throws]
|
|
void resumePreview();
|
|
|
|
/* release the camera so that other applications can use it; you should
|
|
probably call this whenever the camera is not longer in the foreground
|
|
(depending on your usage model).
|
|
|
|
once this is called, the camera control object is to be considered
|
|
defunct; a new instance will need to be created to access the camera. */
|
|
[Throws]
|
|
Promise<void> release();
|
|
|
|
/* changes the camera configuration on the fly. */
|
|
[Throws]
|
|
Promise<CameraConfiguration> setConfiguration(optional CameraConfiguration configuration);
|
|
|
|
/* the event dispatched when the camera is successfully configured.
|
|
|
|
event type is CameraConfigurationEvent which has the same members as
|
|
CameraConfiguration. */
|
|
attribute EventHandler onconfigurationchange;
|
|
|
|
/* if focusMode is set to either 'continuous-picture' or 'continuous-video',
|
|
then calling autoFocus() will trigger its onSuccess callback immediately
|
|
if the camera was either successfully focused, or if no focus could be
|
|
acquired; if the focus acquisition is still in progress, the onSuccess
|
|
callback will be invoked later, its argument indicating success or
|
|
failure.
|
|
|
|
once autoFocus() is called with a continuous autofocus mode set, the
|
|
continuous autofocus process is stopped and focus is locked in the
|
|
current state until this method is called.
|
|
*/
|
|
[Throws]
|
|
void resumeContinuousFocus();
|
|
};
|
|
|
|
/* The information of the each face detected by a camera device, e.g.
|
|
{
|
|
id: 1,
|
|
score: 80,
|
|
bound: { left: -203,
|
|
top: -400,
|
|
right: 300,
|
|
bottom: 250 },
|
|
leftEye: { x: -100,
|
|
y: -200 },
|
|
rightEye: { x: 100,
|
|
y: 100 },
|
|
mouth: { x: 150,
|
|
y: 150 } }
|
|
|
|
'id' is an unique value per face while the face is visible to the tracker.
|
|
If the face leaves the viewfinder and then returns, it will be assigned
|
|
a new value.
|
|
|
|
'score' is the confidence level for the detection of the face.
|
|
This range is 1 to 100, where 100 is the highest confidence.
|
|
|
|
'bounds' is the bounds of the face. It is guaranteed left < right and
|
|
top < bottom. The coordinates can be smaller than -1000 or bigger than 1000.
|
|
But at least one vertex will be within (-1000, -1000) and (1000, 1000).
|
|
|
|
'leftEye' is the coordinates of the centre of the left eye. The coordinates
|
|
are in the same space as the ones for 'bounds'. This is an optional field
|
|
and may not be supported on all devices. If it is not supported or detected,
|
|
the value will be set to null. The x and y coordinates are bounded by the
|
|
range (-1000, 1000) where:
|
|
{ x: -1000, y: -1000 } is the top-left corner
|
|
{ x: 1000, y: 1000 } is the bottom-right corner
|
|
|
|
'rightEye' is the coordinates of the detected right eye; null if not
|
|
supported or detected. Same boundary conditions as 'leftEye'.
|
|
|
|
'mouth' is the coordinates of the detected mouth; null if not supported or
|
|
detected. Same boundary conditions as 'leftEye'.
|
|
*/
|
|
[Pref="camera.control.face_detection.enabled",
|
|
Func="DOMCameraDetectedFace::HasSupport",
|
|
Constructor(optional CameraDetectedFaceInit initDict)]
|
|
interface CameraDetectedFace
|
|
{
|
|
readonly attribute unsigned long id;
|
|
|
|
readonly attribute unsigned long score;
|
|
|
|
readonly attribute DOMRect bounds;
|
|
|
|
readonly attribute boolean hasLeftEye;
|
|
readonly attribute DOMPoint? leftEye;
|
|
|
|
readonly attribute boolean hasRightEye;
|
|
readonly attribute DOMPoint? rightEye;
|
|
|
|
readonly attribute boolean hasMouth;
|
|
readonly attribute DOMPoint? mouth;
|
|
};
|
|
|
|
dictionary CameraDetectedFaceInit
|
|
{
|
|
unsigned long id = 0;
|
|
unsigned long score = 100;
|
|
CameraRegion bounds;
|
|
boolean hasLeftEye = false;
|
|
DOMPointInit leftEye;
|
|
boolean hasRightEye = false;
|
|
DOMPointInit rightEye;
|
|
boolean hasMouth = false;
|
|
DOMPointInit mouth;
|
|
};
|
|
|
|
callback CameraFaceDetectionCallback = void (sequence<CameraDetectedFace> faces);
|
|
|
|
partial interface CameraControl
|
|
{
|
|
/* Starts the face detection. This should be called after the preview is
|
|
started. The camera will periodically call 'onFacesDetected' with a
|
|
sequence of zero or one or more detected faces in the preview frame.
|
|
|
|
How often the callback is invoked is implementation dependent.
|
|
|
|
This method throws an exception if face detection fails to start.
|
|
*/
|
|
[Throws, Pref="camera.control.face_detection.enabled"]
|
|
void startFaceDetection();
|
|
|
|
/* Stops the face detection.
|
|
|
|
This method throws an exception if face detection can't be stopped.
|
|
*/
|
|
[Throws, Pref="camera.control.face_detection.enabled"]
|
|
void stopFaceDetection();
|
|
|
|
/* CameraFacesDetectedEvent */
|
|
[Pref="camera.control.face_detection.enabled"]
|
|
attribute EventHandler onfacesdetected;
|
|
};
|