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 V4L_CAMERA_ADAPTER_H 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define V4L_CAMERA_ADAPTER_H 21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 22f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include <linux/videodev2.h> 23f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "CameraHal.h" 25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "BaseCameraAdapter.h" 26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "DebugUtils.h" 27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 28f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsnamespace Ti { 29f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsnamespace Camera { 30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 315f0295a8cac99650c22617d0fcf2f2d7702b01bfSaravanan Solaiyappan#define DEFAULT_PIXEL_FORMAT V4L2_PIX_FMT_YUYV 32f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define NB_BUFFER 10 34f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define DEVICE "/dev/videoxx" 35f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define DEVICE_PATH "/dev/" 36f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#define DEVICE_NAME "videoxx" 37f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 38f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonstypedef int V4L_HANDLETYPE; 39f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 40f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsstruct CapPixelformat { 41f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons uint32_t pixelformat; 42f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons const char *param; 43f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons}; 44f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 45f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsstruct CapResolution { 46f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons size_t width, height; 47f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons char param[10]; 48f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons}; 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 50f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonsstruct CapU32 { 51f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons uint32_t num; 52f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons const char *param; 53f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons}; 54f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 55f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonstypedef CapU32 CapFramerate; 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstruct VideoInfo { 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct v4l2_capability cap; 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct v4l2_format format; 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct v4l2_buffer buf; 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct v4l2_requestbuffers rb; 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void *mem[NB_BUFFER]; 63f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons void *CaptureBuffers[NB_BUFFER]; 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool isStreaming; 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int width; 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int height; 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int formatIn; 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int framesizeIn; 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 71f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmonstypedef struct V4L_TI_CAPTYPE { 72f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons uint16_t ulPreviewFormatCount; // supported preview pixelformat count 73f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons uint32_t ePreviewFormats[32]; 74f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons uint16_t ulPreviewResCount; // supported preview resolution sizes 75f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CapResolution tPreviewRes[32]; 76f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons uint16_t ulCaptureResCount; // supported capture resolution sizes 77f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CapResolution tCaptureRes[32]; 78f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons uint16_t ulFrameRateCount; // supported frame rate 79f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons uint16_t ulFrameRates[32]; 80f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons}V4L_TI_CAPTYPE; 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Class which completely abstracts the camera hardware interaction from camera hal 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * TODO: Need to list down here, all the message types that will be supported by this class 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Need to implement BufferProvider interface to use AllocateBuffer of OMX if needed 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass V4LCameraAdapter : public BaseCameraAdapter 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*--------------------Constant declarations----------------------------------------*/ 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const int32_t MAX_NO_BUFFERS = 20; 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///@remarks OMX Camera has six ports - buffer input, time input, preview, image, video, and meta data 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const int MAX_NO_PORTS = 6; 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Five second timeout 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static const int CAMERA_ADAPTER_TIMEOUT = 5000*1000; 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 102f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons V4LCameraAdapter(size_t sensor_index); 103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ~V4LCameraAdapter(); 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Initialzes the camera adapter creates any resources required 107f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t initialize(CameraProperties::Properties*); 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //APIs to configure Camera adapter and get the current parameter set 110f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t setParameters(const android::CameraParameters& params); 111f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual void getParameters(android::CameraParameters& params); 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // API 114f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t UseBuffersPreview(CameraBuffer *bufArr, int num); 115f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t UseBuffersCapture(CameraBuffer *bufArr, int num); 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 117f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static status_t getCaps(const int sensorId, CameraProperties::Properties* params, V4L_HANDLETYPE handle); 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprotected: 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//----------Parent class method implementation------------------------------------ 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t startPreview(); 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t stopPreview(); 124f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t takePicture(); 125f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t stopImageCapture(); 126f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t autoFocus(); 127f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t useBuffers(CameraMode mode, CameraBuffer *bufArr, int num, size_t length, unsigned int queueable); 128f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t fillThisBuffer(CameraBuffer *frameBuf, CameraFrame::FrameType frameType); 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t getFrameSize(size_t &width, size_t &height); 130f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons virtual status_t getPictureBufferSize(CameraFrame &frame, size_t bufferCount); 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t getFrameDataSize(size_t &dataFrameSize, size_t bufferCount); 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void onOrientationEvent(uint32_t orientation, uint32_t tilt); 133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//----------------------------------------------------------------------------- 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate: 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 138f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons class PreviewThread : public android::Thread { 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev V4LCameraAdapter* mAdapter; 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev public: 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PreviewThread(V4LCameraAdapter* hw) : 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Thread(false), mAdapter(hw) { } 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void onFirstRef() { 144f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons run("CameraPreviewThread", android::PRIORITY_URGENT_DISPLAY); 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual bool threadLoop() { 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mAdapter->previewThread(); 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // loop until we need to quit 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return true; 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Used for calculation of the average frame rate during preview 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t recalculateFPS(); 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1565f0295a8cac99650c22617d0fcf2f2d7702b01bfSaravanan Solaiyappan char * GetFrame(int &index); 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int previewThread(); 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprivate: 163f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons //capabilities data 164f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const CapPixelformat mPixelformats []; 165f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const CapResolution mPreviewRes []; 166f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const CapFramerate mFramerates []; 167f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const CapResolution mImageCapRes []; 168f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 169f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons //camera defaults 170f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const char DEFAULT_PREVIEW_FORMAT[]; 171f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const char DEFAULT_PREVIEW_SIZE[]; 172f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const char DEFAULT_FRAMERATE[]; 173f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const char DEFAULT_NUM_PREV_BUFS[]; 174f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 175f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const char DEFAULT_PICTURE_FORMAT[]; 176f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const char DEFAULT_PICTURE_SIZE[]; 177f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const char DEFAULT_FOCUS_MODE[]; 178f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const char * DEFAULT_VSTAB; 179f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static const char * DEFAULT_VNF; 180f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 181f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static status_t insertDefaults(CameraProperties::Properties*, V4L_TI_CAPTYPE&); 182f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static status_t insertCapabilities(CameraProperties::Properties*, V4L_TI_CAPTYPE&); 183f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static status_t insertPreviewFormats(CameraProperties::Properties* , V4L_TI_CAPTYPE&); 184f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static status_t insertPreviewSizes(CameraProperties::Properties* , V4L_TI_CAPTYPE&); 185f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static status_t insertImageSizes(CameraProperties::Properties* , V4L_TI_CAPTYPE&); 186f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static status_t insertFrameRates(CameraProperties::Properties* , V4L_TI_CAPTYPE&); 187f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons static status_t sortAscend(V4L_TI_CAPTYPE&, uint16_t ) ; 188f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 189f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t v4lIoctl(int, int, void*); 190f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t v4lInitMmap(int&); 191f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t v4lInitUsrPtr(int&); 192f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t v4lStartStreaming(); 193f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t v4lStopStreaming(int nBufferCount); 194f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t v4lSetFormat(int, int, uint32_t); 195f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons status_t restartPreview(); 196f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 197f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mPreviewBufferCount; 199f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int mPreviewBufferCountQueueable; 200f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int mCaptureBufferCount; 201f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int mCaptureBufferCountQueueable; 2025f0295a8cac99650c22617d0fcf2f2d7702b01bfSaravanan Solaiyappan android::KeyedVector<CameraBuffer *, int> mPreviewBufs; 203f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::KeyedVector<CameraBuffer *, int> mCaptureBufs; 204f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mutable android::Mutex mPreviewBufsLock; 205f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mutable android::Mutex mCaptureBufsLock; 206f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mutable android::Mutex mStopPreviewLock; 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 208f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::CameraParameters mParams; 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mPreviewing; 211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mCapturing; 212f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::Mutex mLock; 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mFrameCount; 215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mLastFrameCount; 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned int mIter; 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nsecs_t mLastFPSTime; 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //variables holding the estimated framerate 220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev float mFPS, mLastFPS; 221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mSensorIndex; 223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 224f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons // protected by mLock 225f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons android::sp<PreviewThread> mPreviewThread; 226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 227f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons struct VideoInfo *mVideoInfo; 228f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons int mCameraHandle; 229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int nQueued; 231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int nDequeued; 232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 235f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} // namespace Camera 236f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons} // namespace Ti 237f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 238f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif //V4L_CAMERA_ADAPTER_H 239