diff options
| -rw-r--r-- | services/camera/libcameraservice/api1/CameraClient.cpp | 33 | ||||
| -rw-r--r-- | services/camera/libcameraservice/api1/CameraClient.h | 3 | 
2 files changed, 34 insertions, 2 deletions
diff --git a/services/camera/libcameraservice/api1/CameraClient.cpp b/services/camera/libcameraservice/api1/CameraClient.cpp index e552633..f3a7988 100644 --- a/services/camera/libcameraservice/api1/CameraClient.cpp +++ b/services/camera/libcameraservice/api1/CameraClient.cpp @@ -56,6 +56,9 @@ CameraClient::CameraClient(const sp<CameraService>& cameraService,      mOrientation = getOrientation(0, mCameraFacing == CAMERA_FACING_FRONT);      mLegacyMode = legacyMode;      mPlayShutterSound = true; + +    mLongshotEnabled = false; +    mBurstCnt = 0;      LOG1("CameraClient::CameraClient X (pid %d, id %d)", callingPid, cameraId);  } @@ -544,6 +547,10 @@ status_t CameraClient::takePicture(int msgType) {                             CAMERA_MSG_COMPRESSED_IMAGE);      enableMsgType(picMsgType); +    mBurstCnt = mHardware->getParameters().getInt("num-snaps-per-shutter"); +    if(mBurstCnt <= 0) +        mBurstCnt = 1; +    LOG1("mBurstCnt = %d", mBurstCnt);      return mHardware->takePicture();  } @@ -646,6 +653,20 @@ status_t CameraClient::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) {      } else if (cmd == CAMERA_CMD_PING) {          // If mHardware is 0, checkPidAndHardware will return error.          return OK; +    } else if (cmd == CAMERA_CMD_HISTOGRAM_ON) { +        enableMsgType(CAMERA_MSG_STATS_DATA); +    } else if (cmd == CAMERA_CMD_HISTOGRAM_OFF) { +        disableMsgType(CAMERA_MSG_STATS_DATA); +    } else if (cmd == CAMERA_CMD_METADATA_ON) { +        enableMsgType(CAMERA_MSG_META_DATA); +    } else if (cmd == CAMERA_CMD_METADATA_OFF) { +        disableMsgType(CAMERA_MSG_META_DATA); +    } else if ( cmd == CAMERA_CMD_LONGSHOT_ON ) { +        mLongshotEnabled = true; +    } else if ( cmd == CAMERA_CMD_LONGSHOT_OFF ) { +        mLongshotEnabled = false; +        disableMsgType(CAMERA_MSG_SHUTTER); +        disableMsgType(CAMERA_MSG_COMPRESSED_IMAGE);      }      return mHardware->sendCommand(cmd, arg1, arg2); @@ -788,7 +809,9 @@ void CameraClient::handleShutter(void) {          c->notifyCallback(CAMERA_MSG_SHUTTER, 0, 0);          if (!lockIfMessageWanted(CAMERA_MSG_SHUTTER)) return;      } -    disableMsgType(CAMERA_MSG_SHUTTER); +    if ( !mLongshotEnabled ) { +        disableMsgType(CAMERA_MSG_SHUTTER); +    }      mLock.unlock();  } @@ -867,7 +890,13 @@ void CameraClient::handleRawPicture(const sp<IMemory>& mem) {  // picture callback - compressed picture ready  void CameraClient::handleCompressedPicture(const sp<IMemory>& mem) { -    disableMsgType(CAMERA_MSG_COMPRESSED_IMAGE); +    if (mBurstCnt) +        mBurstCnt--; + +    if (!mBurstCnt && !mLongshotEnabled) { +        LOG1("handleCompressedPicture mBurstCnt = %d", mBurstCnt); +        disableMsgType(CAMERA_MSG_COMPRESSED_IMAGE); +    }      sp<ICameraClient> c = mRemoteCallback;      mLock.unlock(); diff --git a/services/camera/libcameraservice/api1/CameraClient.h b/services/camera/libcameraservice/api1/CameraClient.h index 95616b2..9d2d02f 100644 --- a/services/camera/libcameraservice/api1/CameraClient.h +++ b/services/camera/libcameraservice/api1/CameraClient.h @@ -162,6 +162,9 @@ private:      // This function keeps trying to grab mLock, or give up if the message      // is found to be disabled. It returns true if mLock is grabbed.      bool                    lockIfMessageWanted(int32_t msgType); + +    bool                 mLongshotEnabled; +    int                  mBurstCnt;  };  }  | 
