111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev/* Copyright (c) 2012-2013, The Linux Foundataion. All rights reserved. 211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * 311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * Redistribution and use in source and binary forms, with or without 411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * modification, are permitted provided that the following conditions are 511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * met: 611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * * Redistributions of source code must retain the above copyright 711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * notice, this list of conditions and the following disclaimer. 811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * * Redistributions in binary form must reproduce the above 911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * copyright notice, this list of conditions and the following 1011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * disclaimer in the documentation and/or other materials provided 1111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * with the distribution. 1211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * * Neither the name of The Linux Foundation nor the names of its 1311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * contributors may be used to endorse or promote products derived 1411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * from this software without specific prior written permission. 1511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * 1611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 1911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * 2811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev */ 2911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 3011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#ifndef __QCAMERA3_CHANNEL_H__ 3111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#define __QCAMERA3_CHANNEL_H__ 3211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 3311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#include <hardware/camera3.h> 3411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#include "QCamera3Stream.h" 3511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#include "QCamera3Mem.h" 3611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#include "QCamera3PostProc.h" 3711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#include "QCamera3HALHeader.h" 3811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 3911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevextern "C" { 4011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#include <mm_camera_interface.h> 4111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev} 4211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 4311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevusing namespace android; 4411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 45c8301d02dcb437da3fd90943086d351fa739b390Mekala Natarajan#define F_NUMBER_DECIMAL_PRECISION 100 4611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevnamespace qcamera { 4711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 4811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevtypedef void (*channel_cb_routine)(mm_camera_super_buf_t *metadata, 4911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev camera3_stream_buffer_t *buffer, 5011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t frame_number, void *userdata); 5111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 5211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevclass QCamera3Channel 5311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev{ 5411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevpublic: 5511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Channel(uint32_t cam_handle, 5611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_ops_t *cam_ops, 5711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev channel_cb_routine cb_routine, 5811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev cam_padding_info_t *paddingInfo, 5911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void *userData); 6011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Channel(); 6111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual ~QCamera3Channel(); 6211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 6311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int32_t addStream(cam_stream_type_t streamType, 6411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev cam_format_t streamFormat, 6511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev cam_dimension_t streamDim, 6611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint8_t minStreamBufnum); 6711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int32_t start(); 6811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int32_t stop(); 6911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int32_t bufDone(mm_camera_super_buf_t *recvd_frame); 7011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 7111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t getStreamTypeMask(); 7211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 7311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t registerBuffers(uint32_t num_buffers, 7411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev buffer_handle_t **buffers) = 0; 7511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t initialize() = 0; 7611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t request(buffer_handle_t * /*buffer*/, 7711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t /*frameNumber*/){ return 0;}; 7811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t request(buffer_handle_t * /*buffer*/, 7911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t /*frameNumber*/, 8011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev jpeg_settings_t* /*mJpegSettings*/, 8111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_buf_def_t* /*pInputBuffer*/, 8211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Channel* /*pInputChannel*/){ return 0;}; 8311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 8411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Stream *stream) = 0; 8511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 8611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual QCamera3Memory *getStreamBufs(uint32_t len) = 0; 8711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void putStreamBufs() = 0; 8811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 8911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Stream *getStreamByHandle(uint32_t streamHandle); 9011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t getMyHandle() const {return m_handle;}; 9111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint8_t getNumOfStreams() const {return m_numStreams;}; 9211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Stream *getStreamByIndex(uint8_t index); 9311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 9411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev static void streamCbRoutine(mm_camera_super_buf_t *super_frame, 9511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Stream *stream, void *userdata); 9611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void *mUserData; 9711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev cam_padding_info_t *mPaddingInfo; 9811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Stream *mStreams[MAX_STREAM_NUM_IN_BUNDLE]; 9911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint8_t m_numStreams; 10011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevprotected: 10111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 10211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t init(mm_camera_channel_attr_t *attr, 10311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_buf_notify_t dataCB); 10411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int32_t allocateStreamInfoBuf(camera3_stream_t *stream); 10511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 10611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t m_camHandle; 10711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_ops_t *m_camOps; 10811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev bool m_bIsActive; 10911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 11011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t m_handle; 11111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 11211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 11311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_buf_notify_t mDataCB; 11411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 11511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 11611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3HeapMemory *mStreamInfoBuf; 11711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev channel_cb_routine mChannelCB; 11811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev //cam_padding_info_t *mPaddingInfo; 11911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev}; 12011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 12111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev/* QCamera3RegularChannel is used to handle all streams that are directly 12211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * generated by hardware and given to frameworks without any postprocessing at HAL. 12311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * Examples are: all IMPLEMENTATION_DEFINED streams, CPU_READ streams. */ 12411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevclass QCamera3RegularChannel : public QCamera3Channel 12511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev{ 12611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevpublic: 12711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3RegularChannel(uint32_t cam_handle, 12811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_ops_t *cam_ops, 12911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev channel_cb_routine cb_routine, 13011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev cam_padding_info_t *paddingInfo, 13111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void *userData, 13211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev camera3_stream_t *stream); 13311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3RegularChannel(uint32_t cam_handle, 13411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_ops_t *cam_ops, 13511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev channel_cb_routine cb_routine, 13611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev cam_padding_info_t *paddingInfo, 13711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void *userData, 13811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev camera3_stream_t *stream, 13911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t width, uint32_t height); 14011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual ~QCamera3RegularChannel(); 14111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 14211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t initialize(); 14311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber); 14411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t registerBuffers(uint32_t num_buffers, 14511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev buffer_handle_t **buffers); 14611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 14711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Stream *stream); 14811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 14911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual QCamera3Memory *getStreamBufs(uint32_t le); 15011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void putStreamBufs(); 15111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_buf_def_t* getInternalFormatBuffer(buffer_handle_t* buffer); 15211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 15311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevpublic: 15411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev static int kMaxBuffers; 15511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevprivate: 15611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev camera3_stream_t *mCamera3Stream; 15711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t mNumBufs; 15811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev buffer_handle_t **mCamera3Buffers; 15911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 16011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3GrallocMemory *mMemory; 16111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev // width and height of internal stream may be different than what's 16211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev // specified in camera3_stream_t. For example: ZSL stream size is 16311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev // always the active region size, but internally we use the JPEG 16411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev // size. 16511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t mWidth, mHeight; 16611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev}; 16711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 16811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev/* QCamera3MetadataChannel is for metadata stream generated by camera daemon. */ 16911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevclass QCamera3MetadataChannel : public QCamera3Channel 17011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev{ 17111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevpublic: 17211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3MetadataChannel(uint32_t cam_handle, 17311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_ops_t *cam_ops, 17411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev channel_cb_routine cb_routine, 17511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev cam_padding_info_t *paddingInfo, 17611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void *userData); 17711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual ~QCamera3MetadataChannel(); 17811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 17911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t initialize(); 18011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 18111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber); 18211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t registerBuffers(uint32_t num_buffers, 18311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev buffer_handle_t **buffers); 18411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 18511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Stream *stream); 18611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 18711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual QCamera3Memory *getStreamBufs(uint32_t le); 18811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void putStreamBufs(); 18911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 19011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevprivate: 19111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3HeapMemory *mMemory; 19211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev}; 19311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 19411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev/* QCamera3PicChannel is for JPEG stream, which contains a YUV stream generated 19511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * by the hardware, and encoded to a JPEG stream */ 19611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevclass QCamera3PicChannel : public QCamera3Channel 19711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev{ 19811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevpublic: 19911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3PicChannel(uint32_t cam_handle, 20011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_ops_t *cam_ops, 20111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev channel_cb_routine cb_routine, 20211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev cam_padding_info_t *paddingInfo, 20311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void *userData, 20411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev camera3_stream_t *stream); 20511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev ~QCamera3PicChannel(); 20611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 20711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t initialize(); 20811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 20911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t request(buffer_handle_t *buffer, 21011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t frameNumber, jpeg_settings_t* mJpegSettings, 21111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_buf_def_t* pInputBuffer,QCamera3Channel* pInputChannel); 21211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t registerBuffers(uint32_t num_buffers, 21311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev buffer_handle_t **buffers); 21411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 21511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Stream *stream); 21611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 21711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual QCamera3Memory *getStreamBufs(uint32_t le); 21811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void putStreamBufs(); 21911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev bool isWNREnabled() {return m_bWNROn;}; 22011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev bool needOnlineRotation(); 22111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void getThumbnailSize(cam_dimension_t &dim); 22211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int getJpegQuality(); 22311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int getJpegRotation(); 22411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev bool isRawSnapshot(); 22511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Exif *getExifData(); 22611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev static void jpegEvtHandle(jpeg_job_status_t status, 22711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t /*client_hdl*/, 22811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t jobId, 22911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_jpeg_output_t *p_output, 23011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void *userdata); 23111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev static void dataNotifyCB(mm_camera_super_buf_t *recvd_frame, 23211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void *userdata); 23311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void queueMetadata(mm_camera_super_buf_t *metadata_buf); 23411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 23511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevpublic: 23611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev static int kMaxBuffers; 23711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3PostProcessor m_postprocessor; // post processor 23811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevprivate: 23911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev camera3_stream_t *mCamera3Stream; 24011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t mNumBufs; 24111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev buffer_handle_t **mCamera3Buffers; 24211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev jpeg_settings_t* mJpegSettings; 24311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int32_t mCurrentBufIndex; 24411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev bool m_bWNROn; 24511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 24611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 24711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3GrallocMemory *mMemory; 24811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3HeapMemory *mYuvMemory; 24911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev}; 25011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 25111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev// reprocess channel class 25211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevclass QCamera3ReprocessChannel : public QCamera3Channel 25311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev{ 25411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevpublic: 25511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3ReprocessChannel(uint32_t cam_handle, 25611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_ops_t *cam_ops, 25711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev channel_cb_routine cb_routine, 25811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev cam_padding_info_t *paddingInfo, 25911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void *userData, void *ch_hdl); 26011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3ReprocessChannel(); 26111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual ~QCamera3ReprocessChannel(); 26211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev // online reprocess 26311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int32_t doReprocess(mm_camera_super_buf_t *frame, 26411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_super_buf_t *meta_frame); 26511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev // offline reprocess 26611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int32_t doReprocess(int buf_fd, uint32_t buf_length, int32_t &ret_val, 26711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_super_buf_t *meta_buf); 26811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t registerBuffers(uint32_t num_buffers, buffer_handle_t **buffers); 26911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual QCamera3Memory *getStreamBufs(uint32_t len); 27011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void putStreamBufs(); 27111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual int32_t initialize(); 27211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 27311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Stream *stream); 27411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev static void dataNotifyCB(mm_camera_super_buf_t *recvd_frame, 27511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void* userdata); 27611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int32_t addReprocStreamsFromSource(cam_pp_feature_config_t &config, 27711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Channel *pSrcChannel, 27811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Channel *pMetaChannel); 27911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Stream *getStreamBySourceHandle(uint32_t srcHandle); 28011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevpublic: 28111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void *picChHandle; 28211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevprivate: 28311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev uint32_t mSrcStreamHandles[MAX_STREAM_NUM_IN_BUNDLE]; 28411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Channel *m_pSrcChannel; // ptr to source channel for reprocess 28511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3Channel *m_pMetaChannel; 28611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mm_camera_super_buf_t *m_metaFrame; 28711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev QCamera3HeapMemory *mMemory; 28811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev}; 28911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 29011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev}; // namespace qcamera 29111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 29211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#endif /* __QCAMERA_CHANNEL_H__ */ 293