This specification defines an API that provides scripted access to camera services in the hosting device.
Nokia hereby grants to the W3C a perpetual, nonexclusive, royalty-free, world-wide right and license under any Nokia copyrights on this contribution, to copy, publish and distribute the contribution under the W3C document licenses.
Additionally, should the submission be used as a contribution towards a W3C Activity, Nokia grants a right and license of the same scope to any derivative works prepared by the W3C and based on, or incorporating all or part of, the contribution. Nokia further agrees that any derivative works of this contribution prepared by the W3C shall be solely owned by the W3C.
Nokia Corporation agrees to offer W3C members and non-members granting reciprocal terms a non-assignable, non-sublicensable, worldwide and royalty free license to make, have made, use, sell, have sold, offer to sell, import, and distribute and dispose of implementations of any portion of the submission that is subsequently incorporated into a W3C Recommendation. Such license shall extend to all Essential Claims owned or controlled by Nokia Corporation and shall be available as long as the Recommendation is in effect.
This section is non-normative.
The Camera API defines a high level interface for accessing the camera of a hosting device.
The following code extract illustrates how to work with a camera service in the hosting device:
Example of instantiating a service object to access the device camera.
// Loads an instance of a camera interface identified by a service name // "device", an interface name "camera" and an interface version "1" or later. var myCamera = org.w3c.device.load("device", "camera", "1");
NOTE: the namespace for the service interface loader is tentative.
Example of launching a device camera application and retrieving the pictures taken.
// Creates a container div element and append it to the document body. var container = document.createElement("div"); // The browser viewport width in pixels. var screenWidth = window.innerWidth; // Appends the container element into the document. document.body.appendChild(container); // A callback function which retrieves the pictures taken by the device // camera application and appends them into the container div element. function callback(data, status, transactionId) { for (var i in data) { var img = document.createElement("img"); img.src = data[i].uri; // If the image width exceeds that of the browser viewport, // the image to scaled to fit the screen keeping the aspect ratio intact. if (data[i].format.width > screenWidth) { img.style.width = screenWidth + "px"; img.style.height = (data[i].format.height/data[i].format.width)*screenWidth + "px"; } container.appendChild(img); } } // Launch the device camera application and invokes the callback once the user exits // the camera application. transactionId = myCamera.startCamera(callback);
Example of retrieving image sizes and formats supported by hosting device camera.
var summary; var formats = myCamera.supportedFormats; for (var key in formats) { summary += key + ": " + formats[key] + "\n"; } alert(summary);
This section is non-normative.
This specification is limited to [define scope].
To be written ...
The API defined in this specification launches the camera application which allows the user to take pictures and provides a handle to the taken pictures. This information can potentially compromise user privacy and a conforming implementation of this specification must provide a mechanism that protects the user's privacy and this mechanism should ensure that such operations must be authenticated.
A conforming implementation of this specification must provide a mechanism that protects the user's privacy and this mechanism should ensure that privacy information is not revealed without user's informed consent.
The key words must, must not, required, should, should not, recommended, may and optional in this specification are to be interpreted as described in [RFC2119].
Implementations that use ECMAScript to implement the APIs defined in this specification must implement them in a manner consistent with the ECMAScript Bindings defined in [WebIDL].
The Camera
object can be used by scripts
to provide programmatic access to the camera application of the hosting device.
interface Camera { // Attributes readonly attribute sequence<FormatData> supportedFormats; // Methods int startCamera(in CameraCallback callback); }; interface CameraCallback { void handleEvent(in sequence<PictureData> pictures, in int status, in int transactionId); };
The supportedFormats
attribute represents an array of PictureData
objects which contain image sizes and formats supported by the hosting device
camera.
The startCamera()
method
takes the callback
argument. When called it must
immediately launch the device camera application and return a transactionId
.
When the user exits the camera application, the associated callback
function must be invoked asynchronously, with an array of
PictureData
objects representing pictures takes between the time period of invoking the
startCamera()
and exiting the camera application.
PictureData
objects are regular
ECMAScript objects that have the following properties:
interface PictureData { attribute DOMString uri; attribute FormatData format; };
The uri
attribute
attribute specifies the path to the picture file taken by camera as a Uniform
Resource Identifier (URI) conforming to [RFC3986].
The format
attribute
represents the picture
FormatData
object.
FormatData
objects are regular ECMAScript objects that have the following properties:
interface FormatData { attribute DOMString type; attribute int height; attribute int width; };
The type
attribute
represents the MIME type of the captured image. For example, a valid MIME type
for JPEG images is image/jpeg
.
The height
attribute
represents height of the image in pixels.
The width
attribute
represents width of the image in pixels.
On error, the APIs throw DeviceException
with an informative
error code. The DeviceException
interface and error constants
are defined in Appendix A.