diff options
author | Prateek Chaubey <chaubeyprateek@gmail.com> | 2018-01-07 20:55:14 +0530 |
---|---|---|
committer | Davide Garberi <dade.garberi@gmail.com> | 2018-01-19 14:09:15 +0100 |
commit | 6616278131edd80a12545085e06ee6b0e0a0a788 (patch) | |
tree | 0aef88ed11809a9d67f6abe4dc2ff782a14737e2 /camera/QCamera2/util/QCameraCommon.cpp | |
parent | cc4ccf34871da343111bf68d16ba4e4c67cac1dc (diff) |
msm8996-common: zuk: Import OSS Camera HAL
Tag: LA.HB.1.3.2-32600-8x96.0
Signed-off-by: Davide Garberi <dade.garberi@gmail.com>
Diffstat (limited to '')
-rw-r--r-- | camera/QCamera2/util/QCameraCommon.cpp | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/camera/QCamera2/util/QCameraCommon.cpp b/camera/QCamera2/util/QCameraCommon.cpp new file mode 100644 index 0000000..0cc2654 --- /dev/null +++ b/camera/QCamera2/util/QCameraCommon.cpp @@ -0,0 +1,226 @@ +/* Copyright (c) 2016, 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. +* +*/ + +#define LOG_TAG "QCameraCommon" + +// System dependencies +#include <utils/Errors.h> +#include <stdlib.h> +#include <string.h> +#include <utils/Log.h> + +// Camera dependencies +#include "QCameraCommon.h" + +using namespace android; + +namespace qcamera { + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +/*=========================================================================== + * FUNCTION : QCameraCommon + * + * DESCRIPTION: default constructor of QCameraCommon + * + * PARAMETERS : None + * + * RETURN : None + *==========================================================================*/ +QCameraCommon::QCameraCommon() : + m_pCapability(NULL) +{ +} + +/*=========================================================================== + * FUNCTION : ~QCameraCommon + * + * DESCRIPTION: destructor of QCameraCommon + * + * PARAMETERS : None + * + * RETURN : None + *==========================================================================*/ +QCameraCommon::~QCameraCommon() +{ +} + +/*=========================================================================== + * FUNCTION : init + * + * DESCRIPTION: Init function for QCameraCommon + * + * PARAMETERS : + * @pCapability : Capabilities + * + * RETURN : int32_t type of status + * NO_ERROR -- success + * none-zero failure code + *==========================================================================*/ +int32_t QCameraCommon::init(cam_capability_t *pCapability) +{ + m_pCapability = pCapability; + + return NO_ERROR; +} + +/*=========================================================================== + * FUNCTION : calculateLCM + * + * DESCRIPTION: Get the LCM of 2 numbers + * + * PARAMETERS : + * @num1 : First number + * @num2 : second number + * + * RETURN : int32_t type (LCM) + * + *==========================================================================*/ +uint32_t QCameraCommon::calculateLCM(int32_t num1, int32_t num2) +{ + uint32_t lcm = 0; + uint32_t temp = 0; + + if ((num1 < 1) && (num2 < 1)) { + return 0; + } else if (num1 < 1) { + return num2; + } else if (num2 < 1) { + return num1; + } + + if (num1 > num2) { + lcm = num1; + } else { + lcm = num2; + } + temp = lcm; + + while (1) { + if (((lcm % num1) == 0) && ((lcm % num2) == 0)) { + break; + } + lcm += temp; + } + return lcm; +} + +/*=========================================================================== + * FUNCTION : getAnalysisInfo + * + * DESCRIPTION: Get the Analysis information based on + * current mode and feature mask + * + * PARAMETERS : + * @fdVideoEnabled : Whether fdVideo enabled currently + * @hal3 : Whether hal3 or hal1 + * @featureMask : Feature mask + * @pAnalysis_info : Analysis info to be filled + * + * RETURN : int32_t type of status + * NO_ERROR -- success + * none-zero failure code + *==========================================================================*/ +int32_t QCameraCommon::getAnalysisInfo( + bool fdVideoEnabled, + bool hal3, + cam_feature_mask_t featureMask, + cam_analysis_info_t *pAnalysisInfo) +{ + if (!pAnalysisInfo) { + return BAD_VALUE; + } + + pAnalysisInfo->valid = 0; + + if ((fdVideoEnabled == TRUE) && (hal3 == FALSE) && + (m_pCapability->analysis_info[CAM_ANALYSIS_INFO_FD_VIDEO].hw_analysis_supported) && + (m_pCapability->analysis_info[CAM_ANALYSIS_INFO_FD_VIDEO].valid)) { + *pAnalysisInfo = + m_pCapability->analysis_info[CAM_ANALYSIS_INFO_FD_VIDEO]; + } else if (m_pCapability->analysis_info[CAM_ANALYSIS_INFO_FD_STILL].valid) { + *pAnalysisInfo = + m_pCapability->analysis_info[CAM_ANALYSIS_INFO_FD_STILL]; + if (hal3 == TRUE) { + pAnalysisInfo->analysis_max_res = pAnalysisInfo->analysis_recommended_res; + } + } + + if ((featureMask & CAM_QCOM_FEATURE_PAAF) && + (m_pCapability->analysis_info[CAM_ANALYSIS_INFO_PAAF].valid)) { + cam_analysis_info_t *pPaafInfo = + &m_pCapability->analysis_info[CAM_ANALYSIS_INFO_PAAF]; + + if (!pAnalysisInfo->valid) { + *pAnalysisInfo = *pPaafInfo; + } else { + pAnalysisInfo->analysis_max_res.width = + MAX(pAnalysisInfo->analysis_max_res.width, + pPaafInfo->analysis_max_res.width); + pAnalysisInfo->analysis_max_res.height = + MAX(pAnalysisInfo->analysis_max_res.height, + pPaafInfo->analysis_max_res.height); + pAnalysisInfo->analysis_padding_info.height_padding = + calculateLCM(pAnalysisInfo->analysis_padding_info.height_padding, + pPaafInfo->analysis_padding_info.height_padding); + pAnalysisInfo->analysis_padding_info.width_padding = + calculateLCM(pAnalysisInfo->analysis_padding_info.width_padding, + pPaafInfo->analysis_padding_info.width_padding); + pAnalysisInfo->analysis_padding_info.plane_padding = + calculateLCM(pAnalysisInfo->analysis_padding_info.plane_padding, + pPaafInfo->analysis_padding_info.plane_padding); + pAnalysisInfo->analysis_padding_info.min_stride = + MAX(pAnalysisInfo->analysis_padding_info.min_stride, + pPaafInfo->analysis_padding_info.min_stride); + pAnalysisInfo->analysis_padding_info.min_stride = + ALIGN(pAnalysisInfo->analysis_padding_info.min_stride, + pAnalysisInfo->analysis_padding_info.width_padding); + + pAnalysisInfo->analysis_padding_info.min_scanline = + MAX(pAnalysisInfo->analysis_padding_info.min_scanline, + pPaafInfo->analysis_padding_info.min_scanline); + pAnalysisInfo->analysis_padding_info.min_scanline = + ALIGN(pAnalysisInfo->analysis_padding_info.min_scanline, + pAnalysisInfo->analysis_padding_info.height_padding); + + pAnalysisInfo->hw_analysis_supported |= + pPaafInfo->hw_analysis_supported; + } + } + + return pAnalysisInfo->valid ? NO_ERROR : BAD_VALUE; +} + +}; // namespace qcamera |