Loading services/camera/libcameraservice/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ LOCAL_SRC_FILES:= \ CameraDeviceBase.cpp \ Camera2Device.cpp \ Camera3Device.cpp \ CameraDeviceFactory.cpp \ camera2/Parameters.cpp \ camera2/FrameProcessor.cpp \ camera2/StreamingProcessor.cpp \ Loading services/camera/libcameraservice/Camera2Client.cpp +0 −16 Original line number Diff line number Diff line Loading @@ -58,22 +58,6 @@ Camera2Client::Camera2Client(const sp<CameraService>& cameraService, mDeviceVersion(deviceVersion) { ATRACE_CALL(); ALOGI("Camera %d: Opened", cameraId); switch (mDeviceVersion) { case CAMERA_DEVICE_API_VERSION_2_0: mDevice = new Camera2Device(cameraId); break; case CAMERA_DEVICE_API_VERSION_3_0: mDevice = new Camera3Device(cameraId); break; default: ALOGE("Camera %d: Unknown HAL device version %d", cameraId, mDeviceVersion); mDevice = NULL; break; } SharedParameters::Lock l(mParameters); l.mParameters.state = Parameters::DISCONNECTED; Loading services/camera/libcameraservice/Camera2ClientBase.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -30,7 +30,8 @@ #include "photography/CameraDeviceClient.h" #include "Camera2Device.h" #include "CameraDeviceBase.h" #include "CameraDeviceFactory.h" namespace android { using namespace camera2; Loading @@ -56,7 +57,9 @@ Camera2ClientBase<TClientBase>::Camera2ClientBase( mSharedCameraCallbacks(remoteCallback) { ALOGI("Camera %d: Opened", cameraId); mDevice = new Camera2Device(cameraId); mDevice = CameraDeviceFactory::createDevice(cameraId); LOG_ALWAYS_FATAL_IF(mDevice == 0, "Device should never be NULL here."); } template <typename TClientBase> Loading services/camera/libcameraservice/CameraDeviceFactory.cpp 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // #define LOG_NDEBUG 0 #define LOG_TAG "CameraDeviceFactory" #include <utils/Log.h> #include "CameraDeviceBase.h" #include "Camera2Device.h" #include "Camera3Device.h" #include "CameraService.h" #include "CameraDeviceFactory.h" namespace android { wp<CameraService> CameraDeviceFactory::sService; sp<CameraDeviceBase> CameraDeviceFactory::createDevice(int cameraId) { sp<CameraService> svc = sService.promote(); if (svc == 0) { ALOGE("%s: No service registered", __FUNCTION__); return NULL; } int deviceVersion = svc->getDeviceVersion(cameraId, /*facing*/NULL); sp<CameraDeviceBase> device; switch (deviceVersion) { case CAMERA_DEVICE_API_VERSION_2_0: case CAMERA_DEVICE_API_VERSION_2_1: device = new Camera2Device(cameraId); break; case CAMERA_DEVICE_API_VERSION_3_0: device = new Camera3Device(cameraId); break; default: ALOGE("%s: Camera %d: Unknown HAL device version %d", __FUNCTION__, cameraId, deviceVersion); device = NULL; break; } ALOGV_IF(device != 0, "Created a new camera device for version %d", deviceVersion); return device; } void CameraDeviceFactory::registerService(wp<CameraService> service) { ALOGV("%s: Registered service %p", __FUNCTION__, service.promote().get()); sService = service; } }; // namespace android services/camera/libcameraservice/CameraDeviceFactory.h 0 → 100644 +44 −0 Original line number Diff line number Diff line /* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_SERVERS_CAMERA_CAMERADEVICEFACTORY_H #define ANDROID_SERVERS_CAMERA_CAMERADEVICEFACTORY_H #include <utils/RefBase.h> namespace android { class CameraDeviceBase; class CameraService; /** * Create the right instance of Camera2Device or Camera3Device * automatically based on the device version. */ class CameraDeviceFactory : public virtual RefBase { public: static void registerService(wp<CameraService> service); // Prerequisite: Call registerService. static sp<CameraDeviceBase> createDevice(int cameraId); private: CameraDeviceFactory(wp<CameraService> service); static wp<CameraService> sService; }; }; // namespace android #endif Loading
services/camera/libcameraservice/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ LOCAL_SRC_FILES:= \ CameraDeviceBase.cpp \ Camera2Device.cpp \ Camera3Device.cpp \ CameraDeviceFactory.cpp \ camera2/Parameters.cpp \ camera2/FrameProcessor.cpp \ camera2/StreamingProcessor.cpp \ Loading
services/camera/libcameraservice/Camera2Client.cpp +0 −16 Original line number Diff line number Diff line Loading @@ -58,22 +58,6 @@ Camera2Client::Camera2Client(const sp<CameraService>& cameraService, mDeviceVersion(deviceVersion) { ATRACE_CALL(); ALOGI("Camera %d: Opened", cameraId); switch (mDeviceVersion) { case CAMERA_DEVICE_API_VERSION_2_0: mDevice = new Camera2Device(cameraId); break; case CAMERA_DEVICE_API_VERSION_3_0: mDevice = new Camera3Device(cameraId); break; default: ALOGE("Camera %d: Unknown HAL device version %d", cameraId, mDeviceVersion); mDevice = NULL; break; } SharedParameters::Lock l(mParameters); l.mParameters.state = Parameters::DISCONNECTED; Loading
services/camera/libcameraservice/Camera2ClientBase.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -30,7 +30,8 @@ #include "photography/CameraDeviceClient.h" #include "Camera2Device.h" #include "CameraDeviceBase.h" #include "CameraDeviceFactory.h" namespace android { using namespace camera2; Loading @@ -56,7 +57,9 @@ Camera2ClientBase<TClientBase>::Camera2ClientBase( mSharedCameraCallbacks(remoteCallback) { ALOGI("Camera %d: Opened", cameraId); mDevice = new Camera2Device(cameraId); mDevice = CameraDeviceFactory::createDevice(cameraId); LOG_ALWAYS_FATAL_IF(mDevice == 0, "Device should never be NULL here."); } template <typename TClientBase> Loading
services/camera/libcameraservice/CameraDeviceFactory.cpp 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // #define LOG_NDEBUG 0 #define LOG_TAG "CameraDeviceFactory" #include <utils/Log.h> #include "CameraDeviceBase.h" #include "Camera2Device.h" #include "Camera3Device.h" #include "CameraService.h" #include "CameraDeviceFactory.h" namespace android { wp<CameraService> CameraDeviceFactory::sService; sp<CameraDeviceBase> CameraDeviceFactory::createDevice(int cameraId) { sp<CameraService> svc = sService.promote(); if (svc == 0) { ALOGE("%s: No service registered", __FUNCTION__); return NULL; } int deviceVersion = svc->getDeviceVersion(cameraId, /*facing*/NULL); sp<CameraDeviceBase> device; switch (deviceVersion) { case CAMERA_DEVICE_API_VERSION_2_0: case CAMERA_DEVICE_API_VERSION_2_1: device = new Camera2Device(cameraId); break; case CAMERA_DEVICE_API_VERSION_3_0: device = new Camera3Device(cameraId); break; default: ALOGE("%s: Camera %d: Unknown HAL device version %d", __FUNCTION__, cameraId, deviceVersion); device = NULL; break; } ALOGV_IF(device != 0, "Created a new camera device for version %d", deviceVersion); return device; } void CameraDeviceFactory::registerService(wp<CameraService> service) { ALOGV("%s: Registered service %p", __FUNCTION__, service.promote().get()); sService = service; } }; // namespace android
services/camera/libcameraservice/CameraDeviceFactory.h 0 → 100644 +44 −0 Original line number Diff line number Diff line /* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_SERVERS_CAMERA_CAMERADEVICEFACTORY_H #define ANDROID_SERVERS_CAMERA_CAMERADEVICEFACTORY_H #include <utils/RefBase.h> namespace android { class CameraDeviceBase; class CameraService; /** * Create the right instance of Camera2Device or Camera3Device * automatically based on the device version. */ class CameraDeviceFactory : public virtual RefBase { public: static void registerService(wp<CameraService> service); // Prerequisite: Call registerService. static sp<CameraDeviceBase> createDevice(int cameraId); private: CameraDeviceFactory(wp<CameraService> service); static wp<CameraService> sService; }; }; // namespace android #endif