You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.8 KiB
113 lines
3.8 KiB
/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. |
|
* |
|
* Redistribution and use in source and binary forms, with or without |
|
* modification, are permitted provided that the following conditions are |
|
* met: |
|
* * Redistributions of source code must retain the above copyright |
|
* notice, this list of conditions and the following disclaimer. |
|
* * Redistributions in binary form must reproduce the above |
|
* copyright notice, this list of conditions and the following |
|
* disclaimer in the documentation and/or other materials provided |
|
* with the distribution. |
|
* * Neither the name of The Linux Foundation nor the names of its |
|
* contributors may be used to endorse or promote products derived |
|
* from this software without specific prior written permission. |
|
* |
|
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED |
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT |
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS |
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE |
|
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN |
|
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
* |
|
*/ |
|
|
|
#ifndef __QCAMERA_DUAL_FOV_PP_H__ |
|
#define __QCAMERA_DUAL_FOV_PP_H__ |
|
|
|
// Camera dependencies |
|
#include "QCameraHALPP.h" |
|
|
|
#define WIDE_TELE_CAMERA_NUMBER 2 |
|
enum halPPInputType { |
|
WIDE_INPUT = 0, |
|
TELE_INPUT = 1 |
|
}; |
|
|
|
enum dualfov_af_status_t { |
|
AF_STATUS_VALID, |
|
AF_STATUS_INVALID |
|
}; |
|
|
|
typedef struct _cam_frame_size_t { |
|
uint32_t width; |
|
uint32_t height; |
|
uint32_t stride; |
|
uint32_t scanline; |
|
uint32_t frame_len; |
|
} cam_frame_size_t; |
|
|
|
typedef struct _dualfov_input_params_t { |
|
cam_frame_size_t wide; |
|
cam_frame_size_t tele; |
|
|
|
uint32_t user_zoom; |
|
|
|
dualfov_af_status_t af_status; |
|
} dualfov_input_params_t; |
|
|
|
typedef struct _dualfov_output_params_t { |
|
cam_frame_size_t out; |
|
uint32_t result; |
|
} dualfov_output_params_t; |
|
|
|
|
|
namespace qcamera { |
|
|
|
class QCameraDualFOVPP : public QCameraHALPP |
|
{ |
|
public: |
|
QCameraDualFOVPP(); |
|
~QCameraDualFOVPP(); |
|
int32_t init(halPPBufNotify bufNotifyCb, halPPGetOutput getOutputCb, void *pUserData, |
|
void *pStaticParam); |
|
int32_t deinit(); |
|
int32_t start(); |
|
int32_t feedInput(qcamera_hal_pp_data_t *pInputData); |
|
int32_t feedOutput(qcamera_hal_pp_data_t *pOutputData); |
|
int32_t process(); |
|
protected: |
|
bool canProcess(); |
|
private: |
|
mm_camera_buf_def_t* getSnapshotBuf(qcamera_hal_pp_data_t* pData, |
|
QCameraStream* &pSnapshotStream); |
|
mm_camera_buf_def_t* getMetadataBuf(qcamera_hal_pp_data_t* pData, |
|
QCameraStream* &pMetadataStream); |
|
void getInputParams(mm_camera_buf_def_t *pMainMetaBuf, mm_camera_buf_def_t *pAuxMetaBuf, |
|
QCameraStream* pMainSnapshotStream, QCameraStream* pAuxSnapshotStream, |
|
dualfov_input_params_t& inParams); |
|
int32_t doDualFovPPInit(); |
|
int32_t doDualFovPPProcess(const uint8_t* pWide, const uint8_t* pTele, |
|
dualfov_input_params_t inParams, uint8_t* pOut); |
|
uint32_t getUserZoomRatio(int32_t zoom_level); |
|
void dumpYUVtoFile(const uint8_t* pBuf, cam_frame_len_offset_t offset, uint32_t idx, |
|
const char* name_prefix); |
|
void dumpInputParams(const dualfov_input_params_t& p); |
|
void dumpOISData(metadata_buffer_t* pMetadata); |
|
|
|
|
|
private: |
|
void *m_dlHandle; |
|
const cam_capability_t *m_pCaps; |
|
}; // QCameraDualFOVPP class |
|
}; // namespace qcamera |
|
|
|
#endif /* __QCAMERA_DUAL_FOV_PP_H__ */ |
|
|
|
|
|
|
|
|