QCamera3Channel.h revision f2139106633e7f52d1f47f3ef8397925673dc69d
1340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang/* Copyright (c) 2012-2013, The Linux Foundataion. All rights reserved. 2340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * 3340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * Redistribution and use in source and binary forms, with or without 4340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * modification, are permitted provided that the following conditions are 5340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * met: 6340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * * Redistributions of source code must retain the above copyright 7340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * notice, this list of conditions and the following disclaimer. 8340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * * Redistributions in binary form must reproduce the above 9340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * copyright notice, this list of conditions and the following 10340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * disclaimer in the documentation and/or other materials provided 11340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * with the distribution. 12340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * * Neither the name of The Linux Foundation nor the names of its 13340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * contributors may be used to endorse or promote products derived 14340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * from this software without specific prior written permission. 15340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * 16340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * 28340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang */ 29340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 30340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#ifndef __QCAMERA3_CHANNEL_H__ 31340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#define __QCAMERA3_CHANNEL_H__ 32340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 33340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#include <hardware/camera3.h> 34340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#include "QCamera3Stream.h" 35340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#include "QCamera3Mem.h" 363ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru#include "QCamera3PostProc.h" 373ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru#include "QCamera3HALHeader.h" 38340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 39340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangextern "C" { 40340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#include <mm_camera_interface.h> 41340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang} 42340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 43340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangusing namespace android; 44340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 45340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangnamespace qcamera { 46340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 4769c21b5cfa0d1ecd34c7e52f124346649c97303aTanmaya Godboletypedef void (*channel_cb_routine)(mm_camera_super_buf_t *metadata, 48dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang camera3_stream_buffer_t *buffer, 49dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang uint32_t frame_number, void *userdata); 50340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 51340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangclass QCamera3Channel 52340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang{ 53340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic: 54340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3Channel(uint32_t cam_handle, 55340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang mm_camera_ops_t *cam_ops, 56dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang channel_cb_routine cb_routine, 57dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang cam_padding_info_t *paddingInfo, 58dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang void *userData); 59340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3Channel(); 60340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang virtual ~QCamera3Channel(); 6165717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang 6265717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang int32_t addStream(cam_stream_type_t streamType, 63340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang cam_format_t streamFormat, 64340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang cam_dimension_t streamDim, 65dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang uint8_t minStreamBufnum); 6665717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang int32_t start(); 6765717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang int32_t stop(); 6865717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang int32_t bufDone(mm_camera_super_buf_t *recvd_frame); 6965717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang 70340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang virtual int32_t registerBuffers(uint32_t num_buffers, 71340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang buffer_handle_t **buffers) = 0; 723ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru virtual int32_t initialize() = 0; 73f2139106633e7f52d1f47f3ef8397925673dc69dShuzhen Wang virtual int32_t request(buffer_handle_t * /*buffer*/, 74f2139106633e7f52d1f47f3ef8397925673dc69dShuzhen Wang uint32_t /*frameNumber*/){ return 0;}; 75f2139106633e7f52d1f47f3ef8397925673dc69dShuzhen Wang virtual int32_t request(buffer_handle_t * /*buffer*/, 76f2139106633e7f52d1f47f3ef8397925673dc69dShuzhen Wang uint32_t /*frameNumber*/, 77f2139106633e7f52d1f47f3ef8397925673dc69dShuzhen Wang jpeg_settings_t* /*mJpegSettings*/){ return 0;}; 78340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 79340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3Stream *stream) = 0; 80340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 8165717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang virtual QCamera3Memory *getStreamBufs(uint32_t len) = 0; 8265717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang virtual void putStreamBufs() = 0; 8365717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang 84340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3Stream *getStreamByHandle(uint32_t streamHandle); 85340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang uint32_t getMyHandle() const {return m_handle;}; 86340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang uint8_t getNumOfStreams() const {return m_numStreams;}; 87340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3Stream *getStreamByIndex(uint8_t index); 88340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 89340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang static void streamCbRoutine(mm_camera_super_buf_t *super_frame, 90340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3Stream *stream, void *userdata); 91340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprotected: 92340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 933ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru virtual int32_t init(mm_camera_channel_attr_t *attr, 94dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang mm_camera_buf_notify_t dataCB); 95340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang int32_t allocateStreamInfoBuf(camera3_stream_t *stream); 96340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 97340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang uint32_t m_camHandle; 98340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang mm_camera_ops_t *m_camOps; 99340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang bool m_bIsActive; 100340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 101340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang uint32_t m_handle; 102340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang uint8_t m_numStreams; 103340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3Stream *mStreams[MAX_STREAM_NUM_IN_BUNDLE]; 104340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang mm_camera_buf_notify_t mDataCB; 105340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang void *mUserData; 106340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 107340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3HeapMemory *mStreamInfoBuf; 108340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang channel_cb_routine mChannelCB; 109340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang cam_padding_info_t *mPaddingInfo; 110340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang}; 111340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 112340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang/* QCamera3RegularChannel is used to handle all streams that are directly 113340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * generated by hardware and given to frameworks without any postprocessing at HAL. 114340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * Examples are: all IMPLEMENTATION_DEFINED streams, CPU_READ streams. */ 115340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangclass QCamera3RegularChannel : public QCamera3Channel 116340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang{ 117340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic: 118340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3RegularChannel(uint32_t cam_handle, 119340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang mm_camera_ops_t *cam_ops, 120340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang channel_cb_routine cb_routine, 121dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang cam_padding_info_t *paddingInfo, 122dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang void *userData, 123340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang camera3_stream_t *stream); 124340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang virtual ~QCamera3RegularChannel(); 125340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 1263ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru virtual int32_t initialize(); 127dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber); 12865717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang virtual int32_t registerBuffers(uint32_t num_buffers, 12965717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang buffer_handle_t **buffers); 13065717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 13165717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang QCamera3Stream *stream); 13265717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang 13365717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang virtual QCamera3Memory *getStreamBufs(uint32_t le); 13465717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang virtual void putStreamBufs(); 135340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 136340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic: 137340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang static int kMaxBuffers; 138340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprivate: 139340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang camera3_stream_t *mCamera3Stream; 140340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang uint32_t mNumBufs; 14165717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang buffer_handle_t **mCamera3Buffers; 142340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 143340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3GrallocMemory *mMemory; 144340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang}; 145340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 146340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang/* QCamera3MetadataChannel is for metadata stream generated by camera daemon. */ 147340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangclass QCamera3MetadataChannel : public QCamera3Channel 148340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang{ 149340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic: 150340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3MetadataChannel(uint32_t cam_handle, 151340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang mm_camera_ops_t *cam_ops, 152dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang channel_cb_routine cb_routine, 153dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang cam_padding_info_t *paddingInfo, 154dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang void *userData); 155340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang virtual ~QCamera3MetadataChannel(); 156340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 1573ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru virtual int32_t initialize(); 158340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 159dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber); 160340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang virtual int32_t registerBuffers(uint32_t num_buffers, 161340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang buffer_handle_t **buffers); 162340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 163340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3Stream *stream); 164340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 16565717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang virtual QCamera3Memory *getStreamBufs(uint32_t le); 16665717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang virtual void putStreamBufs(); 16769c21b5cfa0d1ecd34c7e52f124346649c97303aTanmaya Godbole 168dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang#ifdef FAKE_FRAME_NUMBERS 169dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang uint32_t startingFrameNumber; 170dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang#endif 17165717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang 172340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprivate: 173340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3HeapMemory *mMemory; 174340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang}; 175340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 176340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang/* QCamera3PicChannel is for JPEG stream, which contains a YUV stream generated 177340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * by the hardware, and encoded to a JPEG stream */ 178340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangclass QCamera3PicChannel : public QCamera3Channel 179340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang{ 180340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic: 181340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3PicChannel(uint32_t cam_handle, 1823ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru mm_camera_ops_t *cam_ops, 1833ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru channel_cb_routine cb_routine, 1843ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru cam_padding_info_t *paddingInfo, 1853ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru void *userData, 1863ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru camera3_stream_t *stream); 187340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang ~QCamera3PicChannel(); 188340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 1893ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru virtual int32_t initialize(); 1903ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru 1913ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru virtual int32_t request(buffer_handle_t *buffer, 1923ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru uint32_t frameNumber, jpeg_settings_t* mJpegSettings); 193340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang virtual int32_t registerBuffers(uint32_t num_buffers, 1943ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru buffer_handle_t **buffers); 195340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 1963ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru QCamera3Stream *stream); 19765717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang 19865717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang virtual QCamera3Memory *getStreamBufs(uint32_t le); 19965717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang virtual void putStreamBufs(); 2003ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru bool needOnlineRotation(); 2013ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru void getThumbnailSize(cam_dimension_t &dim); 2023ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru int getJpegQuality(); 2033ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru int getJpegRotation(); 2043ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru QCamera3Exif *getExifData(); 2053ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru static void jpegEvtHandle(jpeg_job_status_t status, 2063ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru uint32_t /*client_hdl*/, 2073ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru uint32_t jobId, 2083ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru mm_jpeg_output_t *p_output, 2093ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru void *userdata); 210e803115f5c8573703e3b00a3f8741bf3816b8f23Mansoor Aftab static void dataNotifyCB(mm_camera_super_buf_t *recvd_frame, 211e803115f5c8573703e3b00a3f8741bf3816b8f23Mansoor Aftab void *userdata); 21265717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang 213340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic: 214340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang static int kMaxBuffers; 215340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprivate: 216340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang camera3_stream_t *mCamera3Stream; 217340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang uint32_t mNumBufs; 2183ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru buffer_handle_t **mCamera3Buffers; 2193ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru jpeg_settings_t* mJpegSettings; 220b6424056f1221af718daa26e0dc441b8d3cd15e5Apurva Rajguru int32_t mCurrentBufIndex; 221340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 2223ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru 2233ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru QCamera3GrallocMemory *mMemory; 224340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang QCamera3HeapMemory *mYuvMemory; 2253ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru QCamera3PostProcessor m_postprocessor; // post processor 226340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang}; 227340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 228340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang}; // namespace qcamera 229340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang 230340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#endif /* __QCAMERA_CHANNEL_H__ */ 231