summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmytro Vasylenko <x0178436@ti.com>2012-11-28 13:07:10 +0200
committerHashcode <hashcode0f@gmail.com>2015-02-03 13:38:08 -0800
commit90a5178c65aaec85604683f6ed4ce0253064d55f (patch)
tree541e6a4fbafddae2386fdd4e79db0e00f1d6c9d0
parent34223d8215b8ced4c00b560f96d30f362e84deec (diff)
downloadhardware_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.cpp88
-rw-r--r--camera/inc/CameraHal.h12
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