blob: 6589e272c5c272f047cd992a9ec186ebba330868 [file] [log] [blame]
Igor Murashkin98e24722013-06-19 19:51:04 -07001/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17// #define LOG_NDEBUG 0
18#define LOG_TAG "CameraDeviceFactory"
19#include <utils/Log.h>
20
Igor Murashkin98e24722013-06-19 19:51:04 -070021#include "CameraService.h"
22#include "CameraDeviceFactory.h"
Eino-Ville Talvala7b82efe2013-07-25 17:12:35 -070023#include "common/CameraDeviceBase.h"
24#include "device2/Camera2Device.h"
25#include "device3/Camera3Device.h"
Igor Murashkin98e24722013-06-19 19:51:04 -070026
27namespace android {
28
29wp<CameraService> CameraDeviceFactory::sService;
30
31sp<CameraDeviceBase> CameraDeviceFactory::createDevice(int cameraId) {
32
33 sp<CameraService> svc = sService.promote();
34 if (svc == 0) {
35 ALOGE("%s: No service registered", __FUNCTION__);
36 return NULL;
37 }
38
39 int deviceVersion = svc->getDeviceVersion(cameraId, /*facing*/NULL);
40
41 sp<CameraDeviceBase> device;
42
43 switch (deviceVersion) {
44 case CAMERA_DEVICE_API_VERSION_2_0:
45 case CAMERA_DEVICE_API_VERSION_2_1:
46 device = new Camera2Device(cameraId);
47 break;
48 case CAMERA_DEVICE_API_VERSION_3_0:
Zhijun He95dd5ba2014-03-26 18:18:00 -070049 case CAMERA_DEVICE_API_VERSION_3_1:
50 case CAMERA_DEVICE_API_VERSION_3_2:
Ruben Brunkcc776712015-02-17 20:18:47 -080051 case CAMERA_DEVICE_API_VERSION_3_3:
Igor Murashkin98e24722013-06-19 19:51:04 -070052 device = new Camera3Device(cameraId);
53 break;
54 default:
55 ALOGE("%s: Camera %d: Unknown HAL device version %d",
56 __FUNCTION__, cameraId, deviceVersion);
57 device = NULL;
58 break;
59 }
60
61 ALOGV_IF(device != 0, "Created a new camera device for version %d",
62 deviceVersion);
63
64 return device;
65}
66
67void CameraDeviceFactory::registerService(wp<CameraService> service) {
68 ALOGV("%s: Registered service %p", __FUNCTION__,
69 service.promote().get());
70
71 sService = service;
72}
73
74}; // namespace android