Add video snapshot CTS.
bug:5169599
Change-Id: I46f4b3de3c9fd67aff0fe037e3171ce8a673b0ba
diff --git a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
index f6aa2a2..78def20 100644
--- a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
@@ -344,20 +344,20 @@
int nCameras = Camera.getNumberOfCameras();
for (int id = 0; id < nCameras; id++) {
Log.v(TAG, "Camera id=" + id);
- testTakePictureByCamera(id);
+ initializeMessageLooper(id);
+ mCamera.startPreview();
+ testTakePictureByCamera();
+ terminateMessageLooper();
}
}
- private void testTakePictureByCamera(int cameraId) throws Exception {
- initializeMessageLooper(cameraId);
+ private void testTakePictureByCamera() throws Exception {
Size pictureSize = mCamera.getParameters().getPictureSize();
- mCamera.startPreview();
mCamera.autoFocus(mAutoFocusCallback);
assertTrue(waitForFocusDone());
mJpegData = null;
mCamera.takePicture(mShutterCallback, mRawPictureCallback, mJpegPictureCallback);
waitForSnapshotDone();
- terminateMessageLooper();
assertTrue("Shutter callback not received", mShutterCallbackResult);
assertTrue("Raw picture callback not received", mRawPictureCallbackResult);
assertTrue("Jpeg picture callback not recieved", mJpegPictureCallbackResult);
@@ -810,12 +810,13 @@
int nCameras = Camera.getNumberOfCameras();
for (int id = 0; id < nCameras; id++) {
Log.v(TAG, "Camera id=" + id);
- testJpegThumbnailSizeByCamera(id);
+ initializeMessageLooper(id);
+ testJpegThumbnailSizeByCamera(false);
+ terminateMessageLooper();
}
}
- private void testJpegThumbnailSizeByCamera(int cameraId) throws Exception {
- initializeMessageLooper(cameraId);
+ private void testJpegThumbnailSizeByCamera(boolean recording) throws Exception {
// Thumbnail size parameters should have valid values.
Parameters p = mCamera.getParameters();
Size size = p.getJpegThumbnailSize();
@@ -826,7 +827,7 @@
assertTrue(sizes.contains(mCamera.new Size(0, 0)));
// Test if the thumbnail size matches the setting.
- mCamera.startPreview();
+ if (!recording) mCamera.startPreview();
mCamera.takePicture(mShutterCallback, mRawPictureCallback, mJpegPictureCallback);
waitForSnapshotDone();
assertTrue(mJpegPictureCallbackResult);
@@ -845,14 +846,12 @@
Size actual = mCamera.getParameters().getJpegThumbnailSize();
assertEquals(0, actual.width);
assertEquals(0, actual.height);
- mCamera.startPreview();
+ if (!recording) mCamera.startPreview();
mCamera.takePicture(mShutterCallback, mRawPictureCallback, mJpegPictureCallback);
waitForSnapshotDone();
assertTrue(mJpegPictureCallbackResult);
exif = new ExifInterface(JPEG_PATH);
assertFalse(exif.hasThumbnail());
-
- terminateMessageLooper();
}
@UiThreadTest
@@ -860,15 +859,16 @@
int nCameras = Camera.getNumberOfCameras();
for (int id = 0; id < nCameras; id++) {
Log.v(TAG, "Camera id=" + id);
- testJpegExifByCamera(id);
+ initializeMessageLooper(id);
+ testJpegExifByCamera(false);
+ terminateMessageLooper();
}
}
- private void testJpegExifByCamera(int cameraId) throws Exception {
- initializeMessageLooper(cameraId);
+ private void testJpegExifByCamera(boolean recording) throws Exception {
Camera.Parameters parameters = mCamera.getParameters();
- mCamera.startPreview();
- double focalLength = (double)parameters.getFocalLength();
+ if (!recording) mCamera.startPreview();
+ double focalLength = parameters.getFocalLength();
mCamera.takePicture(mShutterCallback, mRawPictureCallback, mJpegPictureCallback);
waitForSnapshotDone();
ExifInterface exif = new ExifInterface(JPEG_PATH);
@@ -878,8 +878,7 @@
assertTrue(exif.getAttributeInt(ExifInterface.TAG_IMAGE_WIDTH, 0) != 0);
assertTrue(exif.getAttributeInt(ExifInterface.TAG_IMAGE_LENGTH, 0) != 0);
checkGpsDataNull(exif);
- double exifFocalLength = (double)exif.getAttributeDouble(
- ExifInterface.TAG_FOCAL_LENGTH, -1);
+ double exifFocalLength = exif.getAttributeDouble(ExifInterface.TAG_FOCAL_LENGTH, -1);
assertEquals(focalLength, exifFocalLength, 0.001);
// Test gps exif tags.
@@ -889,14 +888,13 @@
testGpsExifValues(parameters, -89.736071, -179.441983, 100000, 1199145602, "NETWORK");
// Test gps tags do not exist after calling removeGpsData.
- mCamera.startPreview();
+ if (!recording) mCamera.startPreview();
parameters.removeGpsData();
mCamera.setParameters(parameters);
mCamera.takePicture(mShutterCallback, mRawPictureCallback, mJpegPictureCallback);
waitForSnapshotDone();
exif = new ExifInterface(JPEG_PATH);
checkGpsDataNull(exif);
- terminateMessageLooper();
}
private void testGpsExifValues(Parameters parameters, double latitude,
@@ -2790,4 +2788,58 @@
}
}
}
+
+ @UiThreadTest
+ public void testVideoSnapshot() throws Exception {
+ int nCameras = Camera.getNumberOfCameras();
+ for (int id = 0; id < nCameras; id++) {
+ Log.v(TAG, "Camera id=" + id);
+ testVideoSnapshotByCamera(id);
+ }
+ }
+
+ private void testVideoSnapshotByCamera(int cameraId) throws Exception {
+ initializeMessageLooper(cameraId);
+ Camera.Parameters parameters = mCamera.getParameters();
+ if (!parameters.isVideoSnapshotSupported()) return;
+
+ SurfaceHolder holder = getActivity().getSurfaceView().getHolder();
+
+ // Set the preview size.
+ CamcorderProfile profile = CamcorderProfile.get(cameraId,
+ CamcorderProfile.QUALITY_LOW);
+ setPreviewSizeByProfile(parameters, profile);
+
+ // Set the biggest picture size.
+ Size biggestSize = mCamera.new Size(-1, -1);
+ for (Size size: parameters.getSupportedPictureSizes()) {
+ if (biggestSize.width < size.width) {
+ biggestSize = size;
+ }
+ }
+ parameters.setPictureSize(biggestSize.width, biggestSize.height);
+
+ mCamera.setParameters(parameters);
+ mCamera.startPreview();
+ mCamera.unlock();
+ MediaRecorder recorder = new MediaRecorder();
+ try {
+ recorder.setCamera(mCamera);
+ recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
+ recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
+ recorder.setProfile(profile);
+ recorder.setOutputFile("/dev/null");
+ recorder.setPreviewDisplay(holder.getSurface());
+ recorder.prepare();
+ recorder.start();
+ testTakePictureByCamera();
+ testJpegExifByCamera(true);
+ testJpegThumbnailSizeByCamera(true);
+ recorder.stop();
+ } finally {
+ recorder.release();
+ mCamera.lock();
+ }
+ terminateMessageLooper();
+ }
}