summaryrefslogtreecommitdiff
path: root/camera
diff options
context:
space:
mode:
authorSundar Raman <sunds@ti.com>2011-11-10 22:00:06 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2011-11-10 22:00:06 +0000
commitfef6b7d10925aebbfdcea86a0e7a768fd86a1a2d (patch)
treee6226b85e7d59da33671ec6c7850a1c3693a7844 /camera
parent964bdd2d1c9459bdc087dde132c10fe7c23ec4ea (diff)
parentd3278ddd57085e8d7f261defbdfaed4d5bbea167 (diff)
downloadomap4xxx-fef6b7d10925aebbfdcea86a0e7a768fd86a1a2d.tar.gz
am d3278ddd: am 977fc7e4: am 3ec18006: CameraHAL: Fixes for ANR and a setParameter issue
* commit 'd3278ddd57085e8d7f261defbdfaed4d5bbea167': CameraHAL: Fixes for ANR and a setParameter issue
Diffstat (limited to 'camera')
-rw-r--r--camera/AppCallbackNotifier.cpp42
-rw-r--r--camera/CameraHal.cpp5
-rwxr-xr-xcamera/OMXCameraAdapter/OMXCameraAdapter.cpp8
-rw-r--r--camera/OMXCameraAdapter/OMXCapture.cpp18
-rw-r--r--camera/inc/CameraHal.h6
5 files changed, 42 insertions, 37 deletions
diff --git a/camera/AppCallbackNotifier.cpp b/camera/AppCallbackNotifier.cpp
index c716291..4513c48 100644
--- a/camera/AppCallbackNotifier.cpp
+++ b/camera/AppCallbackNotifier.cpp
@@ -310,7 +310,10 @@ void AppCallbackNotifier::notifyEvent()
///Receive and send the event notifications to app
TIUTILS::Message msg;
LOG_FUNCTION_NAME;
+ {
+ Mutex::Autolock lock(mLock);
mEventQ.get(&msg);
+ }
bool ret = true;
CameraHalEvent *evt = NULL;
CameraHalEvent::FocusEventData *focusEvtData;
@@ -820,12 +823,16 @@ void AppCallbackNotifier::notifyFrame()
buf = raw_picture->data;
}
- encode_quality = mParameters.getInt(CameraParameters::KEY_JPEG_QUALITY);
+ CameraParameters parameters;
+ const String8 strParams(mCameraHal->getParameters());
+ parameters.unflatten(strParams);
+
+ encode_quality = parameters.getInt(CameraParameters::KEY_JPEG_QUALITY);
if (encode_quality < 0 || encode_quality > 100) {
encode_quality = 100;
}
- tn_quality = mParameters.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY);
+ tn_quality = parameters.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY);
if (tn_quality < 0 || tn_quality > 100) {
tn_quality = 100;
}
@@ -849,8 +856,8 @@ void AppCallbackNotifier::notifyFrame()
main_jpeg->format = CameraParameters::PIXEL_FORMAT_YUV422I;
}
- tn_width = mParameters.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH);
- tn_height = mParameters.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT);
+ tn_width = parameters.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH);
+ tn_height = parameters.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT);
if ((tn_width > 0) && (tn_height > 0)) {
tn_jpeg = (Encoder_libjpeg::params*)
@@ -863,7 +870,7 @@ void AppCallbackNotifier::notifyFrame()
if (tn_jpeg) {
int width, height;
- mParameters.getPreviewSize(&width,&height);
+ parameters.getPreviewSize(&width,&height);
current_snapshot = (mPreviewBufCount + MAX_BUFFERS - 1) % MAX_BUFFERS;
tn_jpeg->src = (uint8_t*) mPreviewBufs[current_snapshot];
tn_jpeg->src_size = mPreviewMemory->size / MAX_BUFFERS;
@@ -1140,8 +1147,11 @@ void AppCallbackNotifier::eventCallback(CameraHalEvent* chEvt)
{
msg.command = AppCallbackNotifier::NOTIFIER_CMD_PROCESS_EVENT;
msg.arg1 = event;
+ {
+ Mutex::Autolock lock(mLock);
mEventQ.put(&msg);
}
+ }
else
{
CAMHAL_LOGEA("Not enough resources to allocate CameraHalEvent");
@@ -1153,6 +1163,18 @@ void AppCallbackNotifier::eventCallback(CameraHalEvent* chEvt)
}
+void AppCallbackNotifier::flushEventQueue()
+{
+
+ {
+ Mutex::Autolock lock(mLock);
+ TIUTILS::Message msg;
+ while(!mEventQ.isEmpty())
+ mEventQ.get(&msg);
+ }
+}
+
+
bool AppCallbackNotifier::processMessage()
{
///Retrieve the command from the command queue and process it
@@ -1418,16 +1440,6 @@ void AppCallbackNotifier::setVideoRes(int width, int height)
LOG_FUNCTION_NAME_EXIT;
}
-int AppCallbackNotifier::setParameters(const CameraParameters& params)
-{
- LOG_FUNCTION_NAME;
-
- mParameters = params;
-
- LOG_FUNCTION_NAME_EXIT;
- return NO_ERROR;
-}
-
status_t AppCallbackNotifier::stopPreviewCallbacks()
{
sp<MemoryHeapBase> heap;
diff --git a/camera/CameraHal.cpp b/camera/CameraHal.cpp
index 1f14a2e..7e18330 100644
--- a/camera/CameraHal.cpp
+++ b/camera/CameraHal.cpp
@@ -1008,10 +1008,6 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.unflatten(oldParams.flatten());
}
- if ( NULL != mAppCallbackNotifier.get() ) {
- mAppCallbackNotifier->setParameters(mParameters);
- }
-
// Restart Preview if needed by KEY_RECODING_HINT only if preview is already running.
// If preview is not started yet, Video Mode parameters will take effect on next startPreview()
if (restartPreviewRequired && previewEnabled() && !mRecordingEnabled) {
@@ -2222,6 +2218,7 @@ status_t CameraHal::cancelAutoFocus()
adapterParams.set(TICameraParameters::KEY_AUTO_FOCUS_LOCK, CameraParameters::FALSE);
mCameraAdapter->setParameters(adapterParams);
mCameraAdapter->sendCommand(CameraAdapter::CAMERA_CANCEL_AUTOFOCUS);
+ mAppCallbackNotifier->flushEventQueue();
}
LOG_FUNCTION_NAME_EXIT;
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
index 91bbb3f..0c64b74 100755
--- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
+++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
@@ -3331,14 +3331,6 @@ bool OMXCameraAdapter::CommandHandler::Handler()
}
}
- if ( NO_ERROR != stat )
- {
- errorNotify = ( ErrorNotifier * ) msg.arg1;
- if ( NULL != errorNotify )
- {
- errorNotify->errorNotify(CAMERA_ERROR_HARD);
- }
- }
}
LOG_FUNCTION_NAME_EXIT;
diff --git a/camera/OMXCameraAdapter/OMXCapture.cpp b/camera/OMXCameraAdapter/OMXCapture.cpp
index 68111b8..9ba438c 100644
--- a/camera/OMXCameraAdapter/OMXCapture.cpp
+++ b/camera/OMXCameraAdapter/OMXCapture.cpp
@@ -741,6 +741,11 @@ status_t OMXCameraAdapter::startImageCapture()
return NO_INIT;
}
+ if ((getNextState() & (CAPTURE_ACTIVE|BRACKETING_ACTIVE)) == 0) {
+ CAMHAL_LOGDA("trying starting capture when already canceled");
+ return NO_ERROR;
+ }
+
// Camera framework doesn't expect face callbacks once capture is triggered
pauseFaceDetection(true);
@@ -899,12 +904,13 @@ status_t OMXCameraAdapter::stopImageCapture()
// if anybody is waiting on the shutter callback
// signal them and then recreate the semaphore
if ( 0 != mStartCaptureSem.Count() ) {
- for (int i = mStopCaptureSem.Count(); i > 0; i--) {
- ret |= SignalEvent(mCameraAdapterParameters.mHandleComp,
- (OMX_EVENTTYPE) OMX_EventIndexSettingChanged,
- OMX_ALL,
- OMX_TI_IndexConfigShutterCallback,
- NULL );
+
+ for (int i = mStartCaptureSem.Count(); i < 0; i++) {
+ ret |= SignalEvent(mCameraAdapterParameters.mHandleComp,
+ (OMX_EVENTTYPE) OMX_EventIndexSettingChanged,
+ OMX_ALL,
+ OMX_TI_IndexConfigShutterCallback,
+ NULL );
}
mStartCaptureSem.Create(0);
}
diff --git a/camera/inc/CameraHal.h b/camera/inc/CameraHal.h
index c6af5ab..f33515a 100644
--- a/camera/inc/CameraHal.h
+++ b/camera/inc/CameraHal.h
@@ -566,8 +566,6 @@ public:
//Set Burst mode
void setBurst(bool burst);
- int setParameters(const CameraParameters& params);
-
//Notifications from CameraHal for video recording case
status_t startRecording();
status_t stopRecording();
@@ -583,6 +581,8 @@ public:
bool getUesVideoBuffers();
void setVideoRes(int width, int height);
+ void flushEventQueue();
+
//Internal class definitions
class NotificationThread : public Thread {
AppCallbackNotifier* mAppCallbackNotifier;
@@ -662,8 +662,6 @@ private:
bool mUseMetaDataBufferMode;
bool mRawAvailable;
- CameraParameters mParameters;
-
bool mUseVideoBuffers;
int mVideoWidth;