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