166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. 266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Redistribution and use in source and binary forms, with or without 466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * modification, are permitted provided that the following conditions are 566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * met: 666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * * Redistributions of source code must retain the above copyright 766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * notice, this list of conditions and the following disclaimer. 866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * * Redistributions in binary form must reproduce the above 966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * copyright notice, this list of conditions and the following 1066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * disclaimer in the documentation and/or other materials provided 1166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * with the distribution. 1266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * * Neither the name of The Linux Foundation nor the names of its 1366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * contributors may be used to endorse or promote products derived 1466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * from this software without specific prior written permission. 1566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 1966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 2866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin */ 2966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifndef __QCAMERA3_CHANNEL_H__ 3166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define __QCAMERA3_CHANNEL_H__ 3266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// System dependencies 3466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <utils/List.h> 3566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <utils/Mutex.h> 3666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <utils/Vector.h> 3766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "gralloc_priv.h" 3866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Camera dependencies 4066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "cam_intf.h" 4166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "cam_types.h" 4266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "camera3.h" 4366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCamera3HALHeader.h" 4466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCamera3Mem.h" 4566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCamera3PostProc.h" 4666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCamera3Stream.h" 4766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCamera3StreamMem.h" 4866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 4966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinextern "C" { 5066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "mm_camera_interface.h" 5166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "mm_jpeg_interface.h" 5266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 5366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinusing namespace android; 5566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MIN_STREAMING_BUFFER_NUM 7+11 5766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_PREVIEW 1 5966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_VIDEO (1<<1) 6066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_SNAPSHOT (1<<2) 6166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_CALLBACK (1<<3) 6266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_INPUT_REPROCESS (1<<6) 6366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef int64_t nsecs_t; 6566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinnamespace qcamera { 6766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef void (*channel_cb_routine)(mm_camera_super_buf_t *metadata, 6966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t *buffer, 7066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frame_number, bool isInputBuffer, 7166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 7266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3Channel 7366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 7466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 7566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Channel(uint32_t cam_handle, 7666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t channel_handle, 7766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_ops_t *cam_ops, 7866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin channel_cb_routine cb_routine, 7966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_padding_info_t *paddingInfo, 8066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t postprocess_mask, 8166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData, uint32_t numBuffers); 8266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual ~QCamera3Channel(); 8366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 8466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t start(); 8566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t stop(); 8666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t setBatchSize(uint32_t); 8766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t queueBatchBuf(); 8866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t setPerFrameMapUnmap(bool enable); 8966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t bufDone(mm_camera_super_buf_t *recvd_frame); 9066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setBundleInfo(const cam_bundle_config_t &bundleInfo); 9166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 9266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual uint32_t getStreamTypeMask(); 9366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t getStreamID(uint32_t streamMask); 9466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void destroy(); 9566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t initialize(cam_is_type_t isType) = 0; 9666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t request(buffer_handle_t * /*buffer*/, 9766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t /*frameNumber*/){ return 0;}; 9866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t request(buffer_handle_t * /*buffer*/, 9966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t /*frameNumber*/, 10066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t* /*pInputBuffer*/, 10166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t* /*metadata*/){ return 0;}; 10266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 10366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream) = 0; 10466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 10566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t registerBuffer(buffer_handle_t *buffer, cam_is_type_t isType) = 0; 10666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual QCamera3StreamMem *getStreamBufs(uint32_t len) = 0; 10766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void putStreamBufs() = 0; 10866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t flush(); 10966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 11066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *getStreamByHandle(uint32_t streamHandle); 11166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t getMyHandle() const {return m_handle;}; 11266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t getNumOfStreams() const {return m_numStreams;}; 11366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t getNumBuffers() const {return mNumBuffers;}; 11466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *getStreamByIndex(uint32_t index); 11566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 11666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void streamCbRoutine(mm_camera_super_buf_t *super_frame, 11766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream, void *userdata); 11866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void dumpYUV(mm_camera_buf_def_t *frame, cam_dimension_t dim, 11966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_frame_len_offset_t offset, uint8_t name); 12066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isUBWCEnabled(); 12166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_format_t getStreamDefaultFormat(cam_stream_type_t type); 12266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 12366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *mUserData; 12466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_padding_info_t mPaddingInfo; 12566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *mStreams[MAX_STREAM_NUM_IN_BUNDLE]; 12666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t m_numStreams; 12766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprotected: 12866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 12966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addStream(cam_stream_type_t streamType, 13066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_format_t streamFormat, 13166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t streamDim, 13266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_rotation_t streamRotation, 13366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t minStreamBufnum, 13466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t postprocessMask, 13566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_is_type_t isType, 13666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t batchSize = 0); 13766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 13866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t allocateStreamInfoBuf(camera3_stream_t *stream); 13966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t m_camHandle; 14166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_ops_t *m_camOps; 14266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bIsActive; 14366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t m_handle; 14566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_buf_notify_t mDataCB; 14866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 15066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3HeapMemory *mStreamInfoBuf; 15166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin channel_cb_routine mChannelCB; 15266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //cam_padding_info_t *mPaddingInfo; 15366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mPostProcMask; 15466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mYUVDump; 15566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_is_type_t mIsType; 15666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mNumBuffers; 15766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Enable unmapping of buffer before issuing buffer callback. Default value 15866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * for this flag is true and is selectively set to false for the usecases 15966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * such as HFR to avoid any performance hit due to mapping/unmapping */ 16066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mPerFrameMapUnmapEnable; 16166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frm_num; 16266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t dumpFrmCnt; 16366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t skip_mode; 16466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mDumpSkipCnt; 16566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 16666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 16766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* QCamera3ProcessingChannel is used to handle all streams that are directly 16866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * generated by hardware and given to frameworks without any postprocessing at HAL. 16966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * It also handles input streams that require reprocessing by hardware and then 17066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * returned to frameworks. */ 17166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3ProcessingChannel : public QCamera3Channel 17266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 17366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 17466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3ProcessingChannel(uint32_t cam_handle, 17566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t channel_handle, 17666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_ops_t *cam_ops, 17766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin channel_cb_routine cb_routine, 17866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_padding_info_t *paddingInfo, 17966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData, 18066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_t *stream, 18166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_type_t stream_type, 18266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t postprocess_mask, 18366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Channel *metadataChannel, 18466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t numBuffers = MAX_INFLIGHT_REQUESTS); 18566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 18666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ~QCamera3ProcessingChannel(); 18766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 18866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t initialize(cam_is_type_t isType); 18966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t request(buffer_handle_t *buffer, 19066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frameNumber, 19166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t* pInputBuffer, 19266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t* metadata); 19366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 19466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream); 19566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual QCamera3StreamMem *getStreamBufs(uint32_t len); 19666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void putStreamBufs(); 19766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t registerBuffer(buffer_handle_t *buffer, cam_is_type_t isType); 19866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 19966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t stop(); 20066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual reprocess_type_t getReprocessType() = 0; 20266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void reprocessCbRoutine(buffer_handle_t *resultBuffer, 20466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t resultFrameNumber); 20566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t queueReprocMetadata(mm_camera_super_buf_t *metadata); 20766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t metadataBufDone(mm_camera_super_buf_t *recvd_frame); 20866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t translateStreamTypeAndFormat(camera3_stream_t *stream, 20966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_type_t &streamType, 21066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_format_t &streamFormat); 21166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setReprocConfig(reprocess_config_t &reproc_cfg, 21266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t *pInputBuffer, 21366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t *metadata, 21466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_format_t streamFormat, cam_dimension_t dim); 21566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setFwkInputPPData(qcamera_fwk_input_pp_data_t *src_frame, 21666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t *pInputBuffer, 21766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin reprocess_config_t *reproc_cfg, 21866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t *metadata, 21966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin buffer_handle_t *output_buffer, 22066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frameNumber); 22166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t checkStreamCbErrors(mm_camera_super_buf_t *super_frame, 22266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream); 22366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t getStreamSize(cam_dimension_t &dim); 22466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 22566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3PostProcessor m_postprocessor; // post processor 22666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void showDebugFPS(int32_t streamType); 22766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 22866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprotected: 22966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t mDebugFPS; 23066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int mFrameCount; 23166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int mLastFrameCount; 23266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nsecs_t mLastFpsTime; 23366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isWNREnabled() {return m_bWNROn;}; 23466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void startPostProc(const reprocess_config_t &reproc_cfg); 23566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void issueChannelCb(buffer_handle_t *resultBuffer, 23666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t resultFrameNumber); 23766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t releaseOfflineMemory(uint32_t resultFrameNumber); 23866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 23966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3StreamMem mMemory; //output buffer allocated by fwk 24066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_t *mCamera3Stream; 24166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mNumBufs; 24266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_type_t mStreamType; 24366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_format_t mStreamFormat; 24466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t mIntent; 24566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 24666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mPostProcStarted; 24766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mInputBufferConfig; // Set when the processing channel is configured 24866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // for processing input(framework) buffers 24966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 25066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Channel *m_pMetaChannel; 25166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_super_buf_t *mMetaFrame; 25266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3StreamMem mOfflineMemory; //reprocessing input buffer 25366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3StreamMem mOfflineMetaMemory; //reprocessing metadata buffer 25466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin List<uint32_t> mFreeOfflineMetaBuffersList; 25566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Mutex mFreeOfflineMetaBuffersLock; 25666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 25766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 25866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 25966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bWNROn; 26066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 26166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 26266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* QCamera3RegularChannel is used to handle all streams that are directly 26366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * generated by hardware and given to frameworks without any postprocessing at HAL. 26466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Examples are: all IMPLEMENTATION_DEFINED streams, CPU_READ streams. */ 26566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3RegularChannel : public QCamera3ProcessingChannel 26666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 26766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 26866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3RegularChannel(uint32_t cam_handle, 26966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t channel_handle, 27066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_ops_t *cam_ops, 27166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin channel_cb_routine cb_routine, 27266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_padding_info_t *paddingInfo, 27366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData, 27466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_t *stream, 27566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_type_t stream_type, 27666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t postprocess_mask, 27766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Channel *metadataChannel, 27866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t numBuffers = MAX_INFLIGHT_REQUESTS); 27966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 28066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual ~QCamera3RegularChannel(); 28166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 28266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t setBatchSize(uint32_t batchSize); 28366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual uint32_t getStreamTypeMask(); 28466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t queueBatchBuf(); 28566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t initialize(cam_is_type_t isType); 2861687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan using QCamera3ProcessingChannel::request; 28766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber); 28866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual reprocess_type_t getReprocessType(); 28966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 29066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 29166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t initialize(struct private_handle_t *priv_handle); 29266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 29366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mBatchSize; 29466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_rotation_t mRotation; 29566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 29666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 29766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* QCamera3MetadataChannel is for metadata stream generated by camera daemon. */ 29866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3MetadataChannel : public QCamera3Channel 29966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 30066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 30166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3MetadataChannel(uint32_t cam_handle, 30266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t channel_handle, 30366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_ops_t *cam_ops, 30466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin channel_cb_routine cb_routine, 30566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_padding_info_t *paddingInfo, 30666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t postprocess_mask, 30766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData, 30866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t numBuffers = MIN_STREAMING_BUFFER_NUM); 30966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual ~QCamera3MetadataChannel(); 31066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 31166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t initialize(cam_is_type_t isType); 31266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 31366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber); 31466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 31566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream); 31666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 31766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual QCamera3StreamMem *getStreamBufs(uint32_t le); 31866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void putStreamBufs(); 31966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t registerBuffer(buffer_handle_t * /*buffer*/, cam_is_type_t /*isType*/) 32066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { return NO_ERROR; }; 32166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 32266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 32366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3StreamMem *mMemory; 32466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 32566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 32666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* QCamera3RawChannel is for opaqueu/cross-platform raw stream containing 32766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * vendor specific bayer data or 16-bit unpacked bayer data */ 32866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3RawChannel : public QCamera3RegularChannel 32966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 33066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 33166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3RawChannel(uint32_t cam_handle, 33266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t channel_handle, 33366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_ops_t *cam_ops, 33466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin channel_cb_routine cb_routine, 33566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_padding_info_t *paddingInfo, 33666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData, 33766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_t *stream, 33866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t postprocess_mask, 33966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Channel *metadataChannel, 34066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool raw_16 = false, 34166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t numBuffers = MAX_INFLIGHT_REQUESTS); 34266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 34366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual ~QCamera3RawChannel(); 34466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 34566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t initialize(cam_is_type_t isType); 34666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 34766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 34866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream); 34966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 35066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual reprocess_type_t getReprocessType(); 35166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 35266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 35366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mRawDump; 35466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mIsRaw16; 35566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 35666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void dumpRawSnapshot(mm_camera_buf_def_t *frame); 35766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void convertLegacyToRaw16(mm_camera_buf_def_t *frame); 35866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void convertMipiToRaw16(mm_camera_buf_def_t *frame); 35966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 36066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 36166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* 36266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * QCamera3RawDumpChannel is for internal use only for Raw dump 36366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin */ 36466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 36566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3RawDumpChannel : public QCamera3Channel 36666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 36766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 36866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3RawDumpChannel(uint32_t cam_handle, 36966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t channel_handle, 37066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_ops_t *cam_ops, 37166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t rawDumpSize, 37266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_padding_info_t *paddingInfo, 37366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData, 37466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t postprocess_mask, uint32_t numBuffers = 3U); 37566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual ~QCamera3RawDumpChannel(); 37666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t initialize(cam_is_type_t isType); 37766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 37866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream); 37966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual QCamera3StreamMem *getStreamBufs(uint32_t le); 38066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void putStreamBufs(); 38166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t registerBuffer(buffer_handle_t * /*buffer*/, cam_is_type_t /*isType*/) 38266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { return NO_ERROR; }; 38366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber); 38466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void dumpRawSnapshot(mm_camera_buf_def_t *frame); 38566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 38666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 38766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t mDim; 38866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 38966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 39066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mRawDump; 39166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3StreamMem *mMemory; 39266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 39366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 39466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* QCamera3YUVChannel is used to handle flexible YUV streams that are directly 39566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * generated by hardware and given to frameworks without any postprocessing at HAL. 39666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * It is also used to handle input buffers that generate YUV outputs */ 39766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3YUVChannel : public QCamera3ProcessingChannel 39866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 39966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 40066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3YUVChannel(uint32_t cam_handle, 40166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t channel_handle, 40266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_ops_t *cam_ops, 40366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin channel_cb_routine cb_routine, 40466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_padding_info_t *paddingInfo, 40566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData, 40666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_t *stream, 40766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_type_t stream_type, 40866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t postprocess_mask, 40966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Channel *metadataChannel); 41066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ~QCamera3YUVChannel(); 41166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t initialize(cam_is_type_t isType); 4121687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan using QCamera3ProcessingChannel::request; 41366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t request(buffer_handle_t *buffer, 41466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frameNumber, 41566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t* pInputBuffer, 41666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t* metadata, bool &needMetadata); 41766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual reprocess_type_t getReprocessType(); 41866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 41966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream); 42066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void putStreamBufs(); 42166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void reprocessCbRoutine(buffer_handle_t *resultBuffer, 42266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t resultFrameNumber); 42366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 42466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 42566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 42666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frameNumber; 42766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool offlinePpFlag; 42866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin buffer_handle_t *output; 42966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_super_buf_t *callback_buffer; 43066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } PpInfo; 43166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 43266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Whether offline postprocessing is required for this channel 43366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mBypass; 43466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mFrameLen; 43566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 43666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Current edge, noise, and crop region setting 43766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_edge_application_t mEdgeMode; 43866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mNoiseRedMode; 43966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_crop_region_t mCropRegion; 44066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 44166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Mutex to protect mOfflinePpFlagMap and mFreeHeapBufferList 44266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Mutex mOfflinePpLock; 44366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Map between free number and whether the request needs to be 44466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // postprocessed. 44566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin List<PpInfo> mOfflinePpInfoList; 44666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Heap buffer index list 44766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin List<uint32_t> mFreeHeapBufferList; 44866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 44966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 45066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool needsFramePostprocessing(metadata_buffer_t* meta); 45166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t handleOfflinePpCallback(uint32_t resultFrameNumber, 45266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Vector<mm_camera_super_buf_t *>& pendingCbs); 45366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 45466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 45566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* QCamera3PicChannel is for JPEG stream, which contains a YUV stream generated 45666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * by the hardware, and encoded to a JPEG stream */ 45766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3PicChannel : public QCamera3ProcessingChannel 45866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 45966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 46066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3PicChannel(uint32_t cam_handle, 46166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t channel_handle, 46266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_ops_t *cam_ops, 46366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin channel_cb_routine cb_routine, 46466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_padding_info_t *paddingInfo, 46566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData, 46666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_t *stream, 46766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t postprocess_mask, 46866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool is4KVideo, 46966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isInputStreamConfigured, 47066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Channel *metadataChannel, 47166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t numBuffers = MAX_INFLIGHT_REQUESTS); 47266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ~QCamera3PicChannel(); 47366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 47466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t initialize(cam_is_type_t isType); 47566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t flush(); 47666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t request(buffer_handle_t *buffer, 47766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frameNumber, 47866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t* pInputBuffer, 47966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t* metadata); 48066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 48166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream); 48266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 48366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual QCamera3StreamMem *getStreamBufs(uint32_t le); 48466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void putStreamBufs(); 48566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual reprocess_type_t getReprocessType(); 48666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 48766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Exif *getExifData(metadata_buffer_t *metadata, 48866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin jpeg_settings_t *jpeg_settings); 48966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void overrideYuvSize(uint32_t width, uint32_t height); 49066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void jpegEvtHandle(jpeg_job_status_t status, 49166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t /*client_hdl*/, 49266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t jobId, 49366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_output_t *p_output, 49466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 49566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void dataNotifyCB(mm_camera_super_buf_t *recvd_frame, 49666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 49766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 49866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 49966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t queueJpegSetting(uint32_t out_buf_index, metadata_buffer_t *metadata); 50066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 50166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 50266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t m_max_pic_dim; 50366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 50466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 50566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mNumSnapshotBufs; 50666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mYuvWidth, mYuvHeight; 50766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t mCurrentBufIndex; 50866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mInputBufferHint; 50966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3StreamMem *mYuvMemory; 51066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Keep a list of free buffers 51166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Mutex mFreeBuffersLock; 51266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin List<uint32_t> mFreeBufferList; 51366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mFrameLen; 51466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 51566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 51666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// reprocess channel class 51766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3ReprocessChannel : public QCamera3Channel 51866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 51966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 52066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3ReprocessChannel(uint32_t cam_handle, 52166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t channel_handle, 52266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_ops_t *cam_ops, 52366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin channel_cb_routine cb_routine, 52466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_padding_info_t *paddingInfo, 52566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t postprocess_mask, 52666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData, void *ch_hdl); 52766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3ReprocessChannel(); 52866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual ~QCamera3ReprocessChannel(); 52966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // offline reprocess 53066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t start(); 53166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t stop(); 53266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t doReprocessOffline(qcamera_fwk_input_pp_data_t *frame, 53366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isPriorityFrame = false); 53466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t doReprocess(int buf_fd, size_t buf_length, int32_t &ret_val, 53566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_super_buf_t *meta_buf); 53666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t overrideMetadata(qcamera_hal3_pp_buffer_t *pp_buffer, 53766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_buf_def_t *meta_buffer, 53866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin jpeg_settings_t *jpeg_settings, 53966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin qcamera_fwk_input_pp_data_t &fwk_frame); 54066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t overrideFwkMetadata(qcamera_fwk_input_pp_data_t *frame); 54166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual QCamera3StreamMem *getStreamBufs(uint32_t len); 54266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void putStreamBufs(); 54366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t initialize(cam_is_type_t isType); 54466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t unmapOfflineBuffers(bool all); 54566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t bufDone(mm_camera_super_buf_t *recvd_frame); 54666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 54766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream); 54866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void dataNotifyCB(mm_camera_super_buf_t *recvd_frame, 54966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void* userdata); 55066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addReprocStreamsFromSource(cam_pp_feature_config_t &pp_config, 55166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const reprocess_config_t &src_config, 55266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_is_type_t is_type, 55366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Channel *pMetaChannel); 55466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *getStreamBySrcHandle(uint32_t srcHandle); 55566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *getSrcStreamBySrcHandle(uint32_t srcHandle); 55666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t registerBuffer(buffer_handle_t * buffer, cam_is_type_t isType); 55766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 55866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 55966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *inputChHandle; 56066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 56166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 56266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 56366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream; 56466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_mapping_buf_type type; 56566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t index; 56666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } OfflineBuffer; 56766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 56866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t resetToCamPerfNormal(uint32_t frameNumber); 56966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin android::List<OfflineBuffer> mOfflineBuffers; 57066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin android::List<OfflineBuffer> mOfflineMetaBuffers; 57166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t mOfflineBuffersIndex; 57266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t mOfflineMetaIndex; 57366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mFrameLen; 57466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Mutex mFreeBuffersLock; // Lock for free heap buffers 57566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin List<int32_t> mFreeBufferList; // Free heap buffers list 57666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin reprocess_type_t mReprocessType; 57766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mSrcStreamHandles[MAX_STREAM_NUM_IN_BUNDLE]; 57866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3ProcessingChannel *m_pSrcChannel; // ptr to source channel for reprocess 57966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Channel *m_pMetaChannel; 58066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3StreamMem *mMemory; 58166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3StreamMem mGrallocMemory; 58266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Vector<uint32_t> mPriorityFrames; 58366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Mutex mPriorityFramesLock; 58466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mReprocessPerfMode; 58566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 58666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 58766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 58866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* QCamera3SupportChannel is for HAL internal consumption only */ 58966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3SupportChannel : public QCamera3Channel 59066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 59166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 59266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3SupportChannel(uint32_t cam_handle, 59366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t channel_handle, 59466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_ops_t *cam_ops, 59566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_padding_info_t *paddingInfo, 59666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t postprocess_mask, 59766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_type_t streamType, 59866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t *dim, 59966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_format_t streamFormat, 60066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t hw_analysis_supported, 60166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData, 60266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t numBuffers = MIN_STREAMING_BUFFER_NUM 60366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ); 60466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual ~QCamera3SupportChannel(); 60566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 60666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t initialize(cam_is_type_t isType); 60766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 60866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber); 60966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame, 61066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Stream *stream); 61166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 61266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual QCamera3StreamMem *getStreamBufs(uint32_t le); 61366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void putStreamBufs(); 61466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t registerBuffer(buffer_handle_t * /*buffer*/, cam_is_type_t /*isType*/) 61566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { return NO_ERROR; }; 61666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 61766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static cam_dimension_t kDim; 61866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 61966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3StreamMem *mMemory; 62066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t mDim; 62166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_type_t mStreamType; 62266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_format_t mStreamFormat; 62366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 62466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 62566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; // namespace qcamera 62666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 62766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif /* __QCAMERA_CHANNEL_H__ */ 628