Merge "Implementing getSupportedPictureSizes"

This commit is contained in:
Nipun Kwatra
2010-08-02 10:12:20 -07:00
committed by Android (Google) Code Review
2 changed files with 32 additions and 9 deletions

View File

@@ -126,9 +126,11 @@ private:
// The still camera may not support the demanded video width and height.
// We look for the supported picture sizes from the still camera and
// choose the size with either dimensions higher than the corresponding video
// dimensions. The still picture will be cropped to get the video frame.
void setPictureSizeToClosestSupported(int32_t width, int32_t height);
// choose the smallest one with either dimensions higher than the corresponding
// video dimensions. The still picture will be cropped to get the video frame.
// The function returns true if the camera supports picture sizes greater than
// or equal to the passed in width and height, and false otherwise.
bool setPictureSizeToClosestSupported(int32_t width, int32_t height);
// Computes the offset of the rectangle from where to start cropping the
// still image into the video frame. We choose the center of the image to be

View File

@@ -30,6 +30,7 @@
#include <camera/CameraParameters.h>
#include <ui/Rect.h>
#include <utils/String8.h>
#include <utils/Vector.h>
#include "OMX_Video.h"
namespace android {
@@ -79,7 +80,7 @@ CameraSourceTimeLapse::CameraSourceTimeLapse(const sp<Camera> &camera,
mVideoWidth = width;
mVideoHeight = height;
if (mUseStillCameraForTimeLapse) {
setPictureSizeToClosestSupported(width, height);
CHECK(setPictureSizeToClosestSupported(width, height));
mNeedCropping = computeCropRectangleOffset();
mMeta->setInt32(kKeyWidth, width);
mMeta->setInt32(kKeyHeight, height);
@@ -89,11 +90,31 @@ CameraSourceTimeLapse::CameraSourceTimeLapse(const sp<Camera> &camera,
CameraSourceTimeLapse::~CameraSourceTimeLapse() {
}
void CameraSourceTimeLapse::setPictureSizeToClosestSupported(int32_t width, int32_t height) {
// TODO: Currently fixed to the highest resolution.
// Need to poll the camera and set accordingly.
mPictureWidth = 2048;
mPictureHeight = 1536;
bool CameraSourceTimeLapse::setPictureSizeToClosestSupported(int32_t width, int32_t height) {
int64_t token = IPCThreadState::self()->clearCallingIdentity();
String8 s = mCamera->getParameters();
IPCThreadState::self()->restoreCallingIdentity(token);
CameraParameters params(s);
Vector<Size> supportedSizes;
params.getSupportedPictureSizes(supportedSizes);
int32_t minPictureSize = INT_MAX;
for (uint32_t i = 0; i < supportedSizes.size(); ++i) {
int32_t pictureWidth = supportedSizes[i].width;
int32_t pictureHeight = supportedSizes[i].height;
if ((pictureWidth >= width) && (pictureHeight >= height)) {
int32_t pictureSize = pictureWidth*pictureHeight;
if (pictureSize < minPictureSize) {
minPictureSize = pictureSize;
mPictureWidth = pictureWidth;
mPictureHeight = pictureHeight;
}
}
}
LOGV("Picture size = (%d, %d)", mPictureWidth, mPictureHeight);
return (minPictureSize != INT_MAX);
}
bool CameraSourceTimeLapse::computeCropRectangleOffset() {