Loading services/camera/libcameraservice/api1/CameraClient.cpp +19 −12 Original line number Original line Diff line number Diff line Loading @@ -508,7 +508,7 @@ void CameraClient::releaseRecordingFrame(const sp<IMemory>& mem) { void CameraClient::releaseRecordingFrameHandle(native_handle_t *handle) { void CameraClient::releaseRecordingFrameHandle(native_handle_t *handle) { if (handle == nullptr) return; if (handle == nullptr) return; Mutex::Autolock lock(mLock); sp<IMemory> dataPtr; sp<IMemory> dataPtr; { { Mutex::Autolock l(mAvailableCallbackBuffersLock); Mutex::Autolock l(mAvailableCallbackBuffersLock); Loading @@ -532,17 +532,22 @@ void CameraClient::releaseRecordingFrameHandle(native_handle_t *handle) { return; return; } } if (mHardware != nullptr) { VideoNativeHandleMetadata *metadata = (VideoNativeHandleMetadata*)(dataPtr->pointer()); VideoNativeHandleMetadata *metadata = (VideoNativeHandleMetadata*)(dataPtr->pointer()); metadata->eType = kMetadataBufferTypeNativeHandleSource; metadata->eType = kMetadataBufferTypeNativeHandleSource; metadata->pHandle = handle; metadata->pHandle = handle; mHardware->releaseRecordingFrame(dataPtr); mHardware->releaseRecordingFrame(dataPtr); } } } void CameraClient::releaseRecordingFrameHandleBatch(const std::vector<native_handle_t*>& handles) { void CameraClient::releaseRecordingFrameHandleBatch(const std::vector<native_handle_t*>& handles) { Mutex::Autolock lock(mLock); bool disconnected = (mHardware == nullptr); size_t n = handles.size(); size_t n = handles.size(); std::vector<sp<IMemory>> frames; std::vector<sp<IMemory>> frames; if (!disconnected) { frames.reserve(n); frames.reserve(n); } bool error = false; bool error = false; for (auto& handle : handles) { for (auto& handle : handles) { sp<IMemory> dataPtr; sp<IMemory> dataPtr; Loading @@ -566,18 +571,20 @@ void CameraClient::releaseRecordingFrameHandleBatch(const std::vector<native_han break; break; } } if (!disconnected) { VideoNativeHandleMetadata *metadata = (VideoNativeHandleMetadata*)(dataPtr->pointer()); VideoNativeHandleMetadata *metadata = (VideoNativeHandleMetadata*)(dataPtr->pointer()); metadata->eType = kMetadataBufferTypeNativeHandleSource; metadata->eType = kMetadataBufferTypeNativeHandleSource; metadata->pHandle = handle; metadata->pHandle = handle; frames.push_back(dataPtr); frames.push_back(dataPtr); } } } if (error) { if (error) { for (auto& handle : handles) { for (auto& handle : handles) { native_handle_close(handle); native_handle_close(handle); native_handle_delete(handle); native_handle_delete(handle); } } } else { } else if (!disconnected) { mHardware->releaseRecordingFrameBatch(frames); mHardware->releaseRecordingFrameBatch(frames); } } return; return; Loading Loading
services/camera/libcameraservice/api1/CameraClient.cpp +19 −12 Original line number Original line Diff line number Diff line Loading @@ -508,7 +508,7 @@ void CameraClient::releaseRecordingFrame(const sp<IMemory>& mem) { void CameraClient::releaseRecordingFrameHandle(native_handle_t *handle) { void CameraClient::releaseRecordingFrameHandle(native_handle_t *handle) { if (handle == nullptr) return; if (handle == nullptr) return; Mutex::Autolock lock(mLock); sp<IMemory> dataPtr; sp<IMemory> dataPtr; { { Mutex::Autolock l(mAvailableCallbackBuffersLock); Mutex::Autolock l(mAvailableCallbackBuffersLock); Loading @@ -532,17 +532,22 @@ void CameraClient::releaseRecordingFrameHandle(native_handle_t *handle) { return; return; } } if (mHardware != nullptr) { VideoNativeHandleMetadata *metadata = (VideoNativeHandleMetadata*)(dataPtr->pointer()); VideoNativeHandleMetadata *metadata = (VideoNativeHandleMetadata*)(dataPtr->pointer()); metadata->eType = kMetadataBufferTypeNativeHandleSource; metadata->eType = kMetadataBufferTypeNativeHandleSource; metadata->pHandle = handle; metadata->pHandle = handle; mHardware->releaseRecordingFrame(dataPtr); mHardware->releaseRecordingFrame(dataPtr); } } } void CameraClient::releaseRecordingFrameHandleBatch(const std::vector<native_handle_t*>& handles) { void CameraClient::releaseRecordingFrameHandleBatch(const std::vector<native_handle_t*>& handles) { Mutex::Autolock lock(mLock); bool disconnected = (mHardware == nullptr); size_t n = handles.size(); size_t n = handles.size(); std::vector<sp<IMemory>> frames; std::vector<sp<IMemory>> frames; if (!disconnected) { frames.reserve(n); frames.reserve(n); } bool error = false; bool error = false; for (auto& handle : handles) { for (auto& handle : handles) { sp<IMemory> dataPtr; sp<IMemory> dataPtr; Loading @@ -566,18 +571,20 @@ void CameraClient::releaseRecordingFrameHandleBatch(const std::vector<native_han break; break; } } if (!disconnected) { VideoNativeHandleMetadata *metadata = (VideoNativeHandleMetadata*)(dataPtr->pointer()); VideoNativeHandleMetadata *metadata = (VideoNativeHandleMetadata*)(dataPtr->pointer()); metadata->eType = kMetadataBufferTypeNativeHandleSource; metadata->eType = kMetadataBufferTypeNativeHandleSource; metadata->pHandle = handle; metadata->pHandle = handle; frames.push_back(dataPtr); frames.push_back(dataPtr); } } } if (error) { if (error) { for (auto& handle : handles) { for (auto& handle : handles) { native_handle_close(handle); native_handle_close(handle); native_handle_delete(handle); native_handle_delete(handle); } } } else { } else if (!disconnected) { mHardware->releaseRecordingFrameBatch(frames); mHardware->releaseRecordingFrameBatch(frames); } } return; return; Loading