• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <log/log.h>
25 #include <cutils/properties.h>
26 #include "EmulatedFakeCamera.h"
27 #include "EmulatedCameraFactory.h"
28 #include "EmulatedFakeCameraDevice.h"
29 #include "EmulatedFakeRotatingCameraDevice.h"
30 
31 namespace android {
32 
EmulatedFakeCamera(int cameraId,bool facingBack,struct hw_module_t * module)33 EmulatedFakeCamera::EmulatedFakeCamera(int cameraId,
34                                        bool facingBack,
35                                        struct hw_module_t* module)
36         : EmulatedCamera(cameraId, module),
37           mFacingBack(facingBack),
38           mFakeCameraDevice(nullptr)
39 {
40     const char *key = "ro.kernel.qemu.camera.fake.rotating";
41     char prop[PROPERTY_VALUE_MAX];
42     if (property_get(key, prop, nullptr) > 0) {
43         mFakeCameraDevice = new EmulatedFakeRotatingCameraDevice(this);
44     } else {
45         mFakeCameraDevice = new EmulatedFakeCameraDevice(this);
46     }
47 }
48 
~EmulatedFakeCamera()49 EmulatedFakeCamera::~EmulatedFakeCamera()
50 {
51     delete mFakeCameraDevice;
52 }
53 
54 /****************************************************************************
55  * Public API overrides
56  ***************************************************************************/
57 
Initialize()58 status_t EmulatedFakeCamera::Initialize()
59 {
60     status_t res = mFakeCameraDevice->Initialize();
61     if (res != NO_ERROR) {
62         return res;
63     }
64 
65     const char* facing = mFacingBack ? EmulatedCamera::FACING_BACK :
66                                        EmulatedCamera::FACING_FRONT;
67 
68     mParameters.set(EmulatedCamera::FACING_KEY, facing);
69     ALOGD("%s: Fake camera is facing %s", __FUNCTION__, facing);
70 
71     mParameters.set(EmulatedCamera::ORIENTATION_KEY,
72                     gEmulatedCameraFactory.getFakeCameraOrientation());
73     mParameters.set(CameraParameters::KEY_ROTATION,
74                     gEmulatedCameraFactory.getFakeCameraOrientation());
75 
76     res = EmulatedCamera::Initialize();
77     if (res != NO_ERROR) {
78         return res;
79     }
80 
81     /*
82      * Parameters provided by the camera device.
83      */
84 
85    /* 352x288, 320x240 and 176x144 frame dimensions are required by
86      * the framework for video mode preview and video recording. */
87     mParameters.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES,
88                     "1920x1080,1280x720,640x480,352x288,320x240");
89     mParameters.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES,
90                     "1920x1080,1280x720,640x480,352x288,320x240,176x144");
91     mParameters.set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES,
92                     "1920x1080,1280x720,640x480,352x288,320x240,176x144");
93     mParameters.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO,
94                     "1920x1080");
95 
96     mParameters.setPreviewSize(1920, 1080);
97     mParameters.setPictureSize(1920, 1080);
98 
99     return NO_ERROR;
100 }
101 
getCameraDevice()102 EmulatedCameraDevice* EmulatedFakeCamera::getCameraDevice()
103 {
104     return mFakeCameraDevice;
105 }
106 
107 };  /* namespace android */
108