diff options
author | Dmytro Vasylenko <x0178436@ti.com> | 2012-11-28 13:07:10 +0200 |
---|---|---|
committer | Hashcode <hashcode0f@gmail.com> | 2015-02-03 13:38:08 -0800 |
commit | 90a5178c65aaec85604683f6ed4ce0253064d55f (patch) | |
tree | 541e6a4fbafddae2386fdd4e79db0e00f1d6c9d0 | |
parent | 34223d8215b8ced4c00b560f96d30f362e84deec (diff) | |
download | hardware_ti_omap4-90a5178c65aaec85604683f6ed4ce0253064d55f.zip hardware_ti_omap4-90a5178c65aaec85604683f6ed4ce0253064d55f.tar.gz hardware_ti_omap4-90a5178c65aaec85604683f6ed4ce0253064d55f.tar.bz2 |
CameraHAL: Forcibly off VSTAB on 4430/60 while 1080p AV rec (TEMP HACK)
4430/4460 AV Record on Video Format 1080p + Video stabilization On
causes the Camera app crash. This is known HW limitation of sgx
core on 4430/4460 due to unsupported texture sizes larger than 2k
Ideally should be fixed in the Ducati, marked as TEMP HACK.
Change-Id: Iea8727077d8eed736e4944e126f1c4586bf50d6b
Signed-off-by: Dmytro Vasylenko <x0178436@ti.com>
-rw-r--r-- | camera/CameraHal.cpp | 88 | ||||
-rw-r--r-- | camera/inc/CameraHal.h | 12 |
2 files changed, 77 insertions, 23 deletions
diff --git a/camera/CameraHal.cpp b/camera/CameraHal.cpp index 37baec8..37e422c 100644 --- a/camera/CameraHal.cpp +++ b/camera/CameraHal.cpp @@ -107,6 +107,41 @@ static int dummy_get_current_size(preview_stream_ops_t*, } #endif + +CameraHal::SocFamily CameraHal::getSocFamily() { + static const struct { + const char *name; + const CameraHal::SocFamily value; + } socFamilyArray[] = { + {"OMAP4430", SocFamily_Omap4430}, + {"OMAP4460", SocFamily_Omap4460}, + {"OMAP4470", SocFamily_Omap4470} + }; + // lets get the soc family string from sysfs + static const char *sysfsNode = "/sys/board_properties/soc/family"; + FILE *sysfsFd = fopen(sysfsNode, "r"); + static const int bufSize = 128; + char buf[bufSize]; + if (sysfsFd == NULL) { + CAMHAL_LOGEA("'%s' Not Available", sysfsNode); + return SocFamily_Undefined; + } + const char *res = fgets(buf, bufSize, sysfsFd); + fclose(sysfsFd); + if (res == NULL) { + CAMHAL_LOGEA("Error reading '%s'", sysfsNode); + return SocFamily_Undefined; + } + // translate it to CameraHal::SocFamily enum + for (int i = 0; i < SocFamily_ElementCount; ++i) { + if (strncmp(socFamilyArray[i].name, buf, strlen(socFamilyArray[i].name)) == 0) { + return socFamilyArray[i].value; + } + } + return SocFamily_Undefined; +} + + #ifdef OMAP_ENHANCEMENT static preview_stream_extended_ops_t dummyPreviewStreamExtendedOps = { #ifdef OMAP_ENHANCEMENT_CPCAM @@ -400,15 +435,10 @@ int CameraHal::setParameters(const android::CameraParameters& params) // make sure we support vstab...if we don't and application is trying to set // vstab then return an error if (strcmp(mCameraProperties->get(CameraProperties::VSTAB_SUPPORTED), - android::CameraParameters::TRUE) == 0) { - CAMHAL_LOGDB("VSTAB %s", valstr); - mParameters.set(android::CameraParameters::KEY_VIDEO_STABILIZATION, valstr); - } else if (strcmp(valstr, android::CameraParameters::TRUE) == 0) { + android::CameraParameters::TRUE) != 0 && + strcmp(valstr, android::CameraParameters::TRUE) == 0) { CAMHAL_LOGEB("ERROR: Invalid VSTAB: %s", valstr); return BAD_VALUE; - } else { - mParameters.set(android::CameraParameters::KEY_VIDEO_STABILIZATION, - android::CameraParameters::FALSE); } } @@ -2691,24 +2721,35 @@ bool CameraHal::setVideoModeParameters(const android::CameraParameters& params) restartPreviewRequired = true; } - // set VSTAB. restart is required if vstab value has changed - if ( (valstrRemote = params.get(android::CameraParameters::KEY_VIDEO_STABILIZATION)) != NULL ) { - // make sure we support vstab - if (strcmp(mCameraProperties->get(CameraProperties::VSTAB_SUPPORTED), - android::CameraParameters::TRUE) == 0) { - valstr = mParameters.get(android::CameraParameters::KEY_VIDEO_STABILIZATION); - // vstab value has changed - if ((valstr != NULL) && - strcmp(valstr, valstrRemote) != 0) { - restartPreviewRequired = true; + // set VSTAB, restart is required if VSTAB value has changed + int prevWidth, prevHeight; + params.getPreviewSize(&prevWidth, &prevHeight); + valstr = mParameters.get(android::CameraParameters::KEY_VIDEO_STABILIZATION); + if (prevWidth == 1920 && + (mSocFamily == SocFamily_Omap4430 || mSocFamily == SocFamily_Omap4460)) { + // forcibly set to false because of not enough memory for needed buffer size in this case + CAMHAL_LOGDA("Forcing VSTAB off"); + if (strcmp(valstr, android::CameraParameters::FALSE) != 0) { + restartPreviewRequired = true; + } + mParameters.set(android::CameraParameters::KEY_VIDEO_STABILIZATION, + android::CameraParameters::FALSE); + } else { + if ((valstrRemote = params.get(android::CameraParameters::KEY_VIDEO_STABILIZATION)) != NULL) { + // make sure we support vstab + if (strcmp(mCameraProperties->get(CameraProperties::VSTAB_SUPPORTED), + android::CameraParameters::TRUE) == 0) { + if (strcmp(valstr, valstrRemote) != 0) { + restartPreviewRequired = true; + } + mParameters.set(android::CameraParameters::KEY_VIDEO_STABILIZATION, + valstrRemote); } - mParameters.set(android::CameraParameters::KEY_VIDEO_STABILIZATION, - valstrRemote); + } else if (mParameters.get(android::CameraParameters::KEY_VIDEO_STABILIZATION)) { + // vstab was configured but now unset + restartPreviewRequired = true; + mParameters.remove(android::CameraParameters::KEY_VIDEO_STABILIZATION); } - } else if (mParameters.get(android::CameraParameters::KEY_VIDEO_STABILIZATION)) { - // vstab was configured but now unset - restartPreviewRequired = true; - mParameters.remove(android::CameraParameters::KEY_VIDEO_STABILIZATION); } // Set VNF @@ -3927,6 +3968,7 @@ status_t CameraHal::dump(int fd) const */ CameraHal::CameraHal(int cameraId) + : mSocFamily(getSocFamily()) { LOG_FUNCTION_NAME; diff --git a/camera/inc/CameraHal.h b/camera/inc/CameraHal.h index 02004c9..ef11baa 100644 --- a/camera/inc/CameraHal.h +++ b/camera/inc/CameraHal.h @@ -1081,6 +1081,14 @@ class CameraHal { public: + enum SocFamily { + SocFamily_Undefined = -1, + SocFamily_Omap4430 = 0, + SocFamily_Omap4460, + SocFamily_Omap4470, + SocFamily_ElementCount // element count of SocFamily + }; + ///Constants static const int NO_BUFFERS_PREVIEW; static const int NO_BUFFERS_IMAGE_CAPTURE; @@ -1389,6 +1397,8 @@ private: status_t releaseTapoutLocked(struct preview_stream_ops *out); status_t setTapinLocked(struct preview_stream_ops *in); status_t releaseTapinLocked(struct preview_stream_ops *in); + + static SocFamily getSocFamily(); /*----------Member variables - Public ---------------------*/ public: int32_t mMsgEnabled; @@ -1519,6 +1529,8 @@ private: android::String8 mCapModeBackup; bool mExternalLocking; + + const SocFamily mSocFamily; }; } // namespace Camera |