diff options
| author | Mansoor Aftab <maftab@codeaurora.org> | 2013-10-14 10:44:10 -0700 |
|---|---|---|
| committer | Ali B <abittin@gmail.com> | 2018-06-17 19:19:52 +0300 |
| commit | 91b6970d183119d918b7210b09145cd2a03c3988 (patch) | |
| tree | 2a5a9db34c0102088c7e826422dc0b24a0a124b1 | |
| parent | 4cec623a986e17eeb6501a5ad648ba56127f174a (diff) | |
Camera3: Validate request rate based on metadata rather than buffers
Bug: 11011342
Change-Id: I68c054027bb8b39ad30b0a3ca932b6cb888409c9
Signed-off-by: Daniel Jarai <jaraidaniel@gmail.com>
| -rwxr-xr-x | camera/QCamera2/HAL3/QCamera3HWI.cpp | 10 | ||||
| -rwxr-xr-x | camera/QCamera2/HAL3/QCamera3HWI.h | 2 |
2 files changed, 7 insertions, 5 deletions
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp index 73f97a3..c063433 100755 --- a/camera/QCamera2/HAL3/QCamera3HWI.cpp +++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp @@ -146,6 +146,7 @@ camera3_device_ops_t QCamera3HardwareInterface::mCameraOps = { .reserved = {0}, }; +int QCamera3HardwareInterface::kMaxInFlight = 5; /*=========================================================================== * FUNCTION : QCamera3HardwareInterface @@ -841,6 +842,7 @@ void QCamera3HardwareInterface::handleMetadataWithLock( mCallbackOps->notify(mCallbackOps, ¬ify_msg); ALOGV("%s: notify frame_number = %d, capture_time = %lld", __func__, i->frame_number, capture_time); + mPendingRequest--; // Send empty metadata with already filled buffers for dropped metadata // and send valid metadata with already filled buffers for current metadata @@ -1051,7 +1053,6 @@ void QCamera3HardwareInterface::handleBufferWithLock( } } mCallbackOps->process_capture_result(mCallbackOps, &result); - unblockRequestIfNecessary(); } else { for (List<RequestedBufferInfo>::iterator j = i->buffers.begin(); j != i->buffers.end(); j++) { @@ -1107,7 +1108,6 @@ void QCamera3HardwareInterface::unblockRequestIfNecessary() if (!max_buffers_dequeued) { // Unblock process_capture_request - mPendingRequest = 0; pthread_cond_signal(&mRequestCond); } } @@ -1344,10 +1344,10 @@ int QCamera3HardwareInterface::processCaptureRequest( mFirstRequest = false; //Block on conditional variable - mPendingRequest = 1; - while (mPendingRequest == 1) { + mPendingRequest++; + do { pthread_cond_wait(&mRequestCond, &mMutex); - } + }while (mPendingRequest >= kMaxInFlight); pthread_mutex_unlock(&mMutex); diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h index 319f813..0484fca 100755 --- a/camera/QCamera2/HAL3/QCamera3HWI.h +++ b/camera/QCamera2/HAL3/QCamera3HWI.h @@ -174,6 +174,8 @@ public: int getJpegQuality(); int calcMaxJpegSize(); QCamera3Exif *getExifData(); +public: + static int kMaxInFlight; private: camera3_device_t mCameraDevice; uint8_t mCameraId; |
