summaryrefslogtreecommitdiff
path: root/libcamera2
diff options
context:
space:
mode:
authorAlex Ray <aray@google.com>2013-03-27 14:34:03 -0700
committerAlex Ray <aray@google.com>2013-03-27 14:35:05 -0700
commit5c664f4ce4110c37bd30fdedb79026780635f308 (patch)
tree5852881df249bb77126914dc703f9e71458d2a81 /libcamera2
parent690c39906e5dab752a87ed741c94ae4b6fc6db20 (diff)
downloadexynos5-5c664f4ce4110c37bd30fdedb79026780635f308.tar.gz
libcamera2: Handle ion_alloc failures
Return error when failing to allocate sensor scratch buffers in device open. Bug: 8049715 Change-Id: Ib7e05e226ab08190f4bf933f8aa06ccd44758508
Diffstat (limited to 'libcamera2')
-rw-r--r--libcamera2/ExynosCameraHWInterface2.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/libcamera2/ExynosCameraHWInterface2.cpp b/libcamera2/ExynosCameraHWInterface2.cpp
index 5dee2e7..82b4f1a 100644
--- a/libcamera2/ExynosCameraHWInterface2.cpp
+++ b/libcamera2/ExynosCameraHWInterface2.cpp
@@ -1277,10 +1277,19 @@ int ExynosCameraHWInterface2::InitializeISPChain()
m_camera_info.sensor.memory = V4L2_MEMORY_DMABUF;
for(i = 0; i < m_camera_info.sensor.buffers; i++){
+ int res;
initCameraMemory(&m_camera_info.sensor.buffer[i], m_camera_info.sensor.planes);
m_camera_info.sensor.buffer[i].size.extS[0] = m_camera_info.sensor.width*m_camera_info.sensor.height*2;
m_camera_info.sensor.buffer[i].size.extS[1] = 8*1024; // HACK, driver use 8*1024, should be use predefined value
- allocCameraMemory(m_ionCameraClient, &m_camera_info.sensor.buffer[i], m_camera_info.sensor.planes, 1<<1);
+ res = allocCameraMemory(m_ionCameraClient, &m_camera_info.sensor.buffer[i], m_camera_info.sensor.planes, 1<<1);
+ if (res) {
+ ALOGE("ERROR(%s): failed to allocateCameraMemory for sensor buffer %d", __FUNCTION__, i);
+ // Free allocated sensor buffers
+ for (int j = 0; j < i; j++) {
+ freeCameraMemory(&m_camera_info.sensor.buffer[j], m_camera_info.sensor.planes);
+ }
+ return false;
+ }
}
m_camera_info.isp.width = m_camera_info.sensor.width;