diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2017-04-03 07:34:01 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-04-03 07:34:07 +0000 |
commit | f23752f82ebe7e2c63c22fe0d10c9d46452d3425 (patch) | |
tree | 192494df736413cf1613992c8147b29af9decbae /camera/device/1.0/default/CameraDevice.cpp | |
parent | 9f7cd8e0788b08df1479c2514eb88140db7d16bf (diff) | |
parent | 1ba83a9a282afa086ac2431942a4814633438ffc (diff) |
Merge "Camera: add HAL1 recording batching support" into oc-dev
Diffstat (limited to 'camera/device/1.0/default/CameraDevice.cpp')
-rw-r--r-- | camera/device/1.0/default/CameraDevice.cpp | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/camera/device/1.0/default/CameraDevice.cpp b/camera/device/1.0/default/CameraDevice.cpp index 819525be1e..6eeda1caa3 100644 --- a/camera/device/1.0/default/CameraDevice.cpp +++ b/camera/device/1.0/default/CameraDevice.cpp @@ -420,6 +420,39 @@ void CameraDevice::sDataCb(int32_t msg_type, const camera_memory_t *data, unsign } } +void CameraDevice::handleCallbackTimestamp( + nsecs_t timestamp, int32_t msg_type, + MemoryId memId , unsigned index, native_handle_t* handle) { + uint32_t batchSize = 0; + { + Mutex::Autolock _l(mBatchLock); + batchSize = mBatchSize; + } + + if (batchSize == 0) { // non-batch mode + mDeviceCallback->handleCallbackTimestamp( + (DataCallbackMsg) msg_type, handle, memId, index, timestamp); + } else { // batch mode + Mutex::Autolock _l(mBatchLock); + size_t inflightSize = mInflightBatch.size(); + if (inflightSize == 0) { + mBatchMsgType = msg_type; + } else if (mBatchMsgType != msg_type) { + ALOGE("%s: msg_type change (from %d to %d) is not supported!", + __FUNCTION__, mBatchMsgType, msg_type); + return; + } + mInflightBatch.push_back({handle, memId, index, timestamp}); + + // Send batched frames to camera framework + if (mInflightBatch.size() >= batchSize) { + mDeviceCallback->handleCallbackTimestampBatch( + (DataCallbackMsg) mBatchMsgType, mInflightBatch); + mInflightBatch.clear(); + } + } +} + void CameraDevice::sDataCbTimestamp(nsecs_t timestamp, int32_t msg_type, const camera_memory_t *data, unsigned index, void *user) { ALOGV("%s", __FUNCTION__); @@ -450,8 +483,7 @@ void CameraDevice::sDataCbTimestamp(nsecs_t timestamp, int32_t msg_type, object->mDeviceCallback->dataCallbackTimestamp( (DataCallbackMsg) msg_type, mem->handle.mId, index, timestamp); } else { - object->mDeviceCallback->handleCallbackTimestamp( - (DataCallbackMsg) msg_type, handle, mem->handle.mId, index, timestamp); + object->handleCallbackTimestamp(timestamp, msg_type, mem->handle.mId, index, handle); } } } @@ -827,6 +859,17 @@ Return<void> CameraDevice::releaseRecordingFrameHandle( return Void(); } +Return<void> CameraDevice::releaseRecordingFrameHandleBatch( + const hidl_vec<VideoFrameMessage>& msgs) { + ALOGV("%s(%s)", __FUNCTION__, mCameraId.c_str()); + Mutex::Autolock _l(mLock); + for (auto& msg : msgs) { + releaseRecordingFrameLocked( + msg.data, msg.bufferIndex, msg.frameData.getNativeHandle()); + } + return Void(); +} + Return<Status> CameraDevice::autoFocus() { ALOGV("%s(%s)", __FUNCTION__, mCameraId.c_str()); Mutex::Autolock _l(mLock); |