QCamera2: Integrates pipeline events during longshot
- If supported by the camera reprocess events will
trigger the shutter callback, notifying the camera
client that it could queue a new buffer via a
'takePicture()'.
Change-Id: I39f56d08e09599fe2841268d563a123573360198
diff --git a/QCamera2/HAL/QCameraPostProc.cpp b/QCamera2/HAL/QCameraPostProc.cpp
index b61fd49..63d6107 100644
--- a/QCamera2/HAL/QCameraPostProc.cpp
+++ b/QCamera2/HAL/QCameraPostProc.cpp
@@ -78,7 +78,8 @@
mUseSaveProc(false),
mUseJpegBurst(false),
mJpegMemOpt(true),
- mNewJpegSessionNeeded(true)
+ mNewJpegSessionNeeded(true),
+ mMultipleStages(false)
{
memset(&mJpegHandle, 0, sizeof(mJpegHandle));
memset(&m_pJpegOutputMem, 0, sizeof(m_pJpegOutputMem));
@@ -225,6 +226,8 @@
m_dataProcTh.sendCmd(CAMERA_CMD_TYPE_START_DATA_PROC, FALSE, FALSE);
m_parent->m_cbNotifier.startSnapshots();
+ mMultipleStages = false;
+
// Create Jpeg session
if ( !m_parent->mParameters.getRecordingHintValue() &&
!m_parent->isLongshotEnabled() &&
@@ -832,11 +835,8 @@
return processRawData(frame);
}
- if ( m_parent->isLongshotEnabled() ) {
- // play shutter sound for longshot
- // after reprocess is done
- // TODO: Move this after CAC done event
-
+ if ( m_parent->isLongshotEnabled() &&
+ !getMultipleStages() ) {
m_parent->playShutter();
}
diff --git a/QCamera2/HAL/QCameraPostProc.h b/QCamera2/HAL/QCameraPostProc.h
index 8acbd7a..a8f29ba 100644
--- a/QCamera2/HAL/QCameraPostProc.h
+++ b/QCamera2/HAL/QCameraPostProc.h
@@ -119,6 +119,8 @@
int32_t processJpegEvt(qcamera_jpeg_evt_payload_t *evt);
int32_t getJpegPaddingReq(cam_padding_info_t &padding_info);
QCameraReprocessChannel * getReprocChannel() {return m_pReprocChannel;};
+ bool getMultipleStages() { return mMultipleStages; };
+ void setMultipleStages(bool stages) { mMultipleStages = stages; };
private:
int32_t sendDataNotify(int32_t msg_type,
@@ -184,6 +186,7 @@
bool mUseJpegBurst; // use jpeg burst encoding mode
bool mJpegMemOpt;
uint8_t mNewJpegSessionNeeded;
+ bool mMultipleStages; // multiple stages are present
};
}; // namespace qcamera
diff --git a/QCamera2/HAL/QCameraStateMachine.cpp b/QCamera2/HAL/QCameraStateMachine.cpp
index f90e24e..e724d1c 100644
--- a/QCamera2/HAL/QCameraStateMachine.cpp
+++ b/QCamera2/HAL/QCameraStateMachine.cpp
@@ -1664,6 +1664,16 @@
{
mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload;
switch (cam_evt->server_event_type) {
+ case CAM_EVENT_TYPE_REPROCESS_STAGE_DONE:
+ {
+ if ( m_parent->isLongshotEnabled() ) {
+ if(!m_parent->m_postprocessor.getMultipleStages()) {
+ m_parent->m_postprocessor.setMultipleStages(true);
+ }
+ m_parent->playShutter();
+ }
+ }
+ break;
case CAM_EVENT_TYPE_DAEMON_DIED:
{
m_parent->sendEvtNotify(CAMERA_MSG_ERROR,
@@ -2752,6 +2762,16 @@
{
mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload;
switch (cam_evt->server_event_type) {
+ case CAM_EVENT_TYPE_REPROCESS_STAGE_DONE:
+ {
+ if ( m_parent->isLongshotEnabled() ) {
+ if(!m_parent->m_postprocessor.getMultipleStages()) {
+ m_parent->m_postprocessor.setMultipleStages(true);
+ }
+ m_parent->playShutter();
+ }
+ }
+ break;
case CAM_EVENT_TYPE_DAEMON_DIED:
{
m_parent->sendEvtNotify(CAMERA_MSG_ERROR,