Loading services/camera/libcameraservice/api1/Camera2Client.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -1149,6 +1149,8 @@ status_t Camera2Client::autoFocus() { l.mParameters.currentAfTriggerId = ++l.mParameters.afTriggerCounter; triggerId = l.mParameters.currentAfTriggerId; } ATRACE_ASYNC_BEGIN(kAutofocusLabel, triggerId); syncWithDevice(); mDevice->triggerAutofocus(triggerId); Loading @@ -1171,6 +1173,12 @@ status_t Camera2Client::cancelAutoFocus() { l.mParameters.focusMode == Parameters::FOCUS_MODE_INFINITY) { return OK; } // An active AF trigger is canceled if (l.mParameters.afTriggerCounter == l.mParameters.currentAfTriggerId) { ATRACE_ASYNC_END(kAutofocusLabel, l.mParameters.currentAfTriggerId); } triggerId = ++l.mParameters.afTriggerCounter; // When using triggerAfWithAuto quirk, may need to reset focus mode to Loading Loading @@ -1199,6 +1207,7 @@ status_t Camera2Client::takePicture(int msgType) { status_t res; if ( (res = checkPid(__FUNCTION__) ) != OK) return res; int takePictureCounter; { SharedParameters::Lock l(mParameters); switch (l.mParameters.state) { Loading Loading @@ -1237,8 +1246,11 @@ status_t Camera2Client::takePicture(int msgType) { __FUNCTION__, mCameraId, strerror(-res), res); return res; } takePictureCounter = ++l.mParameters.takePictureCounter; } ATRACE_ASYNC_BEGIN(kTakepictureLabel, takePictureCounter); // Need HAL to have correct settings before (possibly) triggering precapture syncWithDevice(); Loading Loading @@ -1466,7 +1478,24 @@ void Camera2Client::notifyAutoFocus(uint8_t newState, int triggerId) { bool afInMotion = false; { SharedParameters::Lock l(mParameters); // Trace end of AF state char tmp[32]; if (l.mParameters.afStateCounter > 0) { camera_metadata_enum_snprint( ANDROID_CONTROL_AF_STATE, l.mParameters.focusState, tmp, sizeof(tmp)); ATRACE_ASYNC_END(tmp, l.mParameters.afStateCounter); } // Update state l.mParameters.focusState = newState; l.mParameters.afStateCounter++; // Trace start of AF state camera_metadata_enum_snprint( ANDROID_CONTROL_AF_STATE, l.mParameters.focusState, tmp, sizeof(tmp)); ATRACE_ASYNC_BEGIN(tmp, l.mParameters.afStateCounter); switch (l.mParameters.focusMode) { case Parameters::FOCUS_MODE_AUTO: case Parameters::FOCUS_MODE_MACRO: Loading Loading @@ -1560,6 +1589,7 @@ void Camera2Client::notifyAutoFocus(uint8_t newState, int triggerId) { } } if (sendCompletedMessage) { ATRACE_ASYNC_END(kAutofocusLabel, triggerId); SharedCameraCallbacks::Lock l(mSharedCameraCallbacks); if (l.mRemoteCallback != 0) { l.mRemoteCallback->notifyCallback(CAMERA_MSG_FOCUS, Loading Loading @@ -1769,4 +1799,7 @@ status_t Camera2Client::updateProcessorStream(sp<ProcessorT> processor, return res; } const char* Camera2Client::kAutofocusLabel = "autofocus"; const char* Camera2Client::kTakepictureLabel = "take_picture"; } // namespace android services/camera/libcameraservice/api1/Camera2Client.h +4 −0 Original line number Diff line number Diff line Loading @@ -136,6 +136,10 @@ public: static const int32_t kCaptureRequestIdStart = 30000000; static const int32_t kCaptureRequestIdEnd = 40000000; // Constant strings for ATRACE logging static const char* kAutofocusLabel; static const char* kTakepictureLabel; private: /** ICamera interface-related private members */ typedef camera2::Parameters Parameters; Loading services/camera/libcameraservice/api1/client2/CaptureSequencer.cpp +12 −1 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ CaptureSequencer::CaptureSequencer(wp<Camera2Client> client): mShutterNotified(false), mClient(client), mCaptureState(IDLE), mStateTransitionCount(0), mTriggerId(0), mTimeoutCount(0), mCaptureId(Camera2Client::kCaptureRequestIdStart), Loading Loading @@ -198,8 +199,14 @@ bool CaptureSequencer::threadLoop() { Mutex::Autolock l(mStateMutex); if (currentState != mCaptureState) { if (mCaptureState != IDLE) { ATRACE_ASYNC_END(kStateNames[mCaptureState], mStateTransitionCount); } mCaptureState = currentState; ATRACE_INT("cam2_capt_state", mCaptureState); mStateTransitionCount++; if (mCaptureState != IDLE) { ATRACE_ASYNC_BEGIN(kStateNames[mCaptureState], mStateTransitionCount); } ALOGV("Camera %d: New capture state %s", client->getCameraId(), kStateNames[mCaptureState]); mStateChanged.signal(); Loading Loading @@ -243,6 +250,7 @@ CaptureSequencer::CaptureState CaptureSequencer::manageDone(sp<Camera2Client> &c mBusy = false; } int takePictureCounter = 0; { SharedParameters::Lock l(client->getParameters()); switch (l.mParameters.state) { Loading Loading @@ -270,6 +278,7 @@ CaptureSequencer::CaptureState CaptureSequencer::manageDone(sp<Camera2Client> &c Parameters::getStateName(l.mParameters.state)); res = INVALID_OPERATION; } takePictureCounter = l.mParameters.takePictureCounter; } sp<ZslProcessorInterface> processor = mZslProcessor.promote(); if (processor != 0) { Loading @@ -282,6 +291,8 @@ CaptureSequencer::CaptureState CaptureSequencer::manageDone(sp<Camera2Client> &c * Fire the jpegCallback in Camera#takePicture(..., jpegCallback) */ if (mCaptureBuffer != 0 && res == OK) { ATRACE_ASYNC_END(Camera2Client::kTakepictureLabel, takePictureCounter); Camera2Client::SharedCameraCallbacks::Lock l(client->mSharedCameraCallbacks); ALOGV("%s: Sending still image to client", __FUNCTION__); Loading services/camera/libcameraservice/api1/client2/CaptureSequencer.h +1 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,7 @@ class CaptureSequencer: NUM_CAPTURE_STATES } mCaptureState; static const char* kStateNames[]; int mStateTransitionCount; Mutex mStateMutex; // Guards mCaptureState Condition mStateChanged; Loading services/camera/libcameraservice/api1/client2/Parameters.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -805,11 +805,14 @@ status_t Parameters::initialize(const CameraMetadata *info) { enableFocusMoveMessages = false; afTriggerCounter = 1; afStateCounter = 0; currentAfTriggerId = -1; afInMotion = false; precaptureTriggerCounter = 1; takePictureCounter = 0; previewCallbackFlags = 0; previewCallbackOneShot = false; previewCallbackSurface = false; Loading Loading
services/camera/libcameraservice/api1/Camera2Client.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -1149,6 +1149,8 @@ status_t Camera2Client::autoFocus() { l.mParameters.currentAfTriggerId = ++l.mParameters.afTriggerCounter; triggerId = l.mParameters.currentAfTriggerId; } ATRACE_ASYNC_BEGIN(kAutofocusLabel, triggerId); syncWithDevice(); mDevice->triggerAutofocus(triggerId); Loading @@ -1171,6 +1173,12 @@ status_t Camera2Client::cancelAutoFocus() { l.mParameters.focusMode == Parameters::FOCUS_MODE_INFINITY) { return OK; } // An active AF trigger is canceled if (l.mParameters.afTriggerCounter == l.mParameters.currentAfTriggerId) { ATRACE_ASYNC_END(kAutofocusLabel, l.mParameters.currentAfTriggerId); } triggerId = ++l.mParameters.afTriggerCounter; // When using triggerAfWithAuto quirk, may need to reset focus mode to Loading Loading @@ -1199,6 +1207,7 @@ status_t Camera2Client::takePicture(int msgType) { status_t res; if ( (res = checkPid(__FUNCTION__) ) != OK) return res; int takePictureCounter; { SharedParameters::Lock l(mParameters); switch (l.mParameters.state) { Loading Loading @@ -1237,8 +1246,11 @@ status_t Camera2Client::takePicture(int msgType) { __FUNCTION__, mCameraId, strerror(-res), res); return res; } takePictureCounter = ++l.mParameters.takePictureCounter; } ATRACE_ASYNC_BEGIN(kTakepictureLabel, takePictureCounter); // Need HAL to have correct settings before (possibly) triggering precapture syncWithDevice(); Loading Loading @@ -1466,7 +1478,24 @@ void Camera2Client::notifyAutoFocus(uint8_t newState, int triggerId) { bool afInMotion = false; { SharedParameters::Lock l(mParameters); // Trace end of AF state char tmp[32]; if (l.mParameters.afStateCounter > 0) { camera_metadata_enum_snprint( ANDROID_CONTROL_AF_STATE, l.mParameters.focusState, tmp, sizeof(tmp)); ATRACE_ASYNC_END(tmp, l.mParameters.afStateCounter); } // Update state l.mParameters.focusState = newState; l.mParameters.afStateCounter++; // Trace start of AF state camera_metadata_enum_snprint( ANDROID_CONTROL_AF_STATE, l.mParameters.focusState, tmp, sizeof(tmp)); ATRACE_ASYNC_BEGIN(tmp, l.mParameters.afStateCounter); switch (l.mParameters.focusMode) { case Parameters::FOCUS_MODE_AUTO: case Parameters::FOCUS_MODE_MACRO: Loading Loading @@ -1560,6 +1589,7 @@ void Camera2Client::notifyAutoFocus(uint8_t newState, int triggerId) { } } if (sendCompletedMessage) { ATRACE_ASYNC_END(kAutofocusLabel, triggerId); SharedCameraCallbacks::Lock l(mSharedCameraCallbacks); if (l.mRemoteCallback != 0) { l.mRemoteCallback->notifyCallback(CAMERA_MSG_FOCUS, Loading Loading @@ -1769,4 +1799,7 @@ status_t Camera2Client::updateProcessorStream(sp<ProcessorT> processor, return res; } const char* Camera2Client::kAutofocusLabel = "autofocus"; const char* Camera2Client::kTakepictureLabel = "take_picture"; } // namespace android
services/camera/libcameraservice/api1/Camera2Client.h +4 −0 Original line number Diff line number Diff line Loading @@ -136,6 +136,10 @@ public: static const int32_t kCaptureRequestIdStart = 30000000; static const int32_t kCaptureRequestIdEnd = 40000000; // Constant strings for ATRACE logging static const char* kAutofocusLabel; static const char* kTakepictureLabel; private: /** ICamera interface-related private members */ typedef camera2::Parameters Parameters; Loading
services/camera/libcameraservice/api1/client2/CaptureSequencer.cpp +12 −1 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ CaptureSequencer::CaptureSequencer(wp<Camera2Client> client): mShutterNotified(false), mClient(client), mCaptureState(IDLE), mStateTransitionCount(0), mTriggerId(0), mTimeoutCount(0), mCaptureId(Camera2Client::kCaptureRequestIdStart), Loading Loading @@ -198,8 +199,14 @@ bool CaptureSequencer::threadLoop() { Mutex::Autolock l(mStateMutex); if (currentState != mCaptureState) { if (mCaptureState != IDLE) { ATRACE_ASYNC_END(kStateNames[mCaptureState], mStateTransitionCount); } mCaptureState = currentState; ATRACE_INT("cam2_capt_state", mCaptureState); mStateTransitionCount++; if (mCaptureState != IDLE) { ATRACE_ASYNC_BEGIN(kStateNames[mCaptureState], mStateTransitionCount); } ALOGV("Camera %d: New capture state %s", client->getCameraId(), kStateNames[mCaptureState]); mStateChanged.signal(); Loading Loading @@ -243,6 +250,7 @@ CaptureSequencer::CaptureState CaptureSequencer::manageDone(sp<Camera2Client> &c mBusy = false; } int takePictureCounter = 0; { SharedParameters::Lock l(client->getParameters()); switch (l.mParameters.state) { Loading Loading @@ -270,6 +278,7 @@ CaptureSequencer::CaptureState CaptureSequencer::manageDone(sp<Camera2Client> &c Parameters::getStateName(l.mParameters.state)); res = INVALID_OPERATION; } takePictureCounter = l.mParameters.takePictureCounter; } sp<ZslProcessorInterface> processor = mZslProcessor.promote(); if (processor != 0) { Loading @@ -282,6 +291,8 @@ CaptureSequencer::CaptureState CaptureSequencer::manageDone(sp<Camera2Client> &c * Fire the jpegCallback in Camera#takePicture(..., jpegCallback) */ if (mCaptureBuffer != 0 && res == OK) { ATRACE_ASYNC_END(Camera2Client::kTakepictureLabel, takePictureCounter); Camera2Client::SharedCameraCallbacks::Lock l(client->mSharedCameraCallbacks); ALOGV("%s: Sending still image to client", __FUNCTION__); Loading
services/camera/libcameraservice/api1/client2/CaptureSequencer.h +1 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,7 @@ class CaptureSequencer: NUM_CAPTURE_STATES } mCaptureState; static const char* kStateNames[]; int mStateTransitionCount; Mutex mStateMutex; // Guards mCaptureState Condition mStateChanged; Loading
services/camera/libcameraservice/api1/client2/Parameters.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -805,11 +805,14 @@ status_t Parameters::initialize(const CameraMetadata *info) { enableFocusMoveMessages = false; afTriggerCounter = 1; afStateCounter = 0; currentAfTriggerId = -1; afInMotion = false; precaptureTriggerCounter = 1; takePictureCounter = 0; previewCallbackFlags = 0; previewCallbackOneShot = false; previewCallbackSurface = false; Loading