diff options
Diffstat (limited to 'camera/inc/BaseCameraAdapter.h')
-rw-r--r-- | camera/inc/BaseCameraAdapter.h | 122 |
1 files changed, 78 insertions, 44 deletions
diff --git a/camera/inc/BaseCameraAdapter.h b/camera/inc/BaseCameraAdapter.h index bc38e00..b7966b0 100644 --- a/camera/inc/BaseCameraAdapter.h +++ b/camera/inc/BaseCameraAdapter.h @@ -21,7 +21,18 @@ #include "CameraHal.h" -namespace android { +namespace Ti { +namespace Camera { + +struct LUT { + const char * userDefinition; + int halDefinition; +}; + +struct LUTtypeHAL{ + int size; + const LUT *Table; +}; class BaseCameraAdapter : public CameraAdapter { @@ -39,16 +50,16 @@ public: //Message/Frame notification APIs virtual void enableMsgType(int32_t msgs, frame_callback callback=NULL, event_callback eventCb=NULL, void* cookie=NULL); virtual void disableMsgType(int32_t msgs, void* cookie); - virtual void returnFrame(void * frameBuf, CameraFrame::FrameType frameType); - virtual void addFramePointers(void *frameBuf, void *y_uv); + virtual void returnFrame(CameraBuffer * frameBuf, CameraFrame::FrameType frameType); + virtual void addFramePointers(CameraBuffer *frameBuf, void *y_uv); virtual void removeFramePointers(); //APIs to configure Camera adapter and get the current parameter set - virtual status_t setParameters(const CameraParameters& params) = 0; - virtual void getParameters(CameraParameters& params) = 0; + virtual status_t setParameters(const android::CameraParameters& params) = 0; + virtual void getParameters(android::CameraParameters& params) = 0; //API to send a command to the camera - virtual status_t sendCommand(CameraCommands operation, int value1 = 0, int value2 = 0, int value3 = 0 ); + virtual status_t sendCommand(CameraCommands operation, int value1 = 0, int value2 = 0, int value3 = 0, int value4 = 0 ); virtual status_t registerImageReleaseCallback(release_image_buffers_callback callback, void *user_data); @@ -59,6 +70,8 @@ public: //Retrieves the next Adapter state virtual AdapterState getNextState(); + virtual status_t setSharedAllocator(camera_request_memory shmem_alloc) { mSharedAllocator = shmem_alloc; return NO_ERROR; }; + // Rolls the state machine back to INTIALIZED_STATE from the current state virtual status_t rollbackToInitializedState(); @@ -115,10 +128,10 @@ protected: virtual status_t stopSmoothZoom(); //Should be implemented by deriving classes in order to stop smooth zoom - virtual status_t useBuffers(CameraMode mode, void* bufArr, int num, size_t length, unsigned int queueable); + virtual status_t useBuffers(CameraMode mode, CameraBuffer* bufArr, int num, size_t length, unsigned int queueable); //Should be implemented by deriving classes in order queue a released buffer in CameraAdapter - virtual status_t fillThisBuffer(void* frameBuf, CameraFrame::FrameType frameType); + virtual status_t fillThisBuffer(CameraBuffer* frameBuf, CameraFrame::FrameType frameType); //API to get the frame size required to be allocated. This size is used to override the size passed //by camera service when VSTAB/VNF is turned ON for example @@ -128,7 +141,7 @@ protected: virtual status_t getFrameDataSize(size_t &dataFrameSize, size_t bufferCount); //API to get required picture buffers size with the current configuration in CameraParameters - virtual status_t getPictureBufferSize(size_t &length, size_t bufferCount); + virtual status_t getPictureBufferSize(CameraFrame &frame, size_t bufferCount); // Should be implemented by deriving classes in order to start face detection // ( if supported ) @@ -140,6 +153,12 @@ protected: virtual status_t switchToExecuting(); + virtual status_t setupTunnel(uint32_t SliceHeight, uint32_t EncoderHandle, uint32_t width, uint32_t height); + + virtual status_t destroyTunnel(); + + virtual status_t cameraPreviewInitialization(); + // Receive orientation events from CameraHal virtual void onOrientationEvent(uint32_t orientation, uint32_t tilt); @@ -148,7 +167,7 @@ protected: status_t notifyFocusSubscribers(CameraHalEvent::FocusStatus status); status_t notifyShutterSubscribers(); status_t notifyZoomSubscribers(int zoomIdx, bool targetReached); - status_t notifyFaceSubscribers(sp<CameraFDResult> &faces); + status_t notifyMetadataSubscribers(android::sp<CameraMetadataResult> &meta); //Send the frame to subscribers status_t sendFrameToSubscribers(CameraFrame *frame); @@ -157,14 +176,15 @@ protected: status_t resetFrameRefCount(CameraFrame &frame); //A couple of helper functions - void setFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType, int refCount); - int getFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType); - int setInitFrameRefCount(void* buf, unsigned int mask); + void setFrameRefCount(CameraBuffer* frameBuf, CameraFrame::FrameType frameType, int refCount); + int getFrameRefCount(CameraBuffer* frameBuf, CameraFrame::FrameType frameType); + int setInitFrameRefCount(CameraBuffer* buf, unsigned int mask); + static const char* getLUTvalue_translateHAL(int Value, LUTtypeHAL LUT); // private member functions private: status_t __sendFrameToSubscribers(CameraFrame* frame, - KeyedVector<int, frame_callback> *subscribers, + android::KeyedVector<int, frame_callback> *subscribers, CameraFrame::FrameType frameType); status_t rollbackToPreviousState(); @@ -198,55 +218,66 @@ protected: #endif - mutable Mutex mReturnFrameLock; + mutable android::Mutex mReturnFrameLock; //Lock protecting the Adapter state - mutable Mutex mLock; + mutable android::Mutex mLock; AdapterState mAdapterState; AdapterState mNextState; //Different frame subscribers get stored using these - KeyedVector<int, frame_callback> mFrameSubscribers; - KeyedVector<int, frame_callback> mFrameDataSubscribers; - KeyedVector<int, frame_callback> mVideoSubscribers; - KeyedVector<int, frame_callback> mImageSubscribers; - KeyedVector<int, frame_callback> mRawSubscribers; - KeyedVector<int, event_callback> mFocusSubscribers; - KeyedVector<int, event_callback> mZoomSubscribers; - KeyedVector<int, event_callback> mShutterSubscribers; - KeyedVector<int, event_callback> mFaceSubscribers; + android::KeyedVector<int, frame_callback> mFrameSubscribers; + android::KeyedVector<int, frame_callback> mSnapshotSubscribers; + android::KeyedVector<int, frame_callback> mFrameDataSubscribers; + android::KeyedVector<int, frame_callback> mVideoSubscribers; + android::KeyedVector<int, frame_callback> mVideoInSubscribers; + android::KeyedVector<int, frame_callback> mImageSubscribers; + android::KeyedVector<int, frame_callback> mRawSubscribers; + android::KeyedVector<int, event_callback> mFocusSubscribers; + android::KeyedVector<int, event_callback> mZoomSubscribers; + android::KeyedVector<int, event_callback> mShutterSubscribers; + android::KeyedVector<int, event_callback> mMetadataSubscribers; //Preview buffer management data - int *mPreviewBuffers; + CameraBuffer *mPreviewBuffers; int mPreviewBufferCount; size_t mPreviewBuffersLength; - KeyedVector<int, int> mPreviewBuffersAvailable; - mutable Mutex mPreviewBufferLock; + android::KeyedVector<CameraBuffer *, int> mPreviewBuffersAvailable; + mutable android::Mutex mPreviewBufferLock; + + //Snapshot buffer management data + android::KeyedVector<int, int> mSnapshotBuffersAvailable; + mutable android::Mutex mSnapshotBufferLock; //Video buffer management data - int *mVideoBuffers; - KeyedVector<int, int> mVideoBuffersAvailable; + CameraBuffer *mVideoBuffers; + android::KeyedVector<CameraBuffer *, int> mVideoBuffersAvailable; int mVideoBuffersCount; size_t mVideoBuffersLength; - mutable Mutex mVideoBufferLock; + mutable android::Mutex mVideoBufferLock; //Image buffer management data - int *mCaptureBuffers; - KeyedVector<int, bool> mCaptureBuffersAvailable; + CameraBuffer *mCaptureBuffers; + android::KeyedVector<CameraBuffer *, int> mCaptureBuffersAvailable; int mCaptureBuffersCount; size_t mCaptureBuffersLength; - mutable Mutex mCaptureBufferLock; + mutable android::Mutex mCaptureBufferLock; //Metadata buffermanagement - int *mPreviewDataBuffers; - KeyedVector<int, bool> mPreviewDataBuffersAvailable; + CameraBuffer *mPreviewDataBuffers; + android::KeyedVector<CameraBuffer *, int> mPreviewDataBuffersAvailable; int mPreviewDataBuffersCount; size_t mPreviewDataBuffersLength; - mutable Mutex mPreviewDataBufferLock; + mutable android::Mutex mPreviewDataBufferLock; - TIUTILS::MessageQueue mFrameQ; - TIUTILS::MessageQueue mAdapterQ; - mutable Mutex mSubscriberLock; + //Video input buffer management data (used for reproc pipe) + CameraBuffer *mVideoInBuffers; + android::KeyedVector<CameraBuffer *, int> mVideoInBuffersAvailable; + mutable android::Mutex mVideoInBufferLock; + + Utils::MessageQueue mFrameQ; + Utils::MessageQueue mAdapterQ; + mutable android::Mutex mSubscriberLock; ErrorNotifier *mErrorNotifier; release_image_buffers_callback mReleaseImageBuffersCallback; end_image_capture_callback mEndImageCaptureCallback; @@ -254,18 +285,21 @@ protected: void *mEndCaptureData; bool mRecording; + camera_request_memory mSharedAllocator; + uint32_t mFramesWithDucati; uint32_t mFramesWithDisplay; uint32_t mFramesWithEncoder; -#ifdef DEBUG_LOG - KeyedVector<int, bool> mBuffersWithDucati; +#ifdef CAMERAHAL_DEBUG + android::KeyedVector<int, bool> mBuffersWithDucati; #endif - KeyedVector<void *, CameraFrame *> mFrameQueue; + android::KeyedVector<void *, CameraFrame *> mFrameQueue; }; -}; +} // namespace Camera +} // namespace Ti #endif //BASE_CAMERA_ADAPTER_H |