1 /*
2 * Copyright (C) 2011 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 /*
18 * Contains implementation of a class EmulatedFakeCamera that encapsulates
19 * functionality of a fake camera.
20 */
21
22 #define LOG_NDEBUG 0
23 #define LOG_TAG "EmulatedCamera_FakeCamera"
24 #include "EmulatedFakeCamera.h"
25 #include <log/log.h>
26 #include <cutils/properties.h>
27 #undef min
28 #undef max
29 #include <algorithm>
30 #include <sstream>
31 #include <string>
32 #include "EmulatedCameraFactory.h"
33
34 namespace android {
35
EmulatedFakeCamera(int cameraId,bool facingBack,struct hw_module_t * module)36 EmulatedFakeCamera::EmulatedFakeCamera(int cameraId, bool facingBack,
37 struct hw_module_t* module)
38 : EmulatedCamera(cameraId, module),
39 mFacingBack(facingBack),
40 mFakeCameraDevice(this) {}
41
~EmulatedFakeCamera()42 EmulatedFakeCamera::~EmulatedFakeCamera() {}
43
44 /****************************************************************************
45 * Public API overrides
46 ***************************************************************************/
47
Initialize(const cuttlefish::CameraDefinition & params)48 status_t EmulatedFakeCamera::Initialize(const cuttlefish::CameraDefinition& params) {
49 status_t res = mFakeCameraDevice.Initialize();
50 if (res != NO_ERROR) {
51 return res;
52 }
53
54 const char* facing =
55 mFacingBack ? EmulatedCamera::FACING_BACK : EmulatedCamera::FACING_FRONT;
56
57 mParameters.set(EmulatedCamera::FACING_KEY, facing);
58 ALOGD("%s: Fake camera is facing %s", __FUNCTION__, facing);
59
60 mParameters.set(EmulatedCamera::ORIENTATION_KEY,
61 EmulatedCameraFactory::Instance().getFakeCameraOrientation());
62
63 res = EmulatedCamera::Initialize(params);
64 if (res != NO_ERROR) {
65 return res;
66 }
67
68 /*
69 * Parameters provided by the camera device.
70 */
71
72 /* 352x288 and 320x240 frame dimensions are required by the framework for
73 * video mode preview and video recording. */
74 std::ostringstream resolutions;
75 for (size_t index = 0; index < params.resolutions.size(); ++index) {
76 if (resolutions.str().size()) {
77 resolutions << ",";
78 }
79 resolutions << params.resolutions[index].width << "x"
80 << params.resolutions[index].height;
81 }
82
83 mParameters.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES,
84 resolutions.str().c_str());
85 mParameters.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES,
86 resolutions.str().c_str());
87 mParameters.setPreviewSize(640, 480);
88 mParameters.setPictureSize(640, 480);
89
90 mParameters.set(CameraParameters::KEY_SUPPORTED_ANTIBANDING,
91 CameraParameters::ANTIBANDING_AUTO);
92 mParameters.set(CameraParameters::KEY_ANTIBANDING,
93 CameraParameters::ANTIBANDING_AUTO);
94 mParameters.set(CameraParameters::KEY_SUPPORTED_EFFECTS,
95 CameraParameters::EFFECT_NONE);
96 mParameters.set(CameraParameters::KEY_EFFECT, CameraParameters::EFFECT_NONE);
97
98 return NO_ERROR;
99 }
100
getCameraDevice()101 EmulatedCameraDevice* EmulatedFakeCamera::getCameraDevice() {
102 return &mFakeCameraDevice;
103 }
104
105 }; /* namespace android */
106