QCamera2: Add memory pools for stream buffers
Add the necessary functionality for caching
stream buffers in memory pools for each
stream type. The buffers will be re-used
as long as the camera client doesn't trigger
internal preview restart by updating the
use case(zsl vs. non-zsl), picture size etc.
CRs-Fixed: 571777
Change-Id: I6097662ef2206016f512a3406ce1860fce44d5ef
diff --git a/QCamera2/HAL/QCameraStateMachine.cpp b/QCamera2/HAL/QCameraStateMachine.cpp
index f90e24e..2b4f149 100644
--- a/QCamera2/HAL/QCameraStateMachine.cpp
+++ b/QCamera2/HAL/QCameraStateMachine.cpp
@@ -352,6 +352,10 @@
{
bool needRestart = false;
rc = m_parent->updateParameters((char*)payload, needRestart);
+ if (needRestart) {
+ // Clear memory pools
+ m_parent->m_memoryPool.clear();
+ }
if (rc == NO_ERROR) {
rc = m_parent->commitParameterChanges();
}
@@ -670,6 +674,8 @@
if (needRestart) {
// need restart preview for parameters to take effect
m_parent->unpreparePreview();
+ // Clear memory pools
+ m_parent->m_memoryPool.clear();
// commit parameter changes to server
m_parent->commitParameterChanges();
// prepare preview again
@@ -953,6 +959,8 @@
// need restart preview for parameters to take effect
// stop preview
m_parent->stopPreview();
+ // Clear memory pools
+ m_parent->m_memoryPool.clear();
// commit parameter changes to server
m_parent->commitParameterChanges();
// start preview again
@@ -2494,6 +2502,8 @@
// need restart preview for parameters to take effect
// stop preview
m_parent->stopPreview();
+ // Clear memory pools
+ m_parent->m_memoryPool.clear();
// commit parameter changes to server
m_parent->commitParameterChanges();
// start preview again