CameraHal.h revision 1d40b78f3a968634194f0c1d878d1ba122f435d7
1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* 2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Copyright (C) Texas Instruments - http://www.ti.com/ 3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Licensed under the Apache License, Version 2.0 (the "License"); 5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * you may not use this file except in compliance with the License. 6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * You may obtain a copy of the License at 7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * http://www.apache.org/licenses/LICENSE-2.0 9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Unless required by applicable law or agreed to in writing, software 11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * distributed under the License is distributed on an "AS IS" BASIS, 12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * See the License for the specific language governing permissions and 14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * limitations under the License. 15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifndef ANDROID_HARDWARE_CAMERA_HARDWARE_H 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define ANDROID_HARDWARE_CAMERA_HARDWARE_H 21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdio.h> 23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdarg.h> 24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdlib.h> 25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <string.h> 26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <unistd.h> 27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <time.h> 28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <fcntl.h> 29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <sys/ioctl.h> 30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <sys/mman.h> 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <sys/stat.h> 32f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 33f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include <hardware/camera.h> 34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <utils/Log.h> 35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <utils/threads.h> 36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <utils/threads.h> 37f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include <binder/MemoryBase.h> 38f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include <binder/MemoryHeapBase.h> 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <camera/CameraParameters.h> 40f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 41f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include <camera/CameraMetadata.h> 42f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include <camera/ShotParameters.h> 43f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 44f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include <ui/GraphicBufferAllocator.h> 45f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include <ui/GraphicBuffer.h> 46f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 47f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons/* For IMG_native_handle_t */ 48f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include <ui/GraphicBufferMapper.h> 49f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include <hal_public.h> 50f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 51f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include <ion/ion.h> 52f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 53f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include "Common.h" 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "MessageQueue.h" 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "Semaphore.h" 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "CameraProperties.h" 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "SensorListener.h" 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 59f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons//temporarily define format here 60f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define HAL_PIXEL_FORMAT_TI_NV12 0x100 61f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define HAL_PIXEL_FORMAT_TI_Y8 0x103 62f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define HAL_PIXEL_FORMAT_TI_Y16 0x104 6372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define MIN_WIDTH 640 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define MIN_HEIGHT 480 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define PICTURE_WIDTH 3264 /* 5mp - 2560. 8mp - 3280 */ /* Make sure it is a multiple of 16. */ 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define PICTURE_HEIGHT 2448 /* 5mp - 2048. 8mp - 2464 */ /* Make sure it is a multiple of 16. */ 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define PREVIEW_WIDTH 176 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define PREVIEW_HEIGHT 144 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define PIXEL_FORMAT V4L2_PIX_FMT_UYVY 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define VIDEO_FRAME_COUNT_MAX 8 //NUM_OVERLAY_BUFFERS_REQUESTED 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define MAX_CAMERA_BUFFERS 8 //NUM_OVERLAY_BUFFERS_REQUESTED 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define MAX_ZOOM 3 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define THUMB_WIDTH 80 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define THUMB_HEIGHT 60 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define PIX_YUV422I 0 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define PIX_YUV420P 1 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define SATURATION_OFFSET 100 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define SHARPNESS_OFFSET 100 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define CONTRAST_OFFSET 100 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 84f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define FRAME_RATE_HIGH_HD 60 85f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 86941b79b3815eb5f41e0d194d6f65161d1e4a86d0Tyler Luu#define CAMHAL_GRALLOC_USAGE GRALLOC_USAGE_HW_TEXTURE | \ 87941b79b3815eb5f41e0d194d6f65161d1e4a86d0Tyler Luu GRALLOC_USAGE_HW_RENDER | \ 88941b79b3815eb5f41e0d194d6f65161d1e4a86d0Tyler Luu GRALLOC_USAGE_SW_READ_RARELY | \ 89941b79b3815eb5f41e0d194d6f65161d1e4a86d0Tyler Luu GRALLOC_USAGE_SW_WRITE_NEVER 90941b79b3815eb5f41e0d194d6f65161d1e4a86d0Tyler Luu 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Enables Absolute PPM measurements in logcat 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define PPM_INSTRUMENTATION_ABS 1 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 948e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng#define LOCK_BUFFER_TRIES 5 9572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng#define HAL_PIXEL_FORMAT_NV12 0x100 968e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng 97f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define OP_STR_SIZE 100 98e46394481e771dbdc8683645c3740a3d262a3d0fIliyan Malchev 99f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define NONNEG_ASSIGN(x,y) \ 100f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if(x > -1) \ 101f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons y = x 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 103f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define CAMHAL_SIZE_OF_ARRAY(x) static_cast<int>(sizeof(x)/sizeof(x[0])) 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 105f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsnamespace Ti { 106f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsnamespace Camera { 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 108f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef CAMERAHAL_USE_RAW_IMAGE_SAVING 109f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsextern const char * const kRawImagesOutputDirPath; 110f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsextern const char * const kYuvImagesOutputDirPath; 111f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 112f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define V4L_CAMERA_NAME_USB "USBCAMERA" 113f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define OMX_CAMERA_NAME_OV "OV5640" 114f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define OMX_CAMERA_NAME_SONY "IMX060" 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 117f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons///Forward declarations 118f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass CameraHal; 119f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass CameraFrame; 120f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass CameraHalEvent; 121f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass DisplayFrame; 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 123f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass FpsRange { 124f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonspublic: 125f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static int compare(const FpsRange * left, const FpsRange * right); 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 127f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons FpsRange(int min, int max); 128f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons FpsRange(); 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 130f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons bool operator==(const FpsRange & fpsRange) const; 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 132f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons bool isNull() const; 133f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons bool isFixed() const; 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 135f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int min() const; 136f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int max() const; 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 138f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsprivate: 139f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int mMin; 140f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int mMax; 141f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons}; 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 144f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsinline int FpsRange::compare(const FpsRange * const left, const FpsRange * const right) { 145f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if ( left->max() < right->max() ) { 146f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return -1; 147f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 149f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if ( left->max() > right->max() ) { 150f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return 1; 151f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 152f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 153f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if ( left->min() < right->min() ) { 154f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return -1; 155f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 156f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 157f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if ( left->min() > right->min() ) { 158f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return 1; 159f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 160f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 161f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return 0; 162f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 164f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsinline FpsRange::FpsRange(const int min, const int max) : mMin(min), mMax(max) {} 165f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 166f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsinline FpsRange::FpsRange() : mMin(-1), mMax(-1) {} 167f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 168f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsinline bool FpsRange::operator==(const FpsRange & fpsRange) const { 169f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return mMin == fpsRange.mMin && mMax == fpsRange.mMax; 170f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} 171f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 172f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsinline bool FpsRange::isNull() const { 173f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return mMin == -1 || mMax == -1; 174f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} 175f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 176f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsinline bool FpsRange::isFixed() const { 177f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return mMin == mMax; 178f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} 179f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 180f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsinline int FpsRange::min() const { return mMin; } 181f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 182f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsinline int FpsRange::max() const { return mMax; } 183f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 184f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass CameraArea : public android::RefBase 185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraArea(ssize_t top, 189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ssize_t left, 190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ssize_t bottom, 191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ssize_t right, 192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t weight) : mTop(top), 193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mLeft(left), 194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mBottom(bottom), 195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mRight(right), 196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mWeight(weight) {} 197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t transfrom(size_t width, 199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t height, 200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t &top, 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t &left, 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t &areaWidth, 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t &areaHeight); 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool isValid() 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ( ( 0 != mTop ) || ( 0 != mLeft ) || ( 0 != mBottom ) || ( 0 != mRight) ); 208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 210708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev bool isZeroArea() 211708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev { 212708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev return ( (0 == mTop ) && ( 0 == mLeft ) && ( 0 == mBottom ) 213708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev && ( 0 == mRight ) && ( 0 == mWeight )); 214708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev } 215708ed7306c85286aa50d05ba15e0c33106e52ed0Iliyan Malchev 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t getWeight() 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return mWeight; 219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 221f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons bool compare(const android::sp<CameraArea> &area); 2225458bdc45048501d1919b14d22456de91f7e8950Tyler Luu 2232f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman static status_t parseAreas(const char *area, 2242f15c6a9f1d24904705ddab6a6c005126e8846ddSundar Raman size_t areaLength, 225f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::Vector< android::sp<CameraArea> > &areas); 226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2279e5cb561cc54d061fe9f3d05eae78f6efb70f2c2Tyler Luu static status_t checkArea(ssize_t top, 2289e5cb561cc54d061fe9f3d05eae78f6efb70f2c2Tyler Luu ssize_t left, 2299e5cb561cc54d061fe9f3d05eae78f6efb70f2c2Tyler Luu ssize_t bottom, 2309e5cb561cc54d061fe9f3d05eae78f6efb70f2c2Tyler Luu ssize_t right, 2319e5cb561cc54d061fe9f3d05eae78f6efb70f2c2Tyler Luu ssize_t weight); 2329e5cb561cc54d061fe9f3d05eae78f6efb70f2c2Tyler Luu 233f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static bool areAreasDifferent(android::Vector< android::sp<CameraArea> > &, android::Vector< android::sp<CameraArea> > &); 234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2355458bdc45048501d1919b14d22456de91f7e8950Tyler Luuprotected: 236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const ssize_t TOP = -1000; 237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const ssize_t LEFT = -1000; 238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const ssize_t BOTTOM = 1000; 239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const ssize_t RIGHT = 1000; 2409e5cb561cc54d061fe9f3d05eae78f6efb70f2c2Tyler Luu static const ssize_t WEIGHT_MIN = 1; 2419e5cb561cc54d061fe9f3d05eae78f6efb70f2c2Tyler Luu static const ssize_t WEIGHT_MAX = 1000; 242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ssize_t mTop; 244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ssize_t mLeft; 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ssize_t mBottom; 246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ssize_t mRight; 247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t mWeight; 248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 250f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass CameraMetadataResult : public android::RefBase 251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 254f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 255f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CameraMetadataResult(camera_memory_t * extMeta) : mExtendedMetadata(extMeta) { 256f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mMetadata.faces = NULL; 257f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mMetadata.number_of_faces = 0; 258f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT 259f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mMetadata.analog_gain = 0; 260f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mMetadata.exposure_time = 0; 261f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 262f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons }; 263f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 265f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CameraMetadataResult() { 266f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mMetadata.faces = NULL; 267f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mMetadata.number_of_faces = 0; 268f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 269f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mMetadata.analog_gain = 0; 270f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mMetadata.exposure_time = 0; 271f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 2729d3e3bc3209fbfbec33be46040f83c2360edd15dSundar Raman 273f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 274f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mExtendedMetadata = NULL; 275f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 276f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 277f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 278f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual ~CameraMetadataResult() { 279f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if ( NULL != mMetadata.faces ) { 280f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons free(mMetadata.faces); 281f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 282f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 283f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if ( NULL != mExtendedMetadata ) { 284f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mExtendedMetadata->release(mExtendedMetadata); 285f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 286f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 289f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons camera_frame_metadata_t *getMetadataResult() { return &mMetadata; }; 290f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 291f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 292f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons camera_memory_t *getExtendedMetadata() { return mExtendedMetadata; }; 293f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const ssize_t TOP = -1000; 296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const ssize_t LEFT = -1000; 297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const ssize_t BOTTOM = 1000; 298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const ssize_t RIGHT = 1000; 299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const ssize_t INVALID_DATA = -2000; 300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate: 302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 303f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons camera_frame_metadata_t mMetadata; 304f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 305f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons camera_memory_t *mExtendedMetadata; 306f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 309f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonstypedef enum { 310f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_BUFFER_NONE = 0, 311f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_BUFFER_GRALLOC, 312f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_BUFFER_ANW, 313f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_BUFFER_MEMORY, 314f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_BUFFER_ION 315f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} CameraBufferType; 316f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 317f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonstypedef struct _CameraBuffer { 318f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CameraBufferType type; 319f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /* opaque is the generic drop-in replacement for the pointers 320f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * that were used previously */ 321f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons void *opaque; 322f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 323f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /* opaque has different meanings depending on the buffer type: 324f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * GRALLOC - gralloc_handle_t 325f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * ANW - a pointer to the buffer_handle_t (which corresponds to 326f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * the ANativeWindowBuffer *) 327f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * MEMORY - address of allocated memory 328f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * ION - address of mapped ion allocation 329f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * 330f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * FIXME opaque should be split into several fields: 331f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * - handle/pointer we got from the allocator 332f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * - handle/value we pass to OMX 333f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * - pointer to mapped memory (if the buffer is mapped) 334f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons */ 335f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 336f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /* mapped holds ptr to mapped memory in userspace */ 337f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons void *mapped; 338f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 339f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /* These are specific to ION buffers */ 340f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons struct ion_handle * ion_handle; 341f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int ion_fd; 342f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int fd; 343f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons size_t size; 344f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int index; 345f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 346f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /* These describe the camera buffer */ 347f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int width; 348f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int stride; 349f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int height; 350f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons const char *format; 351f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} CameraBuffer; 352f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 353f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsvoid * camera_buffer_get_omx_ptr (CameraBuffer *buffer); 354f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass CameraFrame 356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev public: 358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum FrameType 360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PREVIEW_FRAME_SYNC = 0x1, ///SYNC implies that the frame needs to be explicitly returned after consuming in order to be filled by camera again 362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PREVIEW_FRAME = 0x2 , ///Preview frame includes viewfinder and snapshot frames 363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev IMAGE_FRAME_SYNC = 0x4, ///Image Frame is the image capture output frame 364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev IMAGE_FRAME = 0x8, 365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VIDEO_FRAME_SYNC = 0x10, ///Timestamp will be updated for these frames 366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VIDEO_FRAME = 0x20, 367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev FRAME_DATA_SYNC = 0x40, ///Any extra data assosicated with the frame. Always synced with the frame 368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev FRAME_DATA= 0x80, 369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RAW_FRAME = 0x100, 370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev SNAPSHOT_FRAME = 0x200, 371f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons REPROCESS_INPUT_FRAME = 0x400, 372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ALL_FRAMES = 0xFFFF ///Maximum of 16 frame types supported 373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 375ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu enum FrameQuirks 376ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu { 377ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu ENCODE_RAW_YUV422I_TO_JPEG = 0x1 << 0, 37836e9bdd56757ff8048e08f6e52f234480c44f122Tyler Luu HAS_EXIF_DATA = 0x1 << 1, 379f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons FORMAT_YUV422I_YUYV = 0x1 << 2, 380f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons FORMAT_YUV422I_UYVY = 0x1 << 3, 381ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu }; 382ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //default contrustor 384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraFrame(): 385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCookie(NULL), 38636e9bdd56757ff8048e08f6e52f234480c44f122Tyler Luu mCookie2(NULL), 387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mBuffer(NULL), 388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFrameType(0), 389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mTimestamp(0), 390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mWidth(0), 391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mHeight(0), 392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mOffset(0), 393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mAlignment(0), 394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFd(0), 395ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu mLength(0), 3965e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng mFrameMask(0), 397f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mQuirks(0) 398f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons { 399f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mYuv[0] = 0; 400f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mYuv[1] = 0; 401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 402f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 403f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mMetaData = 0; 404f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 4058e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng } 406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void *mCookie; 40836e9bdd56757ff8048e08f6e52f234480c44f122Tyler Luu void *mCookie2; 409f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CameraBuffer *mBuffer; 410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mFrameType; 411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nsecs_t mTimestamp; 412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned int mWidth, mHeight; 413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uint32_t mOffset; 414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned int mAlignment; 415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mFd; 416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t mLength; 4175e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng unsigned mFrameMask; 418ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu unsigned int mQuirks; 4198e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng unsigned int mYuv[2]; 420f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 421f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp<CameraMetadataResult> mMetaData; 422f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///@todo add other member vars like stride etc 424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 4260ff71809874c00d540af83c123f3dc34759f1871Sundar Ramanenum CameraHalError 4270ff71809874c00d540af83c123f3dc34759f1871Sundar Raman{ 4280ff71809874c00d540af83c123f3dc34759f1871Sundar Raman CAMERA_ERROR_FATAL = 0x1, //Fatal errors can only be recovered by restarting media server 4290ff71809874c00d540af83c123f3dc34759f1871Sundar Raman CAMERA_ERROR_HARD = 0x2, // Hard errors are hardware hangs that may be recoverable by resetting the hardware internally within the adapter 4300ff71809874c00d540af83c123f3dc34759f1871Sundar Raman CAMERA_ERROR_SOFT = 0x4, // Soft errors are non fatal errors that can be recovered from without needing to stop use-case 4310ff71809874c00d540af83c123f3dc34759f1871Sundar Raman}; 4320ff71809874c00d540af83c123f3dc34759f1871Sundar Raman 433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev///Common Camera Hal Event class which is visible to CameraAdapter,DisplayAdapter and AppCallbackNotifier 434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev///@todo Rename this class to CameraEvent 435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass CameraHalEvent 436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Enums 439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum CameraHalEventType { 440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NO_EVENTS = 0x0, 441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EVENT_FOCUS_LOCKED = 0x1, 442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EVENT_FOCUS_ERROR = 0x2, 443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EVENT_ZOOM_INDEX_REACHED = 0x4, 444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EVENT_SHUTTER = 0x8, 445f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons EVENT_METADATA = 0x10, 446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///@remarks Future enum related to display, like frame displayed event, could be added here 447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ALL_EVENTS = 0xFFFF ///Maximum of 16 event types supported 448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 450057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu enum FocusStatus { 451057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu FOCUS_STATUS_SUCCESS = 0x1, 452057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu FOCUS_STATUS_FAIL = 0x2, 453057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu FOCUS_STATUS_PENDING = 0x4, 454057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu FOCUS_STATUS_DONE = 0x8, 455057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu }; 456057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu 457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Class declarations 458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///@remarks Add a new class for a new event type added above 459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Shutter event specific data 461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev typedef struct ShutterEventData_t { 462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool shutterClosed; 463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }ShutterEventData; 464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Focus event specific data 466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev typedef struct FocusEventData_t { 467057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu FocusStatus focusStatus; 468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int currentFocusValue; 469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } FocusEventData; 470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Zoom specific event data 472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev typedef struct ZoomEventData_t { 473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int currentZoomIndex; 474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool targetZoomIndexReached; 475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } ZoomEventData; 476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev typedef struct FaceData_t { 478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ssize_t top; 479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ssize_t left; 480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ssize_t bottom; 481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ssize_t right; 482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t score; 483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } FaceData; 484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 485f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons typedef android::sp<CameraMetadataResult> MetaEventData; 486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 487f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons class CameraHalEventData : public android::RefBase{ 488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev public: 490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHalEvent::FocusEventData focusEvent; 492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHalEvent::ZoomEventData zoomEvent; 493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHalEvent::ShutterEventData shutterEvent; 494f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CameraHalEvent::MetaEventData metadataEvent; 495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //default contrustor 498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHalEvent(): 499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCookie(NULL), 500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mEventType(NO_EVENTS) {} 501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //copy constructor 503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHalEvent(const CameraHalEvent &event) : 504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCookie(event.mCookie), 505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mEventType(event.mEventType), 506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mEventData(event.mEventData) {}; 507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void* mCookie; 509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHalEventType mEventType; 510f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp<CameraHalEventData> mEventData; 511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/// Have a generic callback class based on template - to adapt CameraFrame and Event 515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef void (*frame_callback) (CameraFrame *cameraFrame); 516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef void (*event_callback) (CameraHalEvent *event); 517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//signals CameraHAL to relase image buffers 519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef void (*release_image_buffers_callback) (void *userData); 520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef void (*end_image_capture_callback) (void *userData); 521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Interface class implemented by classes that have some events to communicate to dependendent classes 524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Dependent classes use this interface for registering for events 525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass MessageNotifier 527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const uint32_t EVENT_BIT_FIELD_POSITION; 530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const uint32_t FRAME_BIT_FIELD_POSITION; 531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///@remarks Msg type comes from CameraFrame and CameraHalEvent classes 533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /// MSB 16 bits is for events and LSB 16 bits is for frame notifications 534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /// FrameProvider and EventProvider classes act as helpers to event/frame 535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /// consumers to call this api 536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void enableMsgType(int32_t msgs, frame_callback frameCb=NULL, event_callback eventCb=NULL, void* cookie=NULL) = 0; 537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void disableMsgType(int32_t msgs, void* cookie) = 0; 538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual ~MessageNotifier() {}; 540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 542f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass ErrorNotifier : public virtual android::RefBase 543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void errorNotify(int error) = 0; 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual ~ErrorNotifier() {}; 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Interace class abstraction for Camera Adapter to act as a frame provider 553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * This interface is fully implemented by Camera Adapter 554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass FrameNotifier : public MessageNotifier 556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 558f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual void returnFrame(CameraBuffer* frameBuf, CameraFrame::FrameType frameType) = 0; 559f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual void addFramePointers(CameraBuffer *frameBuf, void *buf) = 0; 5608e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng virtual void removeFramePointers() = 0; 561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual ~FrameNotifier() {}; 563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** * Wrapper class around Frame Notifier, which is used by display and notification classes for interacting with Camera Adapter 566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass FrameProvider 568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev FrameNotifier* mFrameNotifier; 570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void* mCookie; 571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frame_callback mFrameCallback; 572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev FrameProvider(FrameNotifier *fn, void* cookie, frame_callback frameCallback) 575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev :mFrameNotifier(fn), mCookie(cookie),mFrameCallback(frameCallback) { } 576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int enableFrameNotification(int32_t frameTypes); 578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int disableFrameNotification(int32_t frameTypes); 579f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int returnFrame(CameraBuffer *frameBuf, CameraFrame::FrameType frameType); 580f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons void addFramePointers(CameraBuffer *frameBuf, void *buf); 5818e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng void removeFramePointers(); 582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** Wrapper class around MessageNotifier, which is used by display and notification classes for interacting with 585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Camera Adapter 586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass EventProvider 588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev MessageNotifier* mEventNotifier; 591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void* mCookie; 592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev event_callback mEventCallback; 593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EventProvider(MessageNotifier *mn, void* cookie, event_callback eventCallback) 596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev :mEventNotifier(mn), mCookie(cookie), mEventCallback(eventCallback) {} 597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int enableEventNotification(int32_t eventTypes); 599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int disableEventNotification(int32_t eventTypes); 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* 603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Interface for providing buffers 604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass BufferProvider 606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 608f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual CameraBuffer * allocateBufferList(int width, int height, const char* format, int &bytes, int numBufs) = 0; 609f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 610f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons // gets a buffer list from BufferProvider when buffers are sent from external source and already pre-allocated 611f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons // only call this function for an input source into CameraHal. If buffers are not from a pre-allocated source 612f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons // this function will return NULL and numBufs of -1 613f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual CameraBuffer *getBufferList(int *numBufs) = 0; 614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //additional methods used for memory mapping 616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual uint32_t * getOffsets() = 0; 617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int getFd() = 0; 618f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual CameraBuffer * getBuffers(bool reset = false) { return NULL; } 619f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual unsigned int getSize() {return 0; } 620f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual int getBufferCount() {return -1; } 621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 622f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual int freeBufferList(CameraBuffer * buf) = 0; 623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual ~BufferProvider() {} 625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Class for handling data and notify callbacks to application 629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 630f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass AppCallbackNotifier: public ErrorNotifier , public virtual android::RefBase 631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Constants 636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const int NOTIFIER_TIMEOUT; 637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const int32_t MAX_BUFFERS = 8; 638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum NotifierCommands 640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NOTIFIER_CMD_PROCESS_EVENT, 642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NOTIFIER_CMD_PROCESS_FRAME, 643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NOTIFIER_CMD_PROCESS_ERROR 644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum NotifierState 647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NOTIFIER_STOPPED, 649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NOTIFIER_STARTED, 650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NOTIFIER_EXITED 651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ~AppCallbackNotifier(); 656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Initialzes the callback notifier, creates any resources required 658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t initialize(); 659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Starts the callbacks to application 661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t start(); 662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Stops the callbacks from going to application 664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t stop(); 665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void setEventProvider(int32_t eventMask, MessageNotifier * eventProvider); 667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void setFrameProvider(FrameNotifier *frameProvider); 668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //All sub-components of Camera HAL call this whenever any error happens 670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void errorNotify(int error); 671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 672f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t startPreviewCallbacks(android::CameraParameters ¶ms, CameraBuffer *buffers, uint32_t *offsets, int fd, size_t length, size_t count); 673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t stopPreviewCallbacks(); 674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t enableMsgType(int32_t msgType); 676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t disableMsgType(int32_t msgType); 677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //API for enabling/disabling measurement data 679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void setMeasurements(bool enable); 680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //thread loops 6823f75fa6e5edf504c155a357494ab77c59b6887b8Tyler Luu bool notificationThread(); 683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Notification callback functions 685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static void frameCallbackRelay(CameraFrame* caFrame); 686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static void eventCallbackRelay(CameraHalEvent* chEvt); 687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void frameCallback(CameraFrame* caFrame); 688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void eventCallback(CameraHalEvent* chEvt); 68926d9a9166b81616d205eb9ebb49c18dac1f6c044Tyler Luu void flushAndReturnFrames(); 690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void setCallbacks(CameraHal *cameraHal, 692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_notify_callback notify_cb, 693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_data_callback data_cb, 694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_data_timestamp_callback data_cb_timestamp, 695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_request_memory get_memory, 696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void *user); 697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Set Burst mode 699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void setBurst(bool burst); 700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Notifications from CameraHal for video recording case 702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t startRecording(); 703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t stopRecording(); 704f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t initSharedVideoBuffers(CameraBuffer *buffers, uint32_t *offsets, int fd, size_t length, size_t count, CameraBuffer *vidBufs); 705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t releaseRecordingFrame(const void *opaque); 706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 707f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t useMetaDataBufferMode(bool enable); 708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 709f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons void EncoderDoneCb(void*, void*, CameraFrame::FrameType type, void* cookie1, void* cookie2, void *cookie3); 710ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 71172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng void useVideoBuffers(bool useVideoBuffers); 71272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 71372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng bool getUesVideoBuffers(); 71472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng void setVideoRes(int width, int height); 71572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 7163ec18006399d61e97382601d14aaa43ee339c8b6Sundar Raman void flushEventQueue(); 7173ec18006399d61e97382601d14aaa43ee339c8b6Sundar Raman 718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Internal class definitions 719f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons class NotificationThread : public android::Thread { 720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev AppCallbackNotifier* mAppCallbackNotifier; 721f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons Utils::MessageQueue mNotificationThreadQ; 722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev public: 723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum NotificationThreadCommands 724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NOTIFIER_START, 726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NOTIFIER_STOP, 727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NOTIFIER_EXIT, 728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev public: 730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NotificationThread(AppCallbackNotifier* nh) 731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev : Thread(false), mAppCallbackNotifier(nh) { } 732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual bool threadLoop() { 7333f75fa6e5edf504c155a357494ab77c59b6887b8Tyler Luu return mAppCallbackNotifier->notificationThread(); 734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 736f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons Utils::MessageQueue &msgQ() { return mNotificationThreadQ;} 737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Friend declarations 740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev friend class NotificationThread; 741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate: 743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void notifyEvent(); 744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void notifyFrame(); 745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool processMessage(); 746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void releaseSharedVideoBuffers(); 747e6cf8e95b3192621d3b992fbb09df8c58b1a1e5fSundar Raman status_t dummyRaw(); 74826d9a9166b81616d205eb9ebb49c18dac1f6c044Tyler Luu void copyAndSendPictureFrame(CameraFrame* frame, int32_t msgType); 74926d9a9166b81616d205eb9ebb49c18dac1f6c044Tyler Luu void copyAndSendPreviewFrame(CameraFrame* frame, int32_t msgType); 750f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons size_t calculateBufferSize(size_t width, size_t height, const char *pixelFormat); 751f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons const char* getContstantForPixelFormat(const char *pixelFormat); 752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate: 754f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mutable android::Mutex mLock; 755f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mutable android::Mutex mBurstLock; 756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHal* mCameraHal; 757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_notify_callback mNotifyCb; 758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_data_callback mDataCb; 759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_data_timestamp_callback mDataCbTimestamp; 760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_request_memory mRequestMemory; 761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void *mCallbackCookie; 762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Keeps Video MemoryHeaps and Buffers within 764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //these objects 765f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::KeyedVector<unsigned int, unsigned int> mVideoHeaps; 766f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::KeyedVector<unsigned int, unsigned int> mVideoBuffers; 767f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::KeyedVector<void *, CameraBuffer *> mVideoMap; 768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Keeps list of Gralloc handles and associated Video Metadata Buffers 770f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::KeyedVector<void *, camera_memory_t *> mVideoMetadataBufferMemoryMap; 771f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::KeyedVector<void *, CameraBuffer *> mVideoMetadataBufferReverseMap; 772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mBufferReleased; 774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 775f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp< NotificationThread> mNotificationThread; 776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EventProvider *mEventProvider; 777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev FrameProvider *mFrameProvider; 778f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons Utils::MessageQueue mEventQ; 779f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons Utils::MessageQueue mFrameQ; 780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NotifierState mNotifierState; 781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mPreviewing; 783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_memory_t* mPreviewMemory; 784f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CameraBuffer mPreviewBuffers[MAX_BUFFERS]; 785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mPreviewBufCount; 786f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int mPreviewWidth; 787f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int mPreviewHeight; 788f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int mPreviewStride; 789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev const char *mPreviewPixelFormat; 790f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::KeyedVector<unsigned int, android::sp<android::MemoryHeapBase> > mSharedPreviewHeaps; 791f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::KeyedVector<unsigned int, android::sp<android::MemoryBase> > mSharedPreviewBuffers; 792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Burst mode active 794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mBurst; 795f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mutable android::Mutex mRecordingLock; 796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mRecording; 797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mMeasurementEnabled; 798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 799e6cf8e95b3192621d3b992fbb09df8c58b1a1e5fSundar Raman bool mUseMetaDataBufferMode; 800e6cf8e95b3192621d3b992fbb09df8c58b1a1e5fSundar Raman bool mRawAvailable; 801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 80272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng bool mUseVideoBuffers; 80372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 80472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng int mVideoWidth; 80572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng int mVideoHeight; 80672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Class used for allocating memory for JPEG bit stream buffers, output buffers of camera in no overlay case 812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 813f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass MemoryManager : public BufferProvider, public virtual android::RefBase 814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 816f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons MemoryManager(); 817f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons ~MemoryManager(); 818c7a945e0434f1b99021d46fddf88bf776da6ad37Sundar Raman 819f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t initialize(); 820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int setErrorHandler(ErrorNotifier *errorNotifier); 822f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual CameraBuffer * allocateBufferList(int width, int height, const char* format, int &bytes, int numBufs); 823f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual CameraBuffer *getBufferList(int *numBufs); 824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual uint32_t * getOffsets(); 825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int getFd() ; 826f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual int freeBufferList(CameraBuffer * buflist); 827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate: 829f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp<ErrorNotifier> mErrorNotifier; 830c7a945e0434f1b99021d46fddf88bf776da6ad37Sundar Raman int mIonFd; 831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * CameraAdapter interface class 838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Concrete classes derive from this class and provide implementations based on the specific camera h/w interface 839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 841f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass CameraAdapter: public FrameNotifier, public virtual android::RefBase 842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprotected: 844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum AdapterActiveStates { 845f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons INTIALIZED_ACTIVE = 1 << 0, 846f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons LOADED_PREVIEW_ACTIVE = 1 << 1, 847f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons PREVIEW_ACTIVE = 1 << 2, 848f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons LOADED_CAPTURE_ACTIVE = 1 << 3, 849f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAPTURE_ACTIVE = 1 << 4, 850f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons BRACKETING_ACTIVE = 1 << 5, 851f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons AF_ACTIVE = 1 << 6, 852f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons ZOOM_ACTIVE = 1 << 7, 853f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons VIDEO_ACTIVE = 1 << 8, 854f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons LOADED_REPROCESS_ACTIVE = 1 << 9, 855f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons REPROCESS_ACTIVE = 1 << 10, 856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev typedef struct 859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 860f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CameraBuffer *mBuffers; 861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uint32_t *mOffsets; 862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mFd; 863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t mLength; 864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t mCount; 865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t mMaxQueueable; 866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } BuffersDescriptor; 867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum CameraCommands 869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_START_PREVIEW = 0, 871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_STOP_PREVIEW = 1, 872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_START_VIDEO = 2, 873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_STOP_VIDEO = 3, 874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_START_IMAGE_CAPTURE = 4, 875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_STOP_IMAGE_CAPTURE = 5, 876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_PERFORM_AUTOFOCUS = 6, 877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_CANCEL_AUTOFOCUS = 7, 878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_PREVIEW_FLUSH_BUFFERS = 8, 879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_START_SMOOTH_ZOOM = 9, 880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_STOP_SMOOTH_ZOOM = 10, 881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_USE_BUFFERS_PREVIEW = 11, 882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_SET_TIMEOUT = 12, 883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_CANCEL_TIMEOUT = 13, 884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_START_BRACKET_CAPTURE = 14, 885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_STOP_BRACKET_CAPTURE = 15, 886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_QUERY_RESOLUTION_PREVIEW = 16, 887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE = 17, 888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA = 18, 889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_USE_BUFFERS_IMAGE_CAPTURE = 19, 890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_USE_BUFFERS_PREVIEW_DATA = 20, 891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_TIMEOUT_EXPIRED = 21, 892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_START_FD = 22, 893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_STOP_FD = 23, 8947016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng CAMERA_SWITCH_TO_EXECUTING = 24, 895f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_USE_BUFFERS_VIDEO_CAPTURE = 25, 896f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 897f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_USE_BUFFERS_REPROCESS = 26, 898f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_START_REPROCESS = 27, 899f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 900f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_VTC 901f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_SETUP_TUNNEL = 28, 902f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_DESTROY_TUNNEL = 29, 903f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 904f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_PREVIEW_INITIALIZATION = 30, 905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum CameraMode 908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_PREVIEW, 910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_IMAGE_CAPTURE, 911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMERA_VIDEO, 912f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_MEASUREMENT, 913f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMERA_REPROCESS, 914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum AdapterState { 917f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons INTIALIZED_STATE = INTIALIZED_ACTIVE, 918f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons LOADED_PREVIEW_STATE = LOADED_PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 919f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons PREVIEW_STATE = PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 920f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons LOADED_CAPTURE_STATE = LOADED_CAPTURE_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 921f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAPTURE_STATE = CAPTURE_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 922f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons BRACKETING_STATE = BRACKETING_ACTIVE | CAPTURE_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE , 923f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons AF_STATE = AF_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 924f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons ZOOM_STATE = ZOOM_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 925f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons VIDEO_STATE = VIDEO_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 926f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons VIDEO_AF_STATE = VIDEO_ACTIVE | AF_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 927f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons VIDEO_ZOOM_STATE = VIDEO_ACTIVE | ZOOM_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 928f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons VIDEO_LOADED_CAPTURE_STATE = VIDEO_ACTIVE | LOADED_CAPTURE_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 929f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons VIDEO_CAPTURE_STATE = VIDEO_ACTIVE | CAPTURE_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 930f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons AF_ZOOM_STATE = AF_ACTIVE | ZOOM_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 931f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons BRACKETING_ZOOM_STATE = BRACKETING_ACTIVE | ZOOM_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 932f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons LOADED_REPROCESS_STATE = LOADED_REPROCESS_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 933f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons LOADED_REPROCESS_CAPTURE_STATE = LOADED_REPROCESS_ACTIVE | LOADED_CAPTURE_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 934f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons REPROCESS_STATE = REPROCESS_ACTIVE | CAPTURE_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE, 935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 937f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Initialzes the camera adapter creates any resources required 9419a412956d5327ec851ff8adc3e9804640fa30c7fTyler Luu virtual int initialize(CameraProperties::Properties*) = 0; 942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int setErrorHandler(ErrorNotifier *errorNotifier) = 0; 944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Message/Frame notification APIs 946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void enableMsgType(int32_t msgs, 947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frame_callback callback = NULL, 948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev event_callback eventCb = NULL, 949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void *cookie = NULL) = 0; 950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void disableMsgType(int32_t msgs, void* cookie) = 0; 951f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual void returnFrame(CameraBuffer* frameBuf, CameraFrame::FrameType frameType) = 0; 952f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual void addFramePointers(CameraBuffer *frameBuf, void *buf) = 0; 9538e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng virtual void removeFramePointers() = 0; 954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //APIs to configure Camera adapter and get the current parameter set 956f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual int setParameters(const android::CameraParameters& params) = 0; 957f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual void getParameters(android::CameraParameters& params) = 0; 958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Registers callback for returning image buffers back to CameraHAL 960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int registerImageReleaseCallback(release_image_buffers_callback callback, void *user_data) = 0; 961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Registers callback, which signals a completed image capture 963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int registerEndCaptureCallback(end_image_capture_callback callback, void *user_data) = 0; 964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //API to send a command to the camera 966f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t sendCommand(CameraCommands operation, int value1=0, int value2=0, int value3=0, int value4=0) = 0; 967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual ~CameraAdapter() {}; 969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Retrieves the current Adapter state 971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual AdapterState getState() = 0; 972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Retrieves the next Adapter state 974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual AdapterState getNextState() = 0; 975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Receive orientation events from CameraHal 977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void onOrientationEvent(uint32_t orientation, uint32_t tilt) = 0; 978a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 979a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu // Rolls the state machine back to INTIALIZED_STATE from the current state 980a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu virtual status_t rollbackToInitializedState() = 0; 98178dac813ae2c442dd0669db208abd3720d0ea6c4Iliyan Malchev 98278dac813ae2c442dd0669db208abd3720d0ea6c4Iliyan Malchev // Retrieves the current Adapter state - for internal use (not locked) 98378dac813ae2c442dd0669db208abd3720d0ea6c4Iliyan Malchev virtual status_t getState(AdapterState &state) = 0; 98478dac813ae2c442dd0669db208abd3720d0ea6c4Iliyan Malchev // Retrieves the next Adapter state - for internal use (not locked) 98578dac813ae2c442dd0669db208abd3720d0ea6c4Iliyan Malchev virtual status_t getNextState(AdapterState &state) = 0; 98678dac813ae2c442dd0669db208abd3720d0ea6c4Iliyan Malchev 987f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t setSharedAllocator(camera_request_memory shmem_alloc) = 0; 988f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprotected: 990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //The first two methods will try to switch the adapter state. 991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Every call to setState() should be followed by a corresponding 992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //call to commitState(). If the state switch fails, then it will 993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //get reset to the previous state via rollbackState(). 994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t setState(CameraCommands operation) = 0; 995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t commitState() = 0; 996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t rollbackState() = 0; 997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 999f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsclass DisplayAdapter : public BufferProvider, public virtual android::RefBase 1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 1002f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons DisplayAdapter(); 1003f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1004f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT 1005f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons preview_stream_extended_ops_t * extendedOps() const { 1006f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return mExtendedOps; 1007f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 1008f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1009f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons void setExtendedOps(preview_stream_extended_ops_t * extendedOps); 1010f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Initializes the display adapter creates any resources required 1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int initialize() = 0; 1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int setPreviewWindow(struct preview_stream_ops *window) = 0; 1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int setFrameProvider(FrameNotifier *frameProvider) = 0; 1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int setErrorHandler(ErrorNotifier *errorNotifier) = 0; 1018f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual int enableDisplay(int width, int height, struct timeval *refTime = NULL) = 0; 1019816f63fd6a78b45e18819d9967d409c212c88eaeSundar Raman virtual int disableDisplay(bool cancel_buffer = true) = 0; 1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Used for Snapshot review temp. pause 1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int pauseDisplay(bool pause) = 0; 1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS 1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Used for shot to snapshot measurement 1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int setSnapshotTimeRef(struct timeval *refTime = NULL) = 0; 1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual bool supportsExternalBuffering() = 0; 1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Get max queueable buffers display supports 1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // This function should only be called after 1032f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons // allocateBufferList 1033f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t maxQueueableBuffers(unsigned int& queueable) = 0; 1034f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1035f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons // Get min buffers display needs at any given time 1036f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t minUndequeueableBuffers(int& unqueueable) = 0; 1037f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1038f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons // Given a vector of DisplayAdapters find the one corresponding to str 1039f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual bool match(const char * str) { return false; } 1040f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1041f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsprivate: 1042f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT 1043f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons preview_stream_extended_ops_t * mExtendedOps; 1044f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic void releaseImageBuffers(void *userData); 1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic void endImageCapture(void *userData); 1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Implementation of the Android Camera hardware abstraction layer 1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev This class implements the interface methods defined in CameraHardwareInterface 1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for the OMAP4 platform 1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*/ 1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass CameraHal 1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Constants 1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const int NO_BUFFERS_PREVIEW; 1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const int NO_BUFFERS_IMAGE_CAPTURE; 1066f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const int NO_BUFFERS_IMAGE_CAPTURE_SYSTEM_HEAP; 1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const uint32_t VFR_SCALE = 1000; 1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*--------------------Interface Methods---------------------------------*/ 1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //@{ 1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Set the notification and data callbacks */ 1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void setCallbacks(camera_notify_callback notify_cb, 1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_data_callback data_cb, 1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_data_timestamp_callback data_cb_timestamp, 1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_request_memory get_memory, 1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void *user); 1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Receives orientation events from SensorListener **/ 1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void onOrientationEvent(uint32_t orientation, uint32_t tilt); 1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * The following three functions all take a msgtype, 1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * which is a bitmask of the messages defined in 1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * include/ui/Camera.h 1089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Enable a message, or set of messages. 1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void enableMsgType(int32_t msgType); 1095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Disable a message, or a set of messages. 1098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void disableMsgType(int32_t msgType); 1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Query whether a message, or a set of messages, is enabled. 1103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Note that this is operates as an AND, if any of the messages 1104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * queried are off, this will return false. 1105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int msgTypeEnabled(int32_t msgType); 1107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Start preview mode. 1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int startPreview(); 1112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1114f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * Set preview mode related initialization. 1115f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * Only used when slice based processing is enabled. 1116f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons */ 1117f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int cameraPreviewInitialization(); 1118f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1119f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /** 1120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Only used if overlays are used for camera preview. 1121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int setPreviewWindow(struct preview_stream_ops *window); 1123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1124f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 1125f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons void setExtendedPreviewStreamOps(preview_stream_extended_ops_t *ops); 1126f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1127f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /** 1128f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * Set a tap-in or tap-out point. 1129f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons */ 1130f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int setBufferSource(struct preview_stream_ops *tapin, struct preview_stream_ops *tapout); 1131f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 1132f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1133f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /** 1134f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * Release a tap-in or tap-out point. 1135f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons */ 1136f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int releaseBufferSource(struct preview_stream_ops *tapin, struct preview_stream_ops *tapout); 1137f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Stop a previously started preview. 1140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void stopPreview(); 1142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Returns true if preview is enabled. 1145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool previewEnabled(); 1147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Start record mode. When a record image is available a CAMERA_MSG_VIDEO_FRAME 1150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * message is sent with the corresponding frame. Every record frame must be released 1151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * by calling releaseRecordingFrame(). 1152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int startRecording(); 1154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Stop a previously started recording. 1157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void stopRecording(); 1159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Returns true if recording is enabled. 1162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int recordingEnabled(); 1164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Release a record frame previously returned by CAMERA_MSG_VIDEO_FRAME. 1167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void releaseRecordingFrame(const void *opaque); 1169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Start auto focus, the notification callback routine is called 1172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * with CAMERA_MSG_FOCUS once when focusing is complete. autoFocus() 1173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * will be called again if another auto focus is needed. 1174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int autoFocus(); 1176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Cancels auto-focus function. If the auto-focus is still in progress, 1179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * this function will cancel it. Whether the auto-focus is in progress 1180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * or not, this function will return the focus position to the default. 1181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * If the camera does not support auto-focus, this is a no-op. 1182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int cancelAutoFocus(); 1184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Take a picture. 1187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1188f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int takePicture(const char* params); 1189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Cancel a picture that was started with takePicture. Calling this 1192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * method when no picture is being taken is a no-op. 1193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int cancelPicture(); 1195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Set the camera parameters. */ 1197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int setParameters(const char* params); 1198f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int setParameters(const android::CameraParameters& params); 1199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Return the camera parameters. */ 1201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char* getParameters(); 1202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void putParameters(char *); 1203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Send command to camera driver. 1206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int sendCommand(int32_t cmd, int32_t arg1, int32_t arg2); 1208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Release the hardware resources owned by this object. Note that this is 1211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * *not* done in the destructor. 1212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void release(); 1214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** 1216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Dump state of the camera hardware 1217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int dump(int fd) const; 1219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1220f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_CPCAM 1221f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /** 1222f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * start a reprocessing operation. 1223f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons */ 1224f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int reprocess(const char* params); 1225f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1226f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /** 1227f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * cancels current reprocessing operation 1228f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons */ 1229f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int cancel_reprocess(); 1230f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 1231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1232f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t storeMetaDataInBuffers(bool enable); 1233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //@} 1235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*--------------------Internal Member functions - Public---------------------------------*/ 1237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 1239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** @name internalFunctionsPublic */ 1240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //@{ 1241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Constructor of CameraHal */ 1243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHal(int cameraId); 1244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Destructor of CameraHal 1246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ~CameraHal(); 1247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Initialize CameraHal */ 1249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t initialize(CameraProperties::Properties*); 1250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Deinitialize CameraHal */ 1252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void deinitialize(); 1253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS 1255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Uses the constructor timestamp as a reference to calcluate the 1257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // elapsed time 1258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static void PPM(const char *); 1259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Uses a user provided timestamp as a reference to calcluate the 1260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // elapsed time 1261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static void PPM(const char *, struct timeval*, ...); 1262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Free image bufs */ 1266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t freeImageBufs(); 1267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Signals the end of image capture 1269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t signalEndImageCapture(); 1270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Events 1272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static void eventCallbackRelay(CameraHalEvent* event); 1273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void eventCallback(CameraHalEvent* event); 1274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void setEventProvider(int32_t eventMask, MessageNotifier * eventProvider); 1275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1276f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const char* getPixelFormatConstant(const char* parameters_format); 1277f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static size_t calculateBufferSize(const char* parameters_format, int width, int height); 1278f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static void getXYFromOffset(unsigned int *x, unsigned int *y, 1279f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons unsigned int offset, unsigned int stride, 1280f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons const char* format); 1281f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static unsigned int getBPP(const char* format); 1282f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*--------------------Internal Member functions - Private---------------------------------*/ 1284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate: 1285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** @name internalFunctionsPrivate */ 1287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //@{ 1288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 12898b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu /** Set the camera parameters specific to Video Recording. */ 1290f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons bool setVideoModeParameters(const android::CameraParameters&); 12918b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu 12928b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu /** Reset the camera parameters specific to Video Recording. */ 12938b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu bool resetVideoModeParameters(); 12948b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu 12958b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu /** Restart the preview with setParameter. */ 12968b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu status_t restartPreview(); 12978b0b73df9a2fe8e4fc2c36919d05321f2d96d543Tyler Luu 1298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t parseResolution(const char *resStr, int &width, int &height); 1299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void insertSupportedParams(); 1301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Allocate preview data buffers */ 1303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t allocPreviewDataBufs(size_t size, size_t bufferCount); 1304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Free preview data buffers */ 1306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t freePreviewDataBufs(); 1307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Allocate preview buffers */ 1309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t allocPreviewBufs(int width, int height, const char* previewFormat, unsigned int bufferCount, unsigned int &max_queueable); 1310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Allocate video buffers */ 131272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng status_t allocVideoBufs(uint32_t width, uint32_t height, uint32_t bufferCount); 1313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Allocate image capture buffers */ 1315f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t allocImageBufs(unsigned int width, unsigned int height, size_t length, 13161d40b78f3a968634194f0c1d878d1ba122f435d7Tyler Luu const char* previewFormat, unsigned int bufferCount); 1317f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1318f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /** Allocate Raw buffers */ 1319f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t allocRawBufs(int width, int height, const char* previewFormat, int bufferCount); 1320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Free preview buffers */ 1322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t freePreviewBufs(); 1323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Free video bufs */ 1325f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t freeVideoBufs(CameraBuffer *bufs); 1326f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1327f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /** Free RAW bufs */ 1328f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t freeRawBufs(); 1329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Check if a given resolution is supported by the current camera 1331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //instance 1332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool isResolutionValid(unsigned int width, unsigned int height, const char *supportedResolutions); 1333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1334f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons //Check if a given variable frame rate range is supported by the current camera 1335f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons //instance 1336f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons bool isFpsRangeValid(int fpsMin, int fpsMax, const char *supportedFpsRanges); 1337f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Check if a given parameter is supported by the current camera 1339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // instance 1340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool isParameterValid(const char *param, const char *supportedParams); 1341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool isParameterValid(int param, const char *supportedParams); 1342f4260660c494005dc6556698765fe3f3a0d97f60Tyler Luu status_t doesSetParameterNeedUpdate(const char *new_param, const char *old_params, bool &update); 1343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /** Initialize default parameters */ 1345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void initDefaultParameters(); 1346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void dumpProperties(CameraProperties::Properties& cameraProps); 1348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t startImageBracketing(); 1350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t stopImageBracketing(); 1352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void setShutter(bool enable); 1354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void forceStopPreview(); 1356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1357f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons void getPreferredPreviewRes(int *width, int *height); 1358f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons void resetPreviewRes(android::CameraParameters *params); 135972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 1360f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons // Internal __takePicture function - used in public takePicture() and reprocess() 1361f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int __takePicture(const char* params); 1362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //@} 1363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1364f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t setTapoutLocked(struct preview_stream_ops *out); 1365f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t releaseTapoutLocked(struct preview_stream_ops *out); 1366f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t setTapinLocked(struct preview_stream_ops *in); 1367f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t releaseTapinLocked(struct preview_stream_ops *in); 1368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*----------Member variables - Public ---------------------*/ 1369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 1370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int32_t mMsgEnabled; 1371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mRecordEnabled; 1372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nsecs_t mCurrentTime; 1373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mFalsePreview; 1374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mPreviewEnabled; 1375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uint32_t mTakePictureQueue; 1376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mBracketingEnabled; 1377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mBracketingRunning; 1378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //User shutter override 1379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mShutterEnabled; 1380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mMeasurementEnabled; 1381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Google's parameter delimiter 1382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const char PARAMS_DELIMITER[]; 1383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraAdapter *mCameraAdapter; 1385f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp<AppCallbackNotifier> mAppCallbackNotifier; 1386f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp<DisplayAdapter> mDisplayAdapter; 1387f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp<MemoryManager> mMemoryManager; 1388f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1389f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::Vector< android::sp<DisplayAdapter> > mOutAdapters; 1390f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::Vector< android::sp<DisplayAdapter> > mInAdapters; 1391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1392f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons // TODO(XXX): Even though we support user setting multiple BufferSourceAdapters now 1393f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons // only one tap in surface and one tap out surface is supported at a time. 1394f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp<DisplayAdapter> mBufferSourceAdapter_In; 1395f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp<DisplayAdapter> mBufferSourceAdapter_Out; 1396f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1397f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT 1398f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons preview_stream_extended_ops_t * mExtendedPreviewStreamOps; 1399f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 1400f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1401f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp<android::IMemoryHeap> mPictureHeap; 1402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1403524cc0cda6ed8cb07e0469fc931657ac60335aa1Sundar Raman int* mGrallocHandles; 1404524cc0cda6ed8cb07e0469fc931657ac60335aa1Sundar Raman bool mFpsRangeChangedByApp; 1405524cc0cda6ed8cb07e0469fc931657ac60335aa1Sundar Raman 1406524cc0cda6ed8cb07e0469fc931657ac60335aa1Sundar Raman 1407f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int mRawWidth; 1408f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int mRawHeight; 1409f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons bool mRawCapture; 1410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev///static member vars 1413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1414f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const int SW_SCALING_FPS_LIMIT; 1415f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS 1417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Timestamp from the CameraHal constructor 1419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static struct timeval ppm_start; 1420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Timestamp of the autoFocus command 1421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static struct timeval mStartFocus; 1422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Timestamp of the startPreview command 1423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static struct timeval mStartPreview; 1424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Timestamp of the takePicture command 1425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static struct timeval mStartCapture; 1426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*----------Member variables - Private ---------------------*/ 1430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate: 14313a1541be51a8cc8dcc92a4ea1f0fa4a1c80990ceTyler Luu bool mDynamicPreviewSwitch; 1432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //keeps paused state of display 1433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mDisplayPaused; 1434f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1435f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef OMAP_ENHANCEMENT_VTC 1436f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons bool mTunnelSetup; 1437f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons bool mVTCUseCase; 1438f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 1439f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 1440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Index of current camera adapter 1441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mCameraIndex; 1442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1443f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mutable android::Mutex mLock; 1444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1445f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp<SensorListener> mSensorListener; 1446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void* mCameraAdapterHandle; 1448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1449f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::CameraParameters mParameters; 1450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mPreviewRunning; 1451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mPreviewStateOld; 1452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mRecordingEnabled; 1453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EventProvider *mEventProvider; 1454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1455f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CameraBuffer *mPreviewDataBuffers; 1456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uint32_t *mPreviewDataOffsets; 1457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mPreviewDataFd; 1458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mPreviewDataLength; 1459f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CameraBuffer *mImageBuffers; 1460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uint32_t *mImageOffsets; 1461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mImageFd; 1462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mImageLength; 1463f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CameraBuffer *mPreviewBuffers; 1464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uint32_t *mPreviewOffsets; 1465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mPreviewLength; 1466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mPreviewFd; 1467f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CameraBuffer *mVideoBuffers; 1468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uint32_t *mVideoOffsets; 1469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mVideoFd; 1470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mVideoLength; 1471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mBracketRangePositive; 1473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mBracketRangeNegative; 1474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///@todo Rename this as preview buffer provider 1476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BufferProvider *mBufProvider; 1477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BufferProvider *mVideoBufProvider; 1478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraProperties::Properties* mCameraProperties; 1481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mPreviewStartInProgress; 1483f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons bool mPreviewInitializationDone; 1484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mSetPreviewWindowCalled; 1486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uint32_t mPreviewWidth; 1488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uint32_t mPreviewHeight; 1489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int32_t mMaxZoomSupported; 149072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 149172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng int mVideoWidth; 149272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng int mVideoHeight; 149372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 1494f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::String8 mCapModeBackup; 1495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 1496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1497f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} // namespace Camera 1498f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} // namespace Ti 1499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1501