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 BASE_CAMERA_ADAPTER_H 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define BASE_CAMERA_ADAPTER_H 21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "CameraHal.h" 23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevnamespace android { 25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevclass BaseCameraAdapter : public CameraAdapter 27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpublic: 30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BaseCameraAdapter(); 32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual ~BaseCameraAdapter(); 33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Initialzes the camera adapter creates any resources required 359a412956d5327ec851ff8adc3e9804640fa30c7fTyler Luu virtual status_t initialize(CameraProperties::Properties*) = 0; 36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual int setErrorHandler(ErrorNotifier *errorNotifier); 38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Message/Frame notification APIs 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void enableMsgType(int32_t msgs, frame_callback callback=NULL, event_callback eventCb=NULL, void* cookie=NULL); 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void disableMsgType(int32_t msgs, void* cookie); 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void returnFrame(void * frameBuf, CameraFrame::FrameType frameType); 438e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng virtual void addFramePointers(void *frameBuf, void *y_uv); 448e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng virtual void removeFramePointers(); 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //APIs to configure Camera adapter and get the current parameter set 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t setParameters(const CameraParameters& params) = 0; 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void getParameters(CameraParameters& params) = 0; 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //API to send a command to the camera 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t sendCommand(CameraCommands operation, int value1 = 0, int value2 = 0, int value3 = 0 ); 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t registerImageReleaseCallback(release_image_buffers_callback callback, void *user_data); 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t registerEndCaptureCallback(end_image_capture_callback callback, void *user_data); 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Retrieves the current Adapter state 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual AdapterState getState(); 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Retrieves the next Adapter state 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual AdapterState getNextState(); 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 62a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu // Rolls the state machine back to INTIALIZED_STATE from the current state 63a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu virtual status_t rollbackToInitializedState(); 64a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprotected: 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //The first two methods will try to switch the adapter state. 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Every call to setState() should be followed by a corresponding 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //call to commitState(). If the state switch fails, then it will 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //get reset to the previous state via rollbackState(). 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t setState(CameraCommands operation); 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t commitState(); 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t rollbackState(); 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Retrieves the current Adapter state - for internal use (not locked) 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t getState(AdapterState &state); 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Retrieves the next Adapter state - for internal use (not locked) 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t getNextState(AdapterState &state); 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //-----------Interface that needs to be implemented by deriving classes -------------------- 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implmented by deriving classes in order to start image capture 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t takePicture(); 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implmented by deriving classes in order to start image capture 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t stopImageCapture(); 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implmented by deriving classes in order to start temporal bracketing 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t startBracketing(int range); 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implemented by deriving classes in order to stop temporal bracketing 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t stopBracketing(); 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implemented by deriving classes in oder to initiate autoFocus 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t autoFocus(); 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implemented by deriving classes in oder to initiate autoFocus 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t cancelAutoFocus(); 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be called by deriving classes in order to do some bookkeeping 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t startVideoCapture(); 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be called by deriving classes in order to do some bookkeeping 103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t stopVideoCapture(); 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implemented by deriving classes in order to start camera preview 106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t startPreview(); 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implemented by deriving classes in order to stop camera preview 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t stopPreview(); 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implemented by deriving classes in order to start smooth zoom 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t startSmoothZoom(int targetIdx); 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implemented by deriving classes in order to stop smooth zoom 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t stopSmoothZoom(); 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implemented by deriving classes in order to stop smooth zoom 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t useBuffers(CameraMode mode, void* bufArr, int num, size_t length, unsigned int queueable); 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Should be implemented by deriving classes in order queue a released buffer in CameraAdapter 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t fillThisBuffer(void* frameBuf, CameraFrame::FrameType frameType); 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //API to get the frame size required to be allocated. This size is used to override the size passed 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //by camera service when VSTAB/VNF is turned ON for example 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t getFrameSize(size_t &width, size_t &height); 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //API to get required data frame size 128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t getFrameDataSize(size_t &dataFrameSize, size_t bufferCount); 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //API to get required picture buffers size with the current configuration in CameraParameters 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t getPictureBufferSize(size_t &length, size_t bufferCount); 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Should be implemented by deriving classes in order to start face detection 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // ( if supported ) 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t startFaceDetection(); 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Should be implemented by deriving classes in order to stop face detection 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // ( if supported ) 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual status_t stopFaceDetection(); 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1417016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng virtual status_t switchToExecuting(); 1427016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Receive orientation events from CameraHal 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev virtual void onOrientationEvent(uint32_t orientation, uint32_t tilt); 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // ---------------------Interface ends----------------------------------- 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 148057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu status_t notifyFocusSubscribers(CameraHalEvent::FocusStatus status); 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t notifyShutterSubscribers(); 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t notifyZoomSubscribers(int zoomIdx, bool targetReached); 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t notifyFaceSubscribers(sp<CameraFDResult> &faces); 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Send the frame to subscribers 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t sendFrameToSubscribers(CameraFrame *frame); 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Resets the refCount for this particular frame 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t resetFrameRefCount(CameraFrame &frame); 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //A couple of helper functions 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void setFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType, int refCount); 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int getFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType); 1625e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng int setInitFrameRefCount(void* buf, unsigned int mask); 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 164348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu// private member functions 165348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luuprivate: 166348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu status_t __sendFrameToSubscribers(CameraFrame* frame, 167348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu KeyedVector<int, frame_callback> *subscribers, 168348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu CameraFrame::FrameType frameType); 169a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu status_t rollbackToPreviousState(); 170348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 171348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu// protected data types and variables 172348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luuprotected: 173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum FrameState { 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev STOPPED = 0, 175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RUNNING 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum FrameCommands { 179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev START_PREVIEW = 0, 180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev START_RECORDING, 181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RETURN_FRAME, 182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev STOP_PREVIEW, 183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev STOP_RECORDING, 184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DO_AUTOFOCUS, 185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TAKE_PICTURE, 186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev FRAME_EXIT 187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev enum AdapterCommands { 190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ACK = 0, 191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ERROR 192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS 195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct timeval mStartFocus; 197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct timeval mStartCapture; 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mutable Mutex mReturnFrameLock; 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Lock protecting the Adapter state 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mutable Mutex mLock; 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev AdapterState mAdapterState; 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev AdapterState mNextState; 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Different frame subscribers get stored using these 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, frame_callback> mFrameSubscribers; 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, frame_callback> mFrameDataSubscribers; 211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, frame_callback> mVideoSubscribers; 212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, frame_callback> mImageSubscribers; 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, frame_callback> mRawSubscribers; 214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, event_callback> mFocusSubscribers; 215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, event_callback> mZoomSubscribers; 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, event_callback> mShutterSubscribers; 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, event_callback> mFaceSubscribers; 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Preview buffer management data 220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int *mPreviewBuffers; 221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mPreviewBufferCount; 222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t mPreviewBuffersLength; 223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, int> mPreviewBuffersAvailable; 224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mutable Mutex mPreviewBufferLock; 225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Video buffer management data 227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int *mVideoBuffers; 228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, int> mVideoBuffersAvailable; 229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mVideoBuffersCount; 230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t mVideoBuffersLength; 231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mutable Mutex mVideoBufferLock; 232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Image buffer management data 234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int *mCaptureBuffers; 235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, bool> mCaptureBuffersAvailable; 236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mCaptureBuffersCount; 237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t mCaptureBuffersLength; 238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mutable Mutex mCaptureBufferLock; 239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Metadata buffermanagement 241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int *mPreviewDataBuffers; 242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev KeyedVector<int, bool> mPreviewDataBuffersAvailable; 243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int mPreviewDataBuffersCount; 244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t mPreviewDataBuffersLength; 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mutable Mutex mPreviewDataBufferLock; 246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIUTILS::MessageQueue mFrameQ; 248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIUTILS::MessageQueue mAdapterQ; 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mutable Mutex mSubscriberLock; 250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ErrorNotifier *mErrorNotifier; 251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev release_image_buffers_callback mReleaseImageBuffersCallback; 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev end_image_capture_callback mEndImageCaptureCallback; 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void *mReleaseData; 254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void *mEndCaptureData; 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bool mRecording; 256c493114006e0e136c8c88c2fc9865994054959bfSundar Raman 257c493114006e0e136c8c88c2fc9865994054959bfSundar Raman uint32_t mFramesWithDucati; 258c493114006e0e136c8c88c2fc9865994054959bfSundar Raman uint32_t mFramesWithDisplay; 259c493114006e0e136c8c88c2fc9865994054959bfSundar Raman uint32_t mFramesWithEncoder; 260c493114006e0e136c8c88c2fc9865994054959bfSundar Raman 261c493114006e0e136c8c88c2fc9865994054959bfSundar Raman#ifdef DEBUG_LOG 262c493114006e0e136c8c88c2fc9865994054959bfSundar Raman KeyedVector<int, bool> mBuffersWithDucati; 263c493114006e0e136c8c88c2fc9865994054959bfSundar Raman#endif 264c493114006e0e136c8c88c2fc9865994054959bfSundar Raman 2658e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng KeyedVector<void *, CameraFrame *> mFrameQueue; 266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif //BASE_CAMERA_ADAPTER_H 271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 273