зеркало из https://github.com/mozilla/gecko-dev.git
259 строки
10 KiB
HTML
259 строки
10 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<title>Test for mozCameras.getCamera() with separate .setConfiguration() call</title>
|
|
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
|
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
</head>
|
|
<body>
|
|
<video id="viewfinder" width="200" height="200" autoplay></video>
|
|
<img src="#" alt="This image is going to load" id="testimage"/>
|
|
<script class="testbody" type="text/javascript;version=1.7">
|
|
|
|
var whichCamera = navigator.mozCameras.getListOfCameras()[0];
|
|
var options = {
|
|
mode: 'picture',
|
|
recorderProfile: 'high',
|
|
previewSize: {
|
|
width: 320,
|
|
height: 240
|
|
}
|
|
};
|
|
|
|
var config = {
|
|
dateTime: Date.now() / 1000,
|
|
pictureSize: null,
|
|
fileFormat: 'jpeg',
|
|
rotation: 90
|
|
};
|
|
|
|
function onError(e) {
|
|
ok(false, "Error " + e);
|
|
}
|
|
|
|
var capabilities = [ 'previewSizes', 'pictureSizes', 'fileFormats', 'maxFocusAreas', 'minExposureCompensation',
|
|
'maxExposureCompensation', 'stepExposureCompensation', 'maxMeteringAreas', 'videoSizes',
|
|
'recorderProfiles', 'zoomRatios', 'isoModes'];
|
|
|
|
var Camera = {
|
|
cameraObj: null,
|
|
_recording: false,
|
|
_currentTest: null,
|
|
_autoFocusSupported: 0,
|
|
_manuallyFocused: false,
|
|
_flashmodes: null,
|
|
_pictureSizes: null,
|
|
_previewSizes: null,
|
|
_whiteBalanceModes: null,
|
|
_zoomRatios: null,
|
|
_sceneModes: null,
|
|
_focusModes: null,
|
|
_zoomRatios: null,
|
|
_testsCompleted: 0,
|
|
_shutter: 0,
|
|
_config: {
|
|
dateTime: Date.now() / 1000,
|
|
pictureSize: null,
|
|
fileFormat: 'jpeg',
|
|
rotation: 90
|
|
},
|
|
_tests: null,
|
|
get viewfinder() {
|
|
return document.getElementById('viewfinder');
|
|
},
|
|
setFlashMode: function camera_setFlash(mode) {
|
|
this.cameraObj.flashMode = mode;
|
|
},
|
|
setFocus: function camera_setfocus(mode) {
|
|
this.cameraObj.focus = mode;
|
|
},
|
|
setZoom: function camera_setZoom(zoom) {
|
|
this.cameraObj.zoom = zoom;
|
|
},
|
|
getZoom: function camera_getZoom() {
|
|
return this.cameraObj.zoom;
|
|
},
|
|
getFileFormats: function camera_formats() {
|
|
this._fileFormats = this.cameraObj.capabilities.fileFormats;
|
|
},
|
|
getFlashModes: function camera_getFlash() {
|
|
this._flashmodes = this.cameraObj.capabilities.flashModes;
|
|
},
|
|
getFocusModes: function camera_getFocus() {
|
|
this._focusModes = this.cameraObj.capabilities.focusModes;
|
|
},
|
|
getSceneModes: function camera_getScene() {
|
|
this._sceneModes = this.cameraObj.capabilities.sceneModes;
|
|
},
|
|
getZoomRatios: function camera_getZoom() {
|
|
this._zoomRatios = this.cameraObj.capabilities.zoomRatios;
|
|
},
|
|
getWhiteBalance: function camera_white() {
|
|
this._whitebalanceModes = this.cameraObj.capabilities.whiteBalanceModes;
|
|
},
|
|
getPictureSizes: function camera_sizes() {
|
|
this._pictureSizes = this.cameraObj.capabilities.pictureSizes;
|
|
},
|
|
getPreviewSizes: function camera_preview() {
|
|
this._previewSizes = this.cameraObj.capabilities.previewSizes;
|
|
},
|
|
getZoomRatios: function camera_preview() {
|
|
this._zoomRatios = this.cameraObj.capabilities.zoomRatios;
|
|
},
|
|
takePictureSuccess: function taken_foto(blob) {
|
|
ok(blob.size > 100 , "Blob Size Gathered = " + blob.size);
|
|
ok("image/" + this._currentTest.fileFormat === blob.type, "Blob Type = " + blob.type);
|
|
},
|
|
takePictureEvent: function taken_foto_evt(e) {
|
|
var blob = e.data;
|
|
var img = new Image();
|
|
var test = this._currentTest;
|
|
var onPreviewStateChange = function(e) {
|
|
if (e.newState === 'started') {
|
|
ok(true, "viewfinder is ready and playing after resume");
|
|
Camera.cameraObj.removeEventListener('previewstatechange', onPreviewStateChange);
|
|
Camera._testsCompleted++;
|
|
if(Camera._testsCompleted == Camera._tests.length) {
|
|
ok(true, "test finishing");
|
|
SimpleTest.finish();
|
|
} else {
|
|
Camera.runTests();
|
|
}
|
|
}
|
|
}
|
|
Camera.cameraObj.addEventListener('previewstatechange', onPreviewStateChange);
|
|
img.onload = function Imgsize() {
|
|
ok(this.width == test.pictureSize.width, "The image taken has the width " +
|
|
this.width + " pictureSize width = " + test.pictureSize.width);
|
|
ok(this.height == test.pictureSize.height, "The image taken has the height " +
|
|
this.height + " picturesize height = " + test.pictureSize.height);
|
|
Camera.cameraObj.resumePreview();
|
|
}
|
|
ok(blob.size > 100 , "Blob Size Gathered = " + blob.size);
|
|
ok("image/" + test.fileFormat == blob.type, "Blob Type = " + blob.type);
|
|
img.src = window.URL.createObjectURL(blob);
|
|
},
|
|
shutter: function onShutter () {
|
|
Camera._shutter++;
|
|
|
|
ok(Camera._shutter == (Camera._testsCompleted + 1), "on Shutter has been called " +
|
|
Camera._shutter + " times");
|
|
|
|
},
|
|
onReady: function onReady() {
|
|
var camcap = Camera.cameraObj.capabilities;
|
|
var tests = {};
|
|
for (var prop in capabilities) {
|
|
prop = capabilities[prop];
|
|
ok(camcap[prop] || isFinite(camcap[prop]) || camcap[prop] == null, "Camera Capability: " +
|
|
prop + " is exposed, value = " + JSON.stringify(camcap[prop]));
|
|
}
|
|
ok(camcap.maxMeteringAreas >= 0, "maxMeteringAreas = " + camcap.maxMeteringAreas);
|
|
ok(camcap.maxFocusAreas >= 0, "maxFocusAreas = " + camcap.maxFocusAreas);
|
|
for (var prop in camcap) {
|
|
if(camcap[prop] && camcap[prop].length > 1) {
|
|
tests[prop] = camcap[prop];
|
|
}
|
|
}
|
|
Camera.getPictureSizes();
|
|
Camera.getPreviewSizes();
|
|
Camera.getFileFormats();
|
|
Camera.getFocusModes();
|
|
Camera.getZoomRatios();
|
|
ok(Camera._previewSizes.length > 0, "previewSizes length = " + Camera._previewSizes.length);
|
|
ok(Camera._pictureSizes.length > 0, "picturesizes length = " + Camera._pictureSizes.length);
|
|
ok(Camera._fileFormats.length > 0, "file formats length = " + Camera._fileFormats.length);
|
|
ok(camcap.isoModes.length == 0, "ISO modes length = " + camcap.isoModes.length);
|
|
|
|
// The emulator doesn't support zoom, so these parameters will be very constrained
|
|
// For more ambitious tests, see test_camera_fake_parameters.html
|
|
ok(Camera._zoomRatios.length == 1, "zoom ratios length = " + Camera._zoomRatios.length);
|
|
ok(Camera.cameraObj.zoom == 1.0, "zoom = " + Camera.cameraObj.zoom);
|
|
// Test snapping to supported values
|
|
Camera.cameraObj.zoom = 0.9;
|
|
ok(Camera.cameraObj.zoom == 1.0, "zoom (lower limit) = " + Camera.cameraObj.zoom);
|
|
Camera.cameraObj.zoom = 1.1;
|
|
ok(Camera.cameraObj.zoom == 1.0, "zoom (upper limit) = " + Camera.cameraObj.zoom);
|
|
|
|
// Check image quality handling
|
|
Camera.cameraObj.pictureQuality = 0.0;
|
|
ok(Camera.cameraObj.pictureQuality == 0.0, "picture quality = " + Camera.cameraObj.pictureQuality);
|
|
Camera.cameraObj.pictureQuality = -0.1;
|
|
ok(Camera.cameraObj.pictureQuality == 0.0, "picture quality (minimum limit) = " + Camera.cameraObj.pictureQuality);
|
|
Camera.cameraObj.pictureQuality = -Math.pow(2, 80);
|
|
ok(Camera.cameraObj.pictureQuality == 0.0, "picture quality (BIG negative) = " + Camera.cameraObj.pictureQuality);
|
|
Camera.cameraObj.pictureQuality = 1.0;
|
|
ok(Camera.cameraObj.pictureQuality == 1.0, "picture quality = " + Camera.cameraObj.pictureQuality);
|
|
Camera.cameraObj.pictureQuality = 1.1;
|
|
ok(Camera.cameraObj.pictureQuality == 1.0, "picture quality (maximum limit) = " + Camera.cameraObj.pictureQuality);
|
|
Camera.cameraObj.pictureQuality = Math.pow(2, 80);
|
|
ok(Camera.cameraObj.pictureQuality == 1.0, "picture quality (BIG positive) = " + Camera.cameraObj.pictureQuality);
|
|
|
|
Camera._tests = new Array();
|
|
for (var i in Camera._pictureSizes) {
|
|
for (var l in Camera._fileFormats) {
|
|
var config = {
|
|
pictureSize: Camera._pictureSizes[i],
|
|
fileFormat: Camera._fileFormats[l]
|
|
};
|
|
Camera._tests.push(config);
|
|
}
|
|
}
|
|
Camera.runTests();
|
|
},
|
|
runTests: function run_tests() {
|
|
var test = this._tests[this._testsCompleted];
|
|
this._currentTest = test;
|
|
Camera.setFlashMode(test.flashMode);
|
|
config.fileFormat = test.fileFormat;
|
|
config.pictureSize = test.pictureSize;
|
|
ok(true, "testing picture size " + JSON.stringify(config.pictureSize));
|
|
Camera.cameraObj.takePicture(config).then(this.takePictureSuccess.bind(this), onError);
|
|
},
|
|
onConfigChange: function onConfigChange(config) {
|
|
ok(config.mode === options.mode, "configuration mode = " + config.mode);
|
|
ok(config.recorderProfile === options.recorderProfile, "recorder profile = " + config.recorderProfile);
|
|
ok(config.previewSize.width === options.previewSize.width &&
|
|
config.previewSize.height === options.previewSize.height,
|
|
"preview size (w x h) = " + config.previewSize.width + " x " + config.previewSize.height);
|
|
},
|
|
onPreviewStateChange: function onPreviewStateChange(e) {
|
|
if (e.newState === 'started') {
|
|
ok(true, "viewfinder is ready and playing");
|
|
Camera.cameraObj.removeEventListener('previewstatechange', Camera.onPreviewStateChange);
|
|
Camera.onReady();
|
|
}
|
|
},
|
|
setUp: function setup_tests() {
|
|
function onSuccess(d) {
|
|
Camera.cameraObj = d.camera;
|
|
Camera.cameraObj.addEventListener('previewstatechange', Camera.onPreviewStateChange);
|
|
Camera.cameraObj.addEventListener('configurationchanged', Camera.onConfigChange);
|
|
Camera.cameraObj.addEventListener('shutter', Camera.shutter);
|
|
Camera.cameraObj.addEventListener('picture', Camera.takePictureEvent.bind(Camera));
|
|
Camera.viewfinder.mozSrcObject = d.camera;
|
|
Camera.viewfinder.play();
|
|
SimpleTest.expectAssertions(0);
|
|
ok(true, "Camera Control object has been successfully initialized");
|
|
Camera.cameraObj.setConfiguration(options).then(Camera.onConfigChange, onError);
|
|
};
|
|
navigator.mozCameras.getCamera(whichCamera, null).then(onSuccess, onError);
|
|
}
|
|
}
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
window.addEventListener('beforeunload', function() {
|
|
Camera.viewfinder.mozSrcObject = null;
|
|
Camera.cameraObj.release();
|
|
Camera.cameraObj = null;
|
|
});
|
|
|
|
Camera.setUp();
|
|
|
|
</script>
|
|
</body>
|
|
|
|
</html>
|