diff options
author | Shuzhen Wang <shuzhenwang@google.com> | 2016-05-10 18:01:36 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-05-10 18:01:36 +0000 |
commit | bdbae40ee27ad452d4b49a89096f9917e8ae3cf8 (patch) | |
tree | c6936085cc86a27ffa1388660d3200023189bf36 | |
parent | c1bf47bea206d571dc2712b431a85af368733118 (diff) | |
parent | 476765d0d09106985229de7df7bf4075e2bd770f (diff) | |
download | shamu-bdbae40ee27ad452d4b49a89096f9917e8ae3cf8.tar.gz |
Camera3: Save previous settings for repeating request
am: 476765d0d0
* commit '476765d0d09106985229de7df7bf4075e2bd770f':
Camera3: Save previous settings for repeating request
Change-Id: I1fde8cc1edcbb027268cd7c1c87a9b1f71b49852
-rw-r--r-- | camera/QCamera2/HAL3/QCamera3HWI.cpp | 23 | ||||
-rw-r--r-- | camera/QCamera2/HAL3/QCamera3HWI.h | 3 |
2 files changed, 22 insertions, 4 deletions
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp index e4f45db5..cbf23d39 100644 --- a/camera/QCamera2/HAL3/QCamera3HWI.cpp +++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp @@ -255,6 +255,7 @@ QCamera3HardwareInterface::QCamera3HardwareInterface(int cameraId, mFlush(false), mParamHeap(NULL), mParameters(NULL), + mPrevParameters(NULL), m_bIsVideo(false), m_bIs4KVideo(false), mEisEnable(0), @@ -2396,7 +2397,7 @@ int QCamera3HardwareInterface::processCaptureRequest( } if(request->input_buffer == NULL) { - rc = setFrameParameters(request, streamID, snapshotStreamId); + rc = setFrameParameters(request, streamID, blob_request, snapshotStreamId); if (rc < 0) { ALOGE("%s: fail to set frame parameters", __func__); pthread_mutex_unlock(&mMutex); @@ -2490,8 +2491,16 @@ int QCamera3HardwareInterface::processCaptureRequest( } if (output.stream->format == HAL_PIXEL_FORMAT_BLOB) { - rc = channel->request(output.buffer, frameNumber, - request->input_buffer, (request->input_buffer)? &reproc_meta : mParameters); + if (request->input_buffer) { + rc = channel->request(output.buffer, frameNumber, + request->input_buffer, &reproc_meta); + } else if (!request->settings) { + rc = channel->request(output.buffer, frameNumber, + NULL, mPrevParameters); + } else { + rc = channel->request(output.buffer, frameNumber, + NULL, mParameters); + } if (rc < 0) { ALOGE("%s: Fail to request on picture channel", __func__); pthread_mutex_unlock(&mMutex); @@ -4168,6 +4177,7 @@ int QCamera3HardwareInterface::initParameters() } mParameters = (metadata_buffer_t*) DATA_PTR(mParamHeap,0); + mPrevParameters = (metadata_buffer_t *)malloc(sizeof(metadata_buffer_t)); return rc; } @@ -4190,6 +4200,9 @@ void QCamera3HardwareInterface::deinitParameters() mParamHeap = NULL; mParameters = NULL; + + free(mPrevParameters); + mPrevParameters = NULL; } /*=========================================================================== @@ -5975,6 +5988,7 @@ camera_metadata_t* QCamera3HardwareInterface::translateCapabilityToMetadata(int * PARAMETERS : * @request : request that needs to be serviced * @streamID : Stream ID of all the requested streams + * @blob_request: Whether this request is a blob request or not * * RETURN : success: NO_ERROR * failure: @@ -5982,6 +5996,7 @@ camera_metadata_t* QCamera3HardwareInterface::translateCapabilityToMetadata(int int QCamera3HardwareInterface::setFrameParameters( camera3_capture_request_t *request, cam_stream_ID_t streamID, + int blob_request, uint32_t snapshotStreamId) { /*translate from camera_metadata_t type to parm_type_t*/ @@ -6015,6 +6030,8 @@ int QCamera3HardwareInterface::setFrameParameters( if(request->settings != NULL){ rc = translateToHalMetadata(request, mParameters, snapshotStreamId); + if (blob_request) + memcpy(mPrevParameters, mParameters, sizeof(metadata_buffer_t)); } return rc; diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h index 5c3ba414..f220d8c5 100644 --- a/camera/QCamera2/HAL3/QCamera3HWI.h +++ b/camera/QCamera2/HAL3/QCamera3HWI.h @@ -152,7 +152,7 @@ public: int flush(); int setFrameParameters(camera3_capture_request_t *request, - cam_stream_ID_t streamID, uint32_t snapshotStreamId); + cam_stream_ID_t streamID, int blob_request, uint32_t snapshotStreamId); int32_t setReprocParameters(camera3_capture_request_t *request, metadata_buffer_t *reprocParam, uint32_t snapshotStreamId); int translateToHalMetadata(const camera3_capture_request_t *request, @@ -261,6 +261,7 @@ private: bool mEnableRawDump; QCamera3HeapMemory *mParamHeap; metadata_buffer_t* mParameters; + metadata_buffer_t* mPrevParameters; bool m_bWNROn; bool m_bIsVideo; bool m_bIs4KVideo; |