diff options
author | Tyler Luu <tluu@ti.com> | 2011-09-30 20:03:26 -0500 |
---|---|---|
committer | Iliyan Malchev <malchev@google.com> | 2011-10-07 12:29:22 -0700 |
commit | b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5 (patch) | |
tree | 5c7261edc3a042a1964f8d1416f313f8250d11f0 /camera/OMXCameraAdapter/OMXCapture.cpp | |
parent | d6525598477cbfacf893ad569ee50c3a2e905ac1 (diff) | |
download | hardware_ti_omap4xxx-b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5.tar.gz hardware_ti_omap4xxx-b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5.tar.bz2 hardware_ti_omap4xxx-b5abb7cbdf48ecccbf0e6d5e61a1846c0c4b28a5.zip |
omap4xxx: camera: set capture settings only if changed
Partial fix for b/5371242
Only set capture configs when they have changed from our current setting to
save some SetConfig time.
Change-Id: I68d7b7ebd4be3273abd534ce8e939da62d38d481
Signed-off-by: Tyler Luu <tluu@ti.com>
Signed-off-by: Iliyan Malchev <malchev@google.com>
Diffstat (limited to 'camera/OMXCameraAdapter/OMXCapture.cpp')
-rw-r--r-- | camera/OMXCameraAdapter/OMXCapture.cpp | 104 |
1 files changed, 65 insertions, 39 deletions
diff --git a/camera/OMXCameraAdapter/OMXCapture.cpp b/camera/OMXCameraAdapter/OMXCapture.cpp index 7f598b6..54ac670 100644 --- a/camera/OMXCameraAdapter/OMXCapture.cpp +++ b/camera/OMXCameraAdapter/OMXCapture.cpp @@ -40,7 +40,6 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters ¶ms, int w, h; OMX_COLOR_FORMATTYPE pixFormat; const char *valstr = NULL; - bool updateImagePortParams = false; LOG_FUNCTION_NAME; @@ -52,7 +51,7 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters ¶ms, if ( ( w != ( int ) cap->mWidth ) || ( h != ( int ) cap->mHeight ) ) { - updateImagePortParams = true; + mPendingCaptureSettings |= SetFormat; } cap->mWidth = w; @@ -139,31 +138,29 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters ¶ms, if ( pixFormat != cap->mColorFormat ) { - updateImagePortParams = true; + mPendingCaptureSettings |= SetFormat; cap->mColorFormat = pixFormat; } - if ( updateImagePortParams ) - { - if ( ( CAPTURE_ACTIVE & state ) != CAPTURE_ACTIVE ) - { - setFormat(OMX_CAMERA_PORT_IMAGE_OUT_IMAGE, *cap); - } - } - str = params.get(TICameraParameters::KEY_EXP_BRACKETING_RANGE); if ( NULL != str ) { parseExpRange(str, mExposureBracketingValues, EXP_BRACKET_RANGE, mExposureBracketingValidEntries); } else { + // if bracketing was previously set...we set again before capturing to clear + if (mExposureBracketingValidEntries) mPendingCaptureSettings |= SetExpBracket; mExposureBracketingValidEntries = 0; } if ( params.getInt(CameraParameters::KEY_ROTATION) != -1 ) { + if (params.getInt(CameraParameters::KEY_ROTATION) != mPictureRotation) { + mPendingCaptureSettings |= SetRotation; + } mPictureRotation = params.getInt(CameraParameters::KEY_ROTATION); } else { + if (mPictureRotation) mPendingCaptureSettings |= SetRotation; mPictureRotation = 0; } @@ -190,10 +187,14 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters ¶ms, if ( params.getInt(TICameraParameters::KEY_BURST) >= 1 ) { + if (params.getInt(TICameraParameters::KEY_BURST) != mBurstFrames) { + mPendingCaptureSettings |= SetExpBracket; + } mBurstFrames = params.getInt(TICameraParameters::KEY_BURST); } else { + if (mBurstFrames != 1) mPendingCaptureSettings |= SetExpBracket; mBurstFrames = 1; } @@ -202,10 +203,14 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters ¶ms, if ( ( params.getInt(CameraParameters::KEY_JPEG_QUALITY) >= MIN_JPEG_QUALITY ) && ( params.getInt(CameraParameters::KEY_JPEG_QUALITY) <= MAX_JPEG_QUALITY ) ) { + if (params.getInt(CameraParameters::KEY_JPEG_QUALITY) != mPictureQuality) { + mPendingCaptureSettings |= SetQuality; + } mPictureQuality = params.getInt(CameraParameters::KEY_JPEG_QUALITY); } else { + if (mPictureQuality != MAX_JPEG_QUALITY) mPendingCaptureSettings |= SetQuality; mPictureQuality = MAX_JPEG_QUALITY; } @@ -213,10 +218,14 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters ¶ms, if ( params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH) >= 0 ) { + if (params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH) != mThumbWidth) { + mPendingCaptureSettings |= SetThumb; + } mThumbWidth = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH); } else { + if (mThumbWidth != DEFAULT_THUMB_WIDTH) mPendingCaptureSettings |= SetThumb; mThumbWidth = DEFAULT_THUMB_WIDTH; } @@ -225,10 +234,14 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters ¶ms, if ( params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT) >= 0 ) { + if (params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT) != mThumbHeight) { + mPendingCaptureSettings |= SetThumb; + } mThumbHeight = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT); } else { + if (mThumbHeight != DEFAULT_THUMB_HEIGHT) mPendingCaptureSettings |= SetThumb; mThumbHeight = DEFAULT_THUMB_HEIGHT; } @@ -238,10 +251,14 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters ¶ms, if ( ( params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY) >= MIN_JPEG_QUALITY ) && ( params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY) <= MAX_JPEG_QUALITY ) ) { + if (params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY) != mThumbQuality) { + mPendingCaptureSettings |= SetThumb; + } mThumbQuality = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY); } else { + if (mThumbQuality != MAX_JPEG_QUALITY) mPendingCaptureSettings |= SetThumb; mThumbQuality = MAX_JPEG_QUALITY; } @@ -732,14 +749,15 @@ status_t OMXCameraAdapter::startImageCapture() } } - if ( NO_ERROR == ret ) - { - ret = setPictureRotation(mPictureRotation); - if ( NO_ERROR != ret ) - { - CAMHAL_LOGEB("Error configuring image rotation %x", ret); + if ( NO_ERROR == ret ) { + if (mPendingCaptureSettings & SetRotation) { + mPendingCaptureSettings &= ~SetRotation; + ret = setPictureRotation(mPictureRotation); + if ( NO_ERROR != ret ) { + CAMHAL_LOGEB("Error configuring image rotation %x", ret); } } + } //OMX shutter callback events are only available in hq mode if ( (HIGH_QUALITY == mCapMode) || (HIGH_QUALITY_ZSL== mCapMode)) @@ -1008,35 +1026,43 @@ status_t OMXCameraAdapter::UseBuffersCapture(void* bufArr, int num) CAMHAL_LOGDB("Params Width = %d", (int)imgCaptureData->mWidth); CAMHAL_LOGDB("Params Height = %d", (int)imgCaptureData->mWidth); - ret = setFormat(OMX_CAMERA_PORT_IMAGE_OUT_IMAGE, *imgCaptureData); - if ( ret != NO_ERROR ) - { - CAMHAL_LOGEB("setFormat() failed %d", ret); - LOG_FUNCTION_NAME_EXIT; - return ret; + if (mPendingCaptureSettings & SetFormat) { + mPendingCaptureSettings &= ~SetFormat; + ret = setFormat(OMX_CAMERA_PORT_IMAGE_OUT_IMAGE, *imgCaptureData); + if ( ret != NO_ERROR ) { + CAMHAL_LOGEB("setFormat() failed %d", ret); + LOG_FUNCTION_NAME_EXIT; + return ret; } + } - ret = setThumbnailParams(mThumbWidth, mThumbHeight, mThumbQuality); - if ( NO_ERROR != ret) - { - CAMHAL_LOGEB("Error configuring thumbnail size %x", ret); - return ret; + if (mPendingCaptureSettings & SetThumb) { + mPendingCaptureSettings &= ~SetThumb; + ret = setThumbnailParams(mThumbWidth, mThumbHeight, mThumbQuality); + if ( NO_ERROR != ret) { + CAMHAL_LOGEB("Error configuring thumbnail size %x", ret); + return ret; } + } - ret = setExposureBracketing( mExposureBracketingValues, - mExposureBracketingValidEntries, mBurstFrames); - if ( ret != NO_ERROR ) - { - CAMHAL_LOGEB("setExposureBracketing() failed %d", ret); - goto EXIT; + if (mPendingCaptureSettings & SetExpBracket) { + mPendingCaptureSettings &= ~SetExpBracket; + ret = setExposureBracketing( mExposureBracketingValues, + mExposureBracketingValidEntries, mBurstFrames); + if ( ret != NO_ERROR ) { + CAMHAL_LOGEB("setExposureBracketing() failed %d", ret); + goto EXIT; } + } - ret = setImageQuality(mPictureQuality); - if ( NO_ERROR != ret) - { - CAMHAL_LOGEB("Error configuring image quality %x", ret); - goto EXIT; + if (mPendingCaptureSettings & SetQuality) { + mPendingCaptureSettings &= ~SetQuality; + ret = setImageQuality(mPictureQuality); + if ( NO_ERROR != ret) { + CAMHAL_LOGEB("Error configuring image quality %x", ret); + goto EXIT; } + } ///Register for Image port ENABLE event ret = RegisterForEvent(mCameraAdapterParameters.mHandleComp, |