summaryrefslogtreecommitdiffstats
path: root/camera/OMXCameraAdapter
diff options
context:
space:
mode:
authorAndriy Chepurnyy <x0155536@ti.com>2013-01-10 14:18:14 +0200
committerHashcode <hashcode0f@gmail.com>2015-02-03 13:38:43 -0800
commit8736cdb17c995e83399ba0604d52f007439afcee (patch)
treea965abf7fcf7ebbeeb623a4c3f535ed7f2a6a4de /camera/OMXCameraAdapter
parent36abd1f5030c36d32b7d139e0989b04c7c02fa9c (diff)
downloadhardware_ti_omap4-8736cdb17c995e83399ba0604d52f007439afcee.tar.gz
hardware_ti_omap4-8736cdb17c995e83399ba0604d52f007439afcee.tar.bz2
hardware_ti_omap4-8736cdb17c995e83399ba0604d52f007439afcee.zip
CameraHal: Correctly set preview framerate
Since Camera API supports 2 mechanisms that used to set FPS : setPreviewFpsRange and setPreviewFrameRate HAL should correctly handle situation when only one of that call were made. CameraHAL should not modify fps range or fps that was set by client, but it should inform camera adpter somehow what exactly was modified and what value should be used for configuration of preview port. So therefore new paramter KEY_PREVIEW_FRAME_RATE_RANGE was added. Now it will be used by camera adapters for preview configuration and camera hal will be capable for value of this parameter. Possible situations: 1) User had changed FPS range and HAL will use it for fps port value (don't care about changed or not const FPS). 2) User had changed single FPS and had not changed FPS range - will be applyed single FPS value to port. 3) Both FPS range and const FPS are unchanged - FPS range will be applied to port. This patch also fixed several CTS tests from android.media.cts.MediaRecorderTest : testRecorderCamera, testRecorderVideo, testSetMaxFileSize. Change-Id: I31badcdc62a1a33474cb8e0e893f50378e9f6114 Signed-off-by: Andriy Chepurnyy <x0155536@ti.com>
Diffstat (limited to 'camera/OMXCameraAdapter')
-rw-r--r--camera/OMXCameraAdapter/OMXCameraAdapter.cpp69
1 files changed, 25 insertions, 44 deletions
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
index 75bde38..47e245c 100644
--- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
+++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
@@ -594,56 +594,37 @@ status_t OMXCameraAdapter::setParameters(const android::CameraParameters &params
params.getPreviewSize(&w, &h);
frameRate = params.getPreviewFrameRate();
- params.getPreviewFpsRange(&minFramerate, &maxFramerate);
+
+ const char *frameRateRange = params.get(TICameraParameters::KEY_PREVIEW_FRAME_RATE_RANGE);
+ bool fpsRangeParsed = CameraHal::parsePair(frameRateRange, &minFramerate, &maxFramerate, ',');
+ CAMHAL_ASSERT(fpsRangeParsed);
+
minFramerate /= CameraHal::VFR_SCALE;
maxFramerate /= CameraHal::VFR_SCALE;
- if ( ( 0 < minFramerate ) && ( 0 < maxFramerate ) ) {
- if ( minFramerate > maxFramerate ) {
- CAMHAL_LOGEA(" Min FPS set higher than MAX. So setting MIN and MAX to the higher value");
- maxFramerate = minFramerate;
- }
- if ( 0 >= frameRate ) {
- frameRate = maxFramerate;
- }
+ frameRate = maxFramerate;
- if ( ( cap->mMinFrameRate != (OMX_U32) minFramerate ) ||
- ( cap->mMaxFrameRate != (OMX_U32) maxFramerate ) ) {
- cap->mMinFrameRate = minFramerate;
- cap->mMaxFrameRate = maxFramerate;
- setVFramerate(cap->mMinFrameRate, cap->mMaxFrameRate);
- }
+ if ( ( cap->mMinFrameRate != (OMX_U32) minFramerate ) ||
+ ( cap->mMaxFrameRate != (OMX_U32) maxFramerate ) ) {
+ cap->mMinFrameRate = minFramerate;
+ cap->mMaxFrameRate = maxFramerate;
+ setVFramerate(cap->mMinFrameRate, cap->mMaxFrameRate);
}
- if ( 0 < frameRate )
- {
- cap->mColorFormat = pixFormat;
- cap->mWidth = w;
- cap->mHeight = h;
- cap->mFrameRate = frameRate;
-
- CAMHAL_LOGVB("Prev: cap.mColorFormat = %d", (int)cap->mColorFormat);
- CAMHAL_LOGVB("Prev: cap.mWidth = %d", (int)cap->mWidth);
- CAMHAL_LOGVB("Prev: cap.mHeight = %d", (int)cap->mHeight);
- CAMHAL_LOGVB("Prev: cap.mFrameRate = %d", (int)cap->mFrameRate);
-
- //TODO: Add an additional parameter for video resolution
- //use preview resolution for now
- cap = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex];
- cap->mColorFormat = pixFormat;
- cap->mWidth = w;
- cap->mHeight = h;
- cap->mFrameRate = frameRate;
-
- CAMHAL_LOGVB("Video: cap.mColorFormat = %d", (int)cap->mColorFormat);
- CAMHAL_LOGVB("Video: cap.mWidth = %d", (int)cap->mWidth);
- CAMHAL_LOGVB("Video: cap.mHeight = %d", (int)cap->mHeight);
- CAMHAL_LOGVB("Video: cap.mFrameRate = %d", (int)cap->mFrameRate);
-
- ///mStride is set from setBufs() while passing the APIs
- cap->mStride = 4096;
- cap->mBufSize = cap->mStride * cap->mHeight;
- }
+ cap->mColorFormat = pixFormat;
+ cap->mWidth = w;
+ cap->mHeight = h;
+ cap->mFrameRate = frameRate;
+
+ CAMHAL_LOGVB("Prev: cap.mColorFormat = %d", (int)cap->mColorFormat);
+ CAMHAL_LOGVB("Prev: cap.mWidth = %d", (int)cap->mWidth);
+ CAMHAL_LOGVB("Prev: cap.mHeight = %d", (int)cap->mHeight);
+ CAMHAL_LOGVB("Prev: cap.mFrameRate = %d", (int)cap->mFrameRate);
+
+ ///mStride is set from setBufs() while passing the APIs
+ cap->mStride = 4096;
+ cap->mBufSize = cap->mStride * cap->mHeight;
+
if ( ( cap->mWidth >= 1920 ) &&
( cap->mHeight >= 1080 ) &&