diff options
Diffstat (limited to 'camera/device/3.2/default/CameraDeviceSession.cpp')
-rw-r--r-- | camera/device/3.2/default/CameraDeviceSession.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/camera/device/3.2/default/CameraDeviceSession.cpp b/camera/device/3.2/default/CameraDeviceSession.cpp index 201a3b41c1..5f7b9508c7 100644 --- a/camera/device/3.2/default/CameraDeviceSession.cpp +++ b/camera/device/3.2/default/CameraDeviceSession.cpp @@ -307,31 +307,40 @@ Status CameraDeviceSession::importRequest( hidl_vec<buffer_handle_t*>& allBufPtrs, hidl_vec<int>& allFences) { bool hasInputBuf = (request.inputBuffer.streamId != -1 && - request.inputBuffer.buffer.getNativeHandle() != nullptr); + request.inputBuffer.bufferId != 0); size_t numOutputBufs = request.outputBuffers.size(); size_t numBufs = numOutputBufs + (hasInputBuf ? 1 : 0); // Validate all I/O buffers hidl_vec<buffer_handle_t> allBufs; + hidl_vec<uint64_t> allBufIds; allBufs.resize(numBufs); + allBufIds.resize(numBufs); allBufPtrs.resize(numBufs); allFences.resize(numBufs); std::vector<int32_t> streamIds(numBufs); for (size_t i = 0; i < numOutputBufs; i++) { allBufs[i] = request.outputBuffers[i].buffer.getNativeHandle(); + allBufIds[i] = request.outputBuffers[i].bufferId; allBufPtrs[i] = &allBufs[i]; streamIds[i] = request.outputBuffers[i].streamId; } if (hasInputBuf) { allBufs[numOutputBufs] = request.inputBuffer.buffer.getNativeHandle(); + allBufIds[numOutputBufs] = request.inputBuffer.bufferId; allBufPtrs[numOutputBufs] = &allBufs[numOutputBufs]; streamIds[numOutputBufs] = request.inputBuffer.streamId; } for (size_t i = 0; i < numBufs; i++) { buffer_handle_t buf = allBufs[i]; + uint64_t bufId = allBufIds[i]; CirculatingBuffers& cbs = mCirculatingBuffers[streamIds[i]]; - if (cbs.count(buf) == 0) { + if (cbs.count(bufId) == 0) { + if (buf == nullptr) { + ALOGE("%s: bufferId %" PRIu64 " has null buffer handle!", __FUNCTION__, bufId); + return Status::ILLEGAL_ARGUMENT; + } // Register a newly seen buffer buffer_handle_t importedBuf = buf; sHandleImporter.importBuffer(importedBuf); @@ -339,10 +348,10 @@ Status CameraDeviceSession::importRequest( ALOGE("%s: output buffer %zu is invalid!", __FUNCTION__, i); return Status::INTERNAL_ERROR; } else { - cbs[buf] = importedBuf; + cbs[bufId] = importedBuf; } } - allBufPtrs[i] = &cbs[buf]; + allBufPtrs[i] = &cbs[bufId]; } // All buffers are imported. Now validate output buffer acquire fences @@ -509,7 +518,7 @@ Return<Status> CameraDeviceSession::processCaptureRequest(const CaptureRequest& hidl_vec<buffer_handle_t*> allBufPtrs; hidl_vec<int> allFences; bool hasInputBuf = (request.inputBuffer.streamId != -1 && - request.inputBuffer.buffer.getNativeHandle() != nullptr); + request.inputBuffer.bufferId != 0); size_t numOutputBufs = request.outputBuffers.size(); size_t numBufs = numOutputBufs + (hasInputBuf ? 1 : 0); status = importRequest(request, allBufPtrs, allFences); |