CameraDeviceFactory.cpp revision 7b82efe7a376c882f8f938e1c41b8311a8cdda4a
1/*
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
21#include "CameraService.h"
22#include "CameraDeviceFactory.h"
23#include "common/CameraDeviceBase.h"
24#include "device2/Camera2Device.h"
25#include "device3/Camera3Device.h"
26
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:
49            device = new Camera3Device(cameraId);
50            break;
51        default:
52            ALOGE("%s: Camera %d: Unknown HAL device version %d",
53                  __FUNCTION__, cameraId, deviceVersion);
54            device = NULL;
55            break;
56    }
57
58    ALOGV_IF(device != 0, "Created a new camera device for version %d",
59                          deviceVersion);
60
61    return device;
62}
63
64void CameraDeviceFactory::registerService(wp<CameraService> service) {
65    ALOGV("%s: Registered service %p", __FUNCTION__,
66          service.promote().get());
67
68    sService = service;
69}
70
71}; // namespace android
72