From d7a4d6dcb9a82eb5daad7ab897a1be5357ce19c3 Mon Sep 17 00:00:00 2001 From: "Wang, Jianfeng XA" Date: Tue, 27 May 2014 17:48:08 +0900 Subject: libcameraservice: Allow media server to disconnect camera even unlocked The camera service may fail to release the camera hardware instance in some use cases. When an application unlocked the camera before disconnect, disconnect from the application will not be accepted. And disconnect from media server will not be accepted also. Then, the camera hardware instance will not be released and a resource leak will be caused. Allow media server to disconnect the camera at all times even if the camera is unlocked. Change-Id: Icd5ed81bed242fa5947aa40ca85e4ca7fa7286e7 --- services/camera/libcameraservice/api1/CameraClient.cpp | 5 ----- 1 file changed, 5 deletions(-) (limited to 'services/camera') diff --git a/services/camera/libcameraservice/api1/CameraClient.cpp b/services/camera/libcameraservice/api1/CameraClient.cpp index 55555fd..735a4ae 100644 --- a/services/camera/libcameraservice/api1/CameraClient.cpp +++ b/services/camera/libcameraservice/api1/CameraClient.cpp @@ -243,11 +243,6 @@ void CameraClient::disconnect() { return; } - if (mClientPid <= 0) { - LOG1("camera is unlocked (mClientPid = %d), don't tear down hardware", mClientPid); - return; - } - // Make sure disconnect() is done once and once only, whether it is called // from the user directly, or called by the destructor. if (mHardware == 0) return; -- cgit v1.1 From 5a4c1f8f409a28508075562277e4d19c4650513c Mon Sep 17 00:00:00 2001 From: Bin Chen Date: Mon, 22 Feb 2016 18:19:58 +1100 Subject: CameraService: Fix cameraId type of onDeviceStatusChanged The cameraId should be of type int, instead of camera_device_status_t. Change-Id: I26d587bb74f7100028f09928984c2e8dad6eebef Signed-off-by: Bin Chen --- services/camera/libcameraservice/CameraService.cpp | 4 ++-- services/camera/libcameraservice/CameraService.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'services/camera') diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp index a560b93..3c9fd16 100644 --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -81,7 +81,7 @@ static void camera_device_status_change( sp cs = const_cast( static_cast(callbacks)); - cs->onDeviceStatusChanged(static_cast(camera_id), + cs->onDeviceStatusChanged(camera_id, static_cast(new_status)); } @@ -277,7 +277,7 @@ CameraService::~CameraService() { gCameraService = nullptr; } -void CameraService::onDeviceStatusChanged(camera_device_status_t cameraId, +void CameraService::onDeviceStatusChanged(int cameraId, camera_device_status_t newStatus) { ALOGI("%s: Status changed for cameraId=%d, newStatus=%d", __FUNCTION__, cameraId, newStatus); diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h index ee4c3f9..53233bd 100644 --- a/services/camera/libcameraservice/CameraService.h +++ b/services/camera/libcameraservice/CameraService.h @@ -102,7 +102,7 @@ public: ///////////////////////////////////////////////////////////////////// // HAL Callbacks - virtual void onDeviceStatusChanged(camera_device_status_t cameraId, + virtual void onDeviceStatusChanged(int cameraId, camera_device_status_t newStatus); virtual void onTorchStatusChanged(const String8& cameraId, ICameraServiceListener::TorchStatus -- cgit v1.1 From b04aee833c5cfb6b31b8558350feb14bb1a0f353 Mon Sep 17 00:00:00 2001 From: Chien-Yu Chen Date: Wed, 9 Mar 2016 12:21:01 -0800 Subject: Camera3Device: Validate template ID Validate template ID before creating a default request. Bug: 26866110 Bug: 27568958 Change-Id: Ifda457024f1d5c2b1382f189c1a8d5fda852d30d --- services/camera/libcameraservice/device3/Camera3Device.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'services/camera') diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index 50d9d75..8b43154 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -43,6 +43,7 @@ #include #include +#include "CameraService.h" #include "utils/CameraTraces.h" #include "mediautils/SchedulingPolicyService.h" #include "device3/Camera3Device.h" @@ -1115,6 +1116,13 @@ status_t Camera3Device::createDefaultRequest(int templateId, CameraMetadata *request) { ATRACE_CALL(); ALOGV("%s: for template %d", __FUNCTION__, templateId); + + if (templateId <= 0 || templateId >= CAMERA3_TEMPLATE_COUNT) { + android_errorWriteWithInfoLog(CameraService::SN_EVENT_LOG_ID, "26866110", + IPCThreadState::self()->getCallingUid(), NULL, 0); + return BAD_VALUE; + } + Mutex::Autolock il(mInterfaceLock); Mutex::Autolock l(mLock); -- cgit v1.1 From baf93ea325ca416aa5a0fc0c6892dda4cef1f444 Mon Sep 17 00:00:00 2001 From: Ricardo Cerqueira Date: Wed, 16 Mar 2016 20:02:38 +0000 Subject: CameraClient: MTK Support Return on MTK hardware, the HAL does this internally and duplicating it here causes an infinite loop. Change-Id: I5bdb925ddb49980747b58dfae4543f812cef4c7d --- services/camera/libcameraservice/api1/CameraClient.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'services/camera') diff --git a/services/camera/libcameraservice/api1/CameraClient.cpp b/services/camera/libcameraservice/api1/CameraClient.cpp index 735a4ae..af46d63 100644 --- a/services/camera/libcameraservice/api1/CameraClient.cpp +++ b/services/camera/libcameraservice/api1/CameraClient.cpp @@ -695,6 +695,9 @@ void CameraClient::disableMsgType(int32_t msgType) { #define CHECK_MESSAGE_INTERVAL 10 // 10ms bool CameraClient::lockIfMessageWanted(int32_t msgType) { +#ifdef MTK_HARDWARE + return true; +#endif int sleepCount = 0; while (mMsgEnabled & msgType) { if (mLock.tryLock() == NO_ERROR) { -- cgit v1.1 From 0ecd6fb627dabf286b7742862e25a592bc1f606c Mon Sep 17 00:00:00 2001 From: Abhishek Kondaveeti Date: Tue, 5 Jan 2016 18:06:15 +0530 Subject: cameraservice: Run HAL3 in Non ZSL mode ZSL mode is not working on HAL3 due to camera backend failures. Run HAL3 forcefully in Non zsl mode till the problem in camera backend fixed. This change will be reverted once the backend issue is fixed. CRs-Fixed: 956182 Change-Id: I1dfcda8eb0fe5cd2d9be6cb2e103f5fd84955ecb --- services/camera/libcameraservice/api1/client2/Parameters.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'services/camera') diff --git a/services/camera/libcameraservice/api1/client2/Parameters.cpp b/services/camera/libcameraservice/api1/client2/Parameters.cpp index 44447b4..4df8361 100644 --- a/services/camera/libcameraservice/api1/client2/Parameters.cpp +++ b/services/camera/libcameraservice/api1/client2/Parameters.cpp @@ -910,7 +910,7 @@ status_t Parameters::initialize(const CameraMetadata *info, int deviceVersion) { } else { zslMode = true; } - + zslMode = false; ALOGI("%s: zslMode: %d slowJpegMode %d", __FUNCTION__, zslMode, slowJpegMode); lightFx = LIGHTFX_NONE; -- cgit v1.1 From eb6bd31da259ea399a8bb5b13e83929aaf9e3ac3 Mon Sep 17 00:00:00 2001 From: Sanjeev Garg Date: Fri, 1 Apr 2016 18:54:28 +0530 Subject: Revert "cameraservice: Run HAL3 in Non ZSL mode". Reverting the Temp change. This reverts commit f300e17bf3451bf821ccc48c45b243c84ebaff7f. Change-Id: Ib11e38eb8edd7523cb6cdb21caa511152ee62e45 --- services/camera/libcameraservice/api1/client2/Parameters.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'services/camera') diff --git a/services/camera/libcameraservice/api1/client2/Parameters.cpp b/services/camera/libcameraservice/api1/client2/Parameters.cpp index 4df8361..44447b4 100644 --- a/services/camera/libcameraservice/api1/client2/Parameters.cpp +++ b/services/camera/libcameraservice/api1/client2/Parameters.cpp @@ -910,7 +910,7 @@ status_t Parameters::initialize(const CameraMetadata *info, int deviceVersion) { } else { zslMode = true; } - zslMode = false; + ALOGI("%s: zslMode: %d slowJpegMode %d", __FUNCTION__, zslMode, slowJpegMode); lightFx = LIGHTFX_NONE; -- cgit v1.1 From 1f24c730ab6ca5aff1e3137b340b8aeaeda4bdbc Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Mon, 20 Jun 2016 17:00:14 -0700 Subject: DO NOT MERGE: Camera: Adjust pointers to ANW buffers to avoid infoleak Subtract address of a random static object from pointers being routed through app process. Bug: 28466701 Change-Id: Idcbfe81e9507433769672f3dc6d67db5eeed4e04 --- .../camera/libcameraservice/api1/client2/StreamingProcessor.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'services/camera') diff --git a/services/camera/libcameraservice/api1/client2/StreamingProcessor.cpp b/services/camera/libcameraservice/api1/client2/StreamingProcessor.cpp index 66d7b00..9e6c0db 100644 --- a/services/camera/libcameraservice/api1/client2/StreamingProcessor.cpp +++ b/services/camera/libcameraservice/api1/client2/StreamingProcessor.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include "common/CameraDeviceBase.h" @@ -826,6 +827,9 @@ status_t StreamingProcessor::processRecordingFrame() { (uint8_t*)heap->getBase() + offset); payload->eType = kMetadataBufferTypeANWBuffer; payload->pBuffer = imgBuffer.mGraphicBuffer->getNativeBuffer(); + // b/28466701 + payload->pBuffer = (ANativeWindowBuffer*)((uint8_t*)payload->pBuffer - + ICameraRecordingProxy::getCommonBaseAddress()); payload->nFenceFd = -1; ALOGVV("%s: Camera %d: Sending out ANWBuffer %p", @@ -874,6 +878,10 @@ void StreamingProcessor::releaseRecordingFrame(const sp& mem) { return; } + // b/28466701 + payload->pBuffer = (ANativeWindowBuffer*)(((uint8_t*)payload->pBuffer) + + ICameraRecordingProxy::getCommonBaseAddress()); + // Release the buffer back to the recording queue size_t itemIndex; for (itemIndex = 0; itemIndex < mRecordingBuffers.size(); itemIndex++) { -- cgit v1.1 From 3f6bb688b22b184b0bfc2739cda3c3cf0dd06a14 Mon Sep 17 00:00:00 2001 From: irii Date: Sun, 11 Sep 2016 16:51:37 +0200 Subject: libcameraservice: Don't pass NULL args on setCallbacks call *This fixes the torch light for cameras with hal 1 *This fix works on the htc m7ul *Fixed line length *Fixed unused parameter names Change-Id: I89c6112546e36dbcca099f4d5cd70371b2c5340a --- services/camera/libcameraservice/CameraFlashlight.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'services/camera') diff --git a/services/camera/libcameraservice/CameraFlashlight.cpp b/services/camera/libcameraservice/CameraFlashlight.cpp index 406c1c4..62ce610 100644 --- a/services/camera/libcameraservice/CameraFlashlight.cpp +++ b/services/camera/libcameraservice/CameraFlashlight.cpp @@ -828,6 +828,18 @@ status_t CameraHardwareInterfaceFlashControl::initializePreviewWindow( return device->setPreviewWindow(mSurface); } +static void notifyCallback(int32_t, int32_t, int32_t, void*) { + /* Empty */ +} + +static void dataCallback(int32_t, const sp&, camera_frame_metadata_t*, void*) { + /* Empty */ +} + +static void dataCallbackTimestamp(nsecs_t, int32_t, const sp&, void*) { + /* Empty */ +} + status_t CameraHardwareInterfaceFlashControl::connectCameraDevice( const String8& cameraId) { sp device = @@ -841,7 +853,7 @@ status_t CameraHardwareInterfaceFlashControl::connectCameraDevice( } // need to set __get_memory in set_callbacks(). - device->setCallbacks(NULL, NULL, NULL, NULL); + device->setCallbacks(notifyCallback, dataCallback, dataCallbackTimestamp, this); mParameters = device->getParameters(); -- cgit v1.1