Merge "CTS Verifier: Camera Video test with different resolutions (revision)." into klp-dev
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/camera/video/CameraVideoActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/camera/video/CameraVideoActivity.java
index a67a498..22f1813 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/camera/video/CameraVideoActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/camera/video/CameraVideoActivity.java
@@ -80,9 +80,9 @@
private MediaRecorder mMediaRecorder;
- private List<Camera.Size> mPreviewSizes;
- private Camera.Size mNextPreviewSize;
- private Camera.Size mPreviewSize;
+ private List<Size> mPreviewSizes;
+ private Size mNextPreviewSize;
+ private Size mPreviewSize;
private List<Integer> mVideoSizeIds;
private int mCurrentVideoSizeId;
@@ -488,8 +488,7 @@
}
}
- // Match preview size with recording size
- private Camera.Size matchPreviewRecordSize() {
+ private Size findRecordSize() {
int[] possibleQuality = {
CamcorderProfile.QUALITY_QCIF,
CamcorderProfile.QUALITY_CIF,
@@ -506,8 +505,8 @@
mCamera.new Size(1920, 1080)
};
- Camera.Size minSize = mCamera.new Size(Integer.MAX_VALUE, Integer.MAX_VALUE);
- Camera.Size maxSize = mCamera.new Size(0, 0);
+ Size minSize = mCamera.new Size(Integer.MAX_VALUE, Integer.MAX_VALUE);
+ Size maxSize = mCamera.new Size(0, 0);
for (int i = 0; i < possibleQuality.length; i++) {
if (mVideoSizeIds.contains(possibleQuality[i])) {
@@ -530,22 +529,55 @@
sizes[i].height));
}
- Camera.Size matchedSize = null;
+ Size recordSize = null;
for (int i = 0; i < qualityList.size(); i++) {
if (mCurrentVideoSizeId == qualityList.get(i).videoSizeId) {
- matchedSize = mCamera.new Size(qualityList.get(i).width,
+ recordSize = mCamera.new Size(qualityList.get(i).width,
qualityList.get(i).height);
break;
}
}
- if (VERBOSE) {
- Log.v(TAG, "matchPreviewRecordSize: found a match");
+ if (recordSize == null) {
+ Log.e(TAG, "findRecordSize: did not find a match");
+ failTest("Cannot find video size");
}
+ return recordSize;
+ }
+
+ // Match preview size with current recording size mCurrentVideoSizeId
+ private Size matchPreviewRecordSize() {
+ Size recordSize = findRecordSize();
+
+ Size matchedSize = null;
+ // First try to find exact match in size
+ for (int i = 0; i < mPreviewSizes.size(); i++) {
+ if (mPreviewSizes.get(i).equals(recordSize)) {
+ matchedSize = mCamera.new Size(recordSize.width, recordSize.height);
+ break;
+ }
+ }
+ // Second try to find one with similar if not the same aspect ratio
if (matchedSize == null) {
- Log.e(TAG, "matchPreviewRecordSize: did not find a match");
- failTest("Cannot match preview size with video size");
+ for (int i = mPreviewSizes.size() - 1; i >= 0; i--) {
+ if (Math.abs((float)mPreviewSizes.get(i).width * recordSize.height /
+ mPreviewSizes.get(i).height / recordSize.width - 1) < 0.1) {
+ matchedSize = mCamera.new Size(mPreviewSizes.get(i).width,
+ mPreviewSizes.get(i).height);
+ break;
+ }
+ }
}
+ // Last resort, just use the first preview size
+ if (matchedSize == null) {
+ matchedSize = mCamera.new Size(mPreviewSizes.get(0).width,
+ mPreviewSizes.get(0).height);
+ }
+
+ if (VERBOSE) {
+ Log.v(TAG, "matchPreviewRecordSize " + matchedSize.width + "x" + matchedSize.height);
+ }
+
return matchedSize;
}
@@ -568,11 +600,11 @@
}
// Get preview resolutions
- List<Camera.Size> unsortedSizes = p.getSupportedPreviewSizes();
+ List<Size> unsortedSizes = p.getSupportedPreviewSizes();
- class SizeCompare implements Comparator<Camera.Size> {
+ class SizeCompare implements Comparator<Size> {
@Override
- public int compare(Camera.Size lhs, Camera.Size rhs) {
+ public int compare(Size lhs, Size rhs) {
if (lhs.width < rhs.width) return -1;
if (lhs.width > rhs.width) return 1;
if (lhs.height < rhs.height) return -1;
@@ -582,10 +614,10 @@
};
SizeCompare s = new SizeCompare();
- TreeSet<Camera.Size> sortedResolutions = new TreeSet<Camera.Size>(s);
+ TreeSet<Size> sortedResolutions = new TreeSet<Size>(s);
sortedResolutions.addAll(unsortedSizes);
- mPreviewSizes = new ArrayList<Camera.Size>(sortedResolutions);
+ mPreviewSizes = new ArrayList<Size>(sortedResolutions);
ArrayList<VideoSizeNamePair> availableVideoSizes = getVideoSizeNamePairs(id);
String[] availableVideoSizeNames = new String[availableVideoSizes.size()];
@@ -609,8 +641,8 @@
}
// Set initial values
- mNextPreviewSize = mPreviewSizes.get(0);
mCurrentVideoSizeId = mVideoSizeIds.get(0);
+ mNextPreviewSize = matchPreviewRecordSize();
mResolutionSpinner.setSelection(0);
// Set up correct display orientation