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 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 49 EmulatedFakeCamera::~EmulatedFakeCamera() 50 { 51 delete mFakeCameraDevice; 52 } 53 54 /**************************************************************************** 55 * Public API overrides 56 ***************************************************************************/ 57 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 102 EmulatedCameraDevice* EmulatedFakeCamera::getCameraDevice() 103 { 104 return mFakeCameraDevice; 105 } 106 107 }; /* namespace android */ 108