From ee461fb117dec3de0f714f393922c05554958608 Mon Sep 17 00:00:00 2001 From: Jeong-Seok Yang Date: Fri, 10 Jun 2011 00:23:07 +0900 Subject: libcamera: for preventing to open camera before releasing another camera bug:4363159 Opening some camera was successful before releasing another camera. Thus it has been fixed. It will return error if the situation is happened. Change-Id: Id177f7dd0a14b1f7bb72751f432f9b1afee77ede Signed-off-by: Jeong-Seok Yang --- libcamera/SecCameraHWInterface.cpp | 15 +++++++++++++-- libcamera/SecCameraHWInterface.h | 2 ++ 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'libcamera') diff --git a/libcamera/SecCameraHWInterface.cpp b/libcamera/SecCameraHWInterface.cpp index 5063a12..1dbf1e3 100644 --- a/libcamera/SecCameraHWInterface.cpp +++ b/libcamera/SecCameraHWInterface.cpp @@ -132,6 +132,11 @@ CameraHardwareSec::CameraHardwareSec(int cameraId, camera_device_t *dev) mPictureThread = new PictureThread(this); } +int CameraHardwareSec::getCameraId() const +{ + return mSecCamera->getCameraId(); +} + void CameraHardwareSec::initDefaultParameters(int cameraId) { if (mSecCamera == NULL) { @@ -2664,8 +2669,14 @@ static int HAL_camera_device_open(const struct hw_module_t* module, } if (g_cam_device) { - LOGV("returning existing camera ID %s", id); - goto done; + if (obj(g_cam_device)->getCameraId() == cameraId) { + LOGV("returning existing camera ID %s", id); + goto done; + } else { + LOGE("Cannot open camera %d. camera %d is already running!", + cameraId, obj(g_cam_device)->getCameraId()); + return -ENOSYS; + } } g_cam_device = (camera_device_t *)malloc(sizeof(camera_device_t)); diff --git a/libcamera/SecCameraHWInterface.h b/libcamera/SecCameraHWInterface.h index a94ab75..6a8fcef 100644 --- a/libcamera/SecCameraHWInterface.h +++ b/libcamera/SecCameraHWInterface.h @@ -61,6 +61,8 @@ public: virtual status_t setPreviewWindow(preview_stream_ops *w); virtual void release(); + inline int getCameraId() const; + CameraHardwareSec(int cameraId, camera_device_t *dev); virtual ~CameraHardwareSec(); private: -- cgit v1.1