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