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