summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMansoor Aftab <maftab@codeaurora.org>2013-10-14 10:44:10 -0700
committerAli B <abittin@gmail.com>2018-06-17 19:19:52 +0300
commit91b6970d183119d918b7210b09145cd2a03c3988 (patch)
tree2a5a9db34c0102088c7e826422dc0b24a0a124b1
parent4cec623a986e17eeb6501a5ad648ba56127f174a (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-xcamera/QCamera2/HAL3/QCamera3HWI.cpp10
-rwxr-xr-xcamera/QCamera2/HAL3/QCamera3HWI.h2
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, &notify_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;