154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/* Copyright (c) 2016, 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#define LOG_TAG "QCameraHALPP" 3154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 3254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel// Camera dependencies 33fd5889fd30b649b3b881f6948e970c38fc1a2e1aVineeta Srivastava#include <sys/stat.h> 3454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel#include "QCameraTrace.h" 3554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel#include "QCameraHALPP.h" 3654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel#include "QCameraQueue.h" 3754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelextern "C" { 3854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel#include "mm_camera_dbg.h" 3954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 4054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 4154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelnamespace qcamera { 4254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 4354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 4454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : QCameraHALPP 4554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 4654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: constructor of QCameraHALPP. 4754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 4854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : None 4954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 5054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : None 5154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 5254dc9783295b20e33ec11e132d98a1b8efbf254cThierry StrudelQCameraHALPP::QCameraHALPP() 5354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel : m_iuputQ(releaseInputDataCb, this), 5454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_outgoingQ(releaseOngoingDataCb, this), 5554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_halPPBufNotifyCB(NULL), 5654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_halPPGetOutputCB(NULL), 5754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_pQCameraPostProc(NULL) 5854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 5954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 6054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 6154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 6254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : ~QCameraHALPP 6354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 6454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: destructor of QCameraHALPP. 6554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 6654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : None 6754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 6854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : None 6954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 7054dc9783295b20e33ec11e132d98a1b8efbf254cThierry StrudelQCameraHALPP::~QCameraHALPP() 7154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 7254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 7354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 7454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 7554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : init 7654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 7754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: initialization of QCameraHALPP 7854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 7954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : 8054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * @bufNotifyCb : call back function after HALPP process done and return frame 8154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * @getOutputCb : call back function to request output buffer 8254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * @pUserData : Parent of HALPP, i.e. QCameraPostProc 8354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 8454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : int32_t type of status 8554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * NO_ERROR -- success 8654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * none-zero failure code 8754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 8854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelint32_t QCameraHALPP::init(halPPBufNotify bufNotifyCb, halPPGetOutput getOutputCb, void *pUserData) 8954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 9054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t rc = NO_ERROR; 9154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel // connect HALPP call back function 9254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_halPPBufNotifyCB = bufNotifyCb; 9354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_halPPGetOutputCB = getOutputCb; 9454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_pQCameraPostProc = (QCameraPostProcessor*)pUserData; 9554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel return rc; 9654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 9754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 9854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 9954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : deinit 10054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 10154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: de-initialization of QCameraHALPP 10254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 10354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : 10454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 10554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : int32_t type of status 10654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * NO_ERROR -- success 10754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * none-zero failure code 10854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 10954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelint32_t QCameraHALPP::deinit() 11054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 11154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t rc = NO_ERROR; 11254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_halPPBufNotifyCB = NULL; 11354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_halPPGetOutputCB = NULL; 11454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_pQCameraPostProc = NULL; 11554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel return rc; 11654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 11754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 11854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 11954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : start 12054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 12154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: starting QCameraHALPP 12254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 12354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : 12454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 12554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : int32_t type of status 12654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * NO_ERROR -- success 12754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * none-zero failure code 12854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 12954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelint32_t QCameraHALPP::start() 13054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 13154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t rc = NO_ERROR; 13254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel LOGD("E"); 13354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 13454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel LOGD("X"); 13554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel return rc; 13654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 13754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 13854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 13954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : stop 14054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 14154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: stop QCameraHALPP 14254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 14354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : 14454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 14554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : int32_t type of status 14654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * NO_ERROR -- success 14754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * none-zero failure code 14854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 14954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelint32_t QCameraHALPP::stop() 15054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 15154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t rc = NO_ERROR; 15254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel LOGD("E"); 15354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 15454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel LOGD("X"); 15554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel return rc; 15654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 15754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 15854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 15954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : flushQ 16054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 16154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: flush m_iuputQ and m_outgoingQ. 16254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 16354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : None 16454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 16554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : None 16654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 16754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelint32_t QCameraHALPP::flushQ() 16854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 16954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t rc = NO_ERROR; 17054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_iuputQ.flush(); 17154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_outgoingQ.flush(); 17254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel return rc; 17354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 17454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 17554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 17654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : initQ 17754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 17854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: init m_iuputQ and m_outgoingQ. 17954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 18054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : None 18154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 18254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : None 18354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 18454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelint32_t QCameraHALPP::initQ() 18554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 18654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int32_t rc = NO_ERROR; 18754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_iuputQ.init(); 18854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_outgoingQ.init(); 18954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel return rc; 19054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 19154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 19254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 19354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : getFrameVector 19454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 19554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: get vector of input frames from map 19654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 19754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : 19854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * @frameIndex : frame index (key of the map) 19954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 20054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : vector pointer 20154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 20254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelstd::vector<qcamera_hal_pp_data_t*>* 20354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel QCameraHALPP::getFrameVector(uint32_t frameIndex) 20454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 20554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel std::vector<qcamera_hal_pp_data_t*> *pVector = NULL; 20654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel // Search vector of input frames in frame map 20754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (m_frameMap.find(frameIndex) != m_frameMap.end()) { 20854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pVector = m_frameMap[frameIndex]; 20954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 21054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel return pVector; 21154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 21254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 21354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 21454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : releaseData 21554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 21654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: release buffer in qcamera_hal_pp_data_t 21754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 21854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : 21954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * @pData : hal pp data 22054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 22154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : None 22254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 22354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelvoid QCameraHALPP::releaseData(qcamera_hal_pp_data_t *pData) 22454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 22554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (pData) { 22654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (pData->src_reproc_frame) { 22754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (!pData->reproc_frame_release) { 22854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_pQCameraPostProc->releaseSuperBuf(pData->src_reproc_frame); 22954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 23054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel free(pData->src_reproc_frame); 23154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pData->src_reproc_frame = NULL; 23254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 23354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel mm_camera_super_buf_t *frame = pData->frame; 23454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (frame) { 23554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (pData->halPPAllocatedBuf && pData->bufs) { 23654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel free(pData->bufs); 23754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } else { 23854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel m_pQCameraPostProc->releaseSuperBuf(frame); 23954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 24054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel free(frame); 24154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel frame = NULL; 24254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 24354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (pData->snapshot_heap) { 24454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pData->snapshot_heap->deallocate(); 24554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel delete pData->snapshot_heap; 24654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pData->snapshot_heap = NULL; 24754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 24854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (pData->metadata_heap) { 24954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pData->metadata_heap->deallocate(); 25054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel delete pData->metadata_heap; 25154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pData->metadata_heap = NULL; 25254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 25354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (NULL != pData->src_reproc_bufs) { 25454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel delete [] pData->src_reproc_bufs; 25554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 25654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if ((pData->offline_reproc_buf != NULL) 25754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel && (pData->offline_buffer)) { 25854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel free(pData->offline_reproc_buf); 25954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pData->offline_reproc_buf = NULL; 26054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pData->offline_buffer = false; 26154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 26254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 26354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 26454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 26554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 26654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : releaseOngoingDataCb 26754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 26854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: callback function to release ongoing data node 26954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 27054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : 27154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * @pData : ptr to ongoing job data 27254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * @pUserData : user data ptr (QCameraHALPP) 27354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 27454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : None 27554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 27654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelvoid QCameraHALPP::releaseOngoingDataCb(void *pData, void *pUserData) 27754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 27854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (pUserData != NULL && pData != NULL) { 27954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel QCameraHALPP *pme = (QCameraHALPP *)pUserData; 28054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pme->releaseData((qcamera_hal_pp_data_t*)pData); 28154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 28254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 28354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 28454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel/*=========================================================================== 28554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * FUNCTION : releaseInputDataCb 28654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 28754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * DESCRIPTION: callback function to release input data node 28854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 28954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * PARAMETERS : 29054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * @pData : ptr to input job data 29154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * @pUserData : user data ptr (QCameraHALPP) 29254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * 29354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel * RETURN : None 29454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel *==========================================================================*/ 29554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelvoid QCameraHALPP::releaseInputDataCb(void *pData, void *pUserData) 29654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 29754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (pUserData != NULL && pData != NULL) { 29854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel QCameraHALPP *pme = (QCameraHALPP *)pUserData; 29954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel // what enqueued to the input queue is just the frame index 30054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel // we need to use hash map to find the vector of frames and release the buffers 30154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel uint32_t *pFrameIndex = (uint32_t *)pData; 30254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel uint32_t frameIndex = *pFrameIndex; 30354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel std::vector<qcamera_hal_pp_data_t*> *pVector = pme->getFrameVector(frameIndex); 30454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (pVector != NULL) { 30554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel for (size_t i = 0; i < pVector->size(); i++) { 30654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (pVector->at(i) != NULL) { 30754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pme->releaseData(pVector->at(i)); 30854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 30954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 31054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel delete pVector; 31154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pVector = NULL; 31254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 31354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel delete pFrameIndex; 31454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel pFrameIndex = NULL; 31554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 31654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 31754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 31854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudelvoid QCameraHALPP::dumpYUVtoFile(const uint8_t* pBuf, const char *name, ssize_t buf_len) 31954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel{ 32054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel LOGD("E."); 32154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 32254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int file_fd = open(name, O_RDWR | O_CREAT, 0777); 32354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if (file_fd > 0) { 32454dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel fchmod(file_fd, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); 32554dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel ssize_t writen_bytes = 0; 32654dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel writen_bytes = write(file_fd, pBuf, buf_len); 32754dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel close(file_fd); 32854dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel LOGD("dump output frame to file: %s, size:%d", name, buf_len); 32954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 33054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 33154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel LOGD("X."); 33254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel} 33354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel 334fd5889fd30b649b3b881f6948e970c38fc1a2e1aVineeta Srivastava} // namespace qcamera 335