summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorRuben Brunk <rubenbrunk@google.com>2014-09-02 18:19:13 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-09-02 18:19:14 +0000
commitb72726bad6c9253c26c82fea76bdf99e18b8ba6d (patch)
tree33e6fec8abd0ba5308fb0ed03a32d3b31aec6a66 /services
parente4478febd87f6a663bbdf2c22dd829af2a8166a6 (diff)
parent65e01f763571b779fbc759e6f96d0a195b94c6da (diff)
downloadframeworks_av-b72726bad6c9253c26c82fea76bdf99e18b8ba6d.zip
frameworks_av-b72726bad6c9253c26c82fea76bdf99e18b8ba6d.tar.gz
frameworks_av-b72726bad6c9253c26c82fea76bdf99e18b8ba6d.tar.bz2
Merge "camera1: Ensure MemoryHeap buffers are mmapped before copying." into lmp-dev
Diffstat (limited to 'services')
-rw-r--r--services/camera/libcameraservice/api1/CameraClient.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/services/camera/libcameraservice/api1/CameraClient.cpp b/services/camera/libcameraservice/api1/CameraClient.cpp
index abe1235..33bdaa3 100644
--- a/services/camera/libcameraservice/api1/CameraClient.cpp
+++ b/services/camera/libcameraservice/api1/CameraClient.cpp
@@ -938,7 +938,20 @@ void CameraClient::copyFrameAndPostCopiedFrame(
}
previewBuffer = mPreviewBuffer;
- memcpy(previewBuffer->base(), (uint8_t *)heap->base() + offset, size);
+ void* previewBufferBase = previewBuffer->base();
+ void* heapBase = heap->base();
+
+ if (heapBase == MAP_FAILED) {
+ ALOGE("%s: Failed to mmap heap for preview frame.", __FUNCTION__);
+ mLock.unlock();
+ return;
+ } else if (previewBufferBase == MAP_FAILED) {
+ ALOGE("%s: Failed to mmap preview buffer for preview frame.", __FUNCTION__);
+ mLock.unlock();
+ return;
+ }
+
+ memcpy(previewBufferBase, (uint8_t *) heapBase + offset, size);
sp<MemoryBase> frame = new MemoryBase(previewBuffer, 0, size);
if (frame == 0) {