154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. 254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * Redistribution and use in source and binary forms, with or without 454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * modification, are permitted provided that the following conditions are 554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * met: 654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * * Redistributions of source code must retain the above copyright 754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * notice, this list of conditions and the following disclaimer. 854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * * Redistributions in binary form must reproduce the above 954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * copyright notice, this list of conditions and the following 1054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * disclaimer in the documentation and/or other materials provided 1154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * with the distribution. 1254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * * Neither the name of The Linux Foundation nor the names of its 1354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * contributors may be used to endorse or promote products derived 1454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * from this software without specific prior written permission. 1554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 1654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 1954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 2854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel */ 2954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 3054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel#ifndef __QCAMERA_DUAL_FOV_PP_H__ 3154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel#define __QCAMERA_DUAL_FOV_PP_H__ 3254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 3354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel// Camera dependencies 3454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel#include "QCameraHALPP.h" 3554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 3654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel#define WIDE_TELE_CAMERA_NUMBER 2 3754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelenum halPPInputType { 3854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel WIDE_INPUT = 0, 3954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel TELE_INPUT = 1 4054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel}; 4154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 4254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelenum dualfov_af_status_t { 4354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel AF_STATUS_VALID, 4454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel AF_STATUS_INVALID 4554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel}; 4654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 4754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudeltypedef struct _cam_frame_size_t { 4854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel uint32_t width; 4954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel uint32_t height; 5054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel uint32_t stride; 5154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel uint32_t scanline; 5254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel uint32_t frame_len; 5354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} cam_frame_size_t; 5454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 5554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudeltypedef struct _dualfov_input_params_t { 5654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel cam_frame_size_t wide; 5754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel cam_frame_size_t tele; 5854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 5954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel uint32_t user_zoom; 6054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 6154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel dualfov_af_status_t af_status; 6254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} dualfov_input_params_t; 6354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 6454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudeltypedef struct _dualfov_output_params_t { 6554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel cam_frame_size_t out; 6654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel uint32_t result; 6754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} dualfov_output_params_t; 6854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 6954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 7054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelnamespace qcamera { 7154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 7254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelclass QCameraDualFOVPP : public QCameraHALPP 7354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 7454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelpublic: 7554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel QCameraDualFOVPP(); 7654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel ~QCameraDualFOVPP(); 7754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t init(halPPBufNotify bufNotifyCb, halPPGetOutput getOutputCb, void *pUserData, 7854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel void *pStaticParam); 7954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t deinit(); 8054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t start(); 8154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t feedInput(qcamera_hal_pp_data_t *pInputData); 8254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t feedOutput(qcamera_hal_pp_data_t *pOutputData); 8354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t process(); 8454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelprotected: 8554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel bool canProcess(); 8654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelprivate: 8754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel mm_camera_buf_def_t* getSnapshotBuf(qcamera_hal_pp_data_t* pData, 8854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel QCameraStream* &pSnapshotStream); 8954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel mm_camera_buf_def_t* getMetadataBuf(qcamera_hal_pp_data_t* pData, 9054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel QCameraStream* &pMetadataStream); 9154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel void getInputParams(mm_camera_buf_def_t *pMainMetaBuf, mm_camera_buf_def_t *pAuxMetaBuf, 9254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel QCameraStream* pMainSnapshotStream, QCameraStream* pAuxSnapshotStream, 9354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel dualfov_input_params_t& inParams); 9454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t doDualFovPPInit(); 9554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t doDualFovPPProcess(const uint8_t* pWide, const uint8_t* pTele, 9654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel dualfov_input_params_t inParams, uint8_t* pOut); 9754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel uint32_t getUserZoomRatio(int32_t zoom_level); 9854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel void dumpYUVtoFile(const uint8_t* pBuf, cam_frame_len_offset_t offset, uint32_t idx, 9954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel const char* name_prefix); 10054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel void dumpInputParams(const dualfov_input_params_t& p); 10154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel void dumpOISData(metadata_buffer_t* pMetadata); 10254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 10354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 10454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelprivate: 10554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel void *m_dlHandle; 10654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel const cam_capability_t *m_pCaps; 10754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel}; // QCameraDualFOVPP class 10854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel}; // namespace qcamera 10954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 11054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel#endif /* __QCAMERA_DUAL_FOV_PP_H__ */ 11154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 11254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 11354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 114