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