13d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. 23d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* 33d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* Redistribution and use in source and binary forms, with or without 43d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* modification, are permitted provided that the following conditions are 53d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* met: 63d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* * Redistributions of source code must retain the above copyright 73d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* notice, this list of conditions and the following disclaimer. 83d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* * Redistributions in binary form must reproduce the above 93d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* copyright notice, this list of conditions and the following 103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* disclaimer in the documentation and/or other materials provided 113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* with the distribution. 123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* * Neither the name of The Linux Foundation nor the names of its 133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* contributors may be used to endorse or promote products derived 143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* from this software without specific prior written permission. 153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* 163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel* 283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel*/ 293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define LOG_TAG "QCameraStateMachine" 313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// System dependencies 333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <utils/Errors.h> 343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <stdio.h> 353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// Camera dependencies 373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "QCamera2HWI.h" 383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "QCameraStateMachine.h" 393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelextern "C" { 413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "mm_camera_dbg.h" 423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelnamespace qcamera { 453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : smEvtProcRoutine 483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: Statemachine process thread routine to handle events 503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * in different state. 513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @data : ptr to QCameraStateMachine object 543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : none 563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid *QCameraStateMachine::smEvtProcRoutine(void *data) 583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int running = 1, ret; 603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCameraStateMachine *pme = (QCameraStateMachine *)data; 613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGH("E"); 633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel do { 643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel do { 653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ret = cam_sem_wait(&pme->cmd_sem); 663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (ret != 0 && errno != EINVAL) { 673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("cam_sem_wait error (%s)", 683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel strerror(errno)); 693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return NULL; 703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } while (ret != 0); 723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // we got notified about new cmd avail in cmd queue 743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // first check API cmd queue 753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_cmd_t *node = (qcamera_sm_cmd_t *)pme->api_queue.dequeue(); 763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (node == NULL) { 773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no API cmd, then check evt cmd queue 783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel node = (qcamera_sm_cmd_t *)pme->evt_queue.dequeue(); 793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (node != NULL) { 813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (node->cmd) { 823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_CMD_TYPE_API: 833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pme->stateMachine(node->evt, node->evt_payload); 843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // API is in a way sync call, so evt_payload is managed by HWI 853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no need to free payload for API 863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_CMD_TYPE_EVT: 883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pme->stateMachine(node->evt, node->evt_payload); 893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // EVT is async call, so payload need to be free after use 913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel free(node->evt_payload); 923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel node->evt_payload = NULL; 933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_CMD_TYPE_EXIT: 953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel running = 0; 963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel free(node); 1013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel node = NULL; 1023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } while (running); 1043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGH("X"); 1053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return NULL; 1063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 1093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : QCameraStateMachine 1103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: constructor of QCameraStateMachine. Will start process thread 1123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 1143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @ctrl : ptr to HWI object 1153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : none 1173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 1183d63919a23d7e7954e160c48c36713267106c3c2Thierry StrudelQCameraStateMachine::QCameraStateMachine(QCamera2HardwareInterface *ctrl) : 1193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel api_queue(), 1203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel evt_queue() 1213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent = ctrl; 1233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 1243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_pid = 0; 1253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_sem_init(&cmd_sem, 0); 1263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pthread_create(&cmd_pid, 1273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel NULL, 1283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel smEvtProcRoutine, 1293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel this); 1303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pthread_setname_np(cmd_pid, "CAM_stMachine"); 1313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_bDelayPreviewMsgs = false; 1323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_DelayedMsgs = 0; 1333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_RestoreZSL = TRUE; 1343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_bPreviewCallbackNeeded = TRUE; 1353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 1383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : ~QCameraStateMachine 1393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: desctructor of QCameraStateMachine. Will stop process thread. 1413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : none 1433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : none 1453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 1463d63919a23d7e7954e160c48c36713267106c3c2Thierry StrudelQCameraStateMachine::~QCameraStateMachine() 1473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_sem_destroy(&cmd_sem); 1493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 1523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : releaseThread 1533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: Sends an exit command and terminates the state machine thread 1553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : none 1573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : none 1593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 1603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid QCameraStateMachine::releaseThread() 1613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (cmd_pid != 0) { 1633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_cmd_t *node = 1643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_cmd_t *)malloc(sizeof(qcamera_sm_cmd_t)); 1653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NULL != node) { 1663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(node, 0, sizeof(qcamera_sm_cmd_t)); 1673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel node->cmd = QCAMERA_SM_CMD_TYPE_EXIT; 1683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (api_queue.enqueue((void *)node)) { 1703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_sem_post(&cmd_sem); 1713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 1723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel free(node); 1733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel node = NULL; 1743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* wait until cmd thread exits */ 1773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (pthread_join(cmd_pid, NULL) != 0) { 1783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("pthread dead already\n"); 1793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_pid = 0; 1823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 1863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : applyDelayedMsgs 1873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: Enable if needed any delayed message types 1893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : None 1913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 1923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 1933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 1943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 1953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::applyDelayedMsgs() 1963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t rc = NO_ERROR; 1983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_bDelayPreviewMsgs && m_DelayedMsgs) { 2003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->enableMsgType(m_DelayedMsgs); 2013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_bDelayPreviewMsgs = false; 2023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_DelayedMsgs = 0; 2033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else if (m_bDelayPreviewMsgs) { 2043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_bDelayPreviewMsgs = false; 2053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 2083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 2113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : procAPI 2123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: process incoming API request from framework layer. 2143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 2163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt : event to be processed 2173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @api_payload : API payload. Can be NULL if not needed. 2183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 2203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 2213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 2223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 2233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::procAPI(qcamera_sm_evt_enum_t evt, 2243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *api_payload) 2253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_cmd_t *node = 2273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_cmd_t *)malloc(sizeof(qcamera_sm_cmd_t)); 2283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NULL == node) { 2293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("No memory for qcamera_sm_cmd_t"); 2303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return NO_MEMORY; 2313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(node, 0, sizeof(qcamera_sm_cmd_t)); 2343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel node->cmd = QCAMERA_SM_CMD_TYPE_API; 2353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel node->evt = evt; 2363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel node->evt_payload = api_payload; 2373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (api_queue.enqueue((void *)node)) { 2383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_sem_post(&cmd_sem); 2393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return NO_ERROR; 2403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 2413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("API enqueue failed API = %d", evt); 2423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel free(node); 2433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return UNKNOWN_ERROR; 2443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 2483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : procEvt 2493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: process incoming envent from mm-camera-interface and 2513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * mm-jpeg-interface. 2523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 2543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt : event to be processed 2553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt_payload : event payload. Can be NULL if not needed. 2563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 2583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 2593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 2603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 2613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::procEvt(qcamera_sm_evt_enum_t evt, 2623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *evt_payload) 2633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_cmd_t *node = 2653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_cmd_t *)malloc(sizeof(qcamera_sm_cmd_t)); 2663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NULL == node) { 2673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("No memory for qcamera_sm_cmd_t"); 2683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return NO_MEMORY; 2693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(node, 0, sizeof(qcamera_sm_cmd_t)); 2723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel node->cmd = QCAMERA_SM_CMD_TYPE_EVT; 2733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel node->evt = evt; 2743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel node->evt_payload = evt_payload; 2753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (evt_queue.enqueue((void *)node)) { 2763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_sem_post(&cmd_sem); 2773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return NO_ERROR; 2783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 2793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("EVENT enqueue failed Event = %d", evt); 2803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel free(node); 2813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return UNKNOWN_ERROR; 2823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 2863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : stateMachine 2873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: finite state machine entry function. Depends on state, 2893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * incoming event will be handled differently. 2903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 2923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt : event to be processed 2933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @payload : event payload. Can be NULL if not needed. 2943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 2963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 2973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 2983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 2993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::stateMachine(qcamera_sm_evt_enum_t evt, void *payload) 3003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t rc = NO_ERROR; 3023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("m_state %d, event (%d)", m_state, evt); 3033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (m_state) { 3043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEW_STOPPED: 3053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = procEvtPreviewStoppedState(evt, payload); 3063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEW_READY: 3083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = procEvtPreviewReadyState(evt, payload); 3093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEWING: 3113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = procEvtPreviewingState(evt, payload); 3123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREPARE_SNAPSHOT: 3143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = procEvtPrepareSnapshotState(evt, payload); 3153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PIC_TAKING: 3173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = procEvtPicTakingState(evt, payload); 3183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_RECORDING: 3203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = procEvtRecordingState(evt, payload); 3213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_VIDEO_PIC_TAKING: 3233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = procEvtVideoPicTakingState(evt, payload); 3243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEW_PIC_TAKING: 3263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = procEvtPreviewPicTakingState(evt, payload); 3273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 3293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 3333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 3363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : procEvtPreviewStoppedState 3373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: finite state machine function to handle event in state of 3393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * QCAMERA_SM_STATE_PREVIEW_STOPPED. 3403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 3423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt : event to be processed 3433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @payload : event payload. Can be NULL if not needed. 3443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 3463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 3473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 3483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 3493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::procEvtPreviewStoppedState(qcamera_sm_evt_enum_t evt, 3503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *payload) 3513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t rc = NO_ERROR; 3533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_api_result_t result; 3543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(&result, 0, sizeof(qcamera_api_result_t)); 3553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("event (%d)", evt); 3573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (evt) { 3583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 3593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 3603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->setPreviewWindow((struct preview_stream_ops *)payload); 3613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 3623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 3633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 3643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 3653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_CALLBACKS: 3683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 3693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_setcb_payload_t *setcbs = 3703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_setcb_payload_t *)payload; 3713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->setCallBacks(setcbs->notify_cb, 3723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb, 3733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb_timestamp, 3743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->get_memory, 3753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->user); 3763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 3773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 3783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 3793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 3803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 3833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 3843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 3853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 3863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 3873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 3883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->enableMsgType(*((int32_t *)payload)); 3893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 3913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 3923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 3933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 3943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 3973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 3983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 3993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 4003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 4013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 4023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->disableMsgType(*((int32_t *)payload)); 4033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 4053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 4063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 4083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 4103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 4113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 4123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int enabled = m_parent->msgTypeEnabled(*((int32_t *)payload)); 4133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 4143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 4153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 4163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = enabled; 4173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 4183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 4203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS: 4213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 4223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel bool needRestart = false; 4233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 4253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 4263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 4273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 4283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateParameters((char*)payload, needRestart); 4293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 4313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 4323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 4343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 4363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_STOP: 4373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 4383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->m_memoryPool.clear(); 4393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 4403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 4413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 4433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 4453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_COMMIT: 4463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 4473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->commitParameterChanges(); 4483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 4493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 4503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 4523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 4543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_RESTART: 4553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 4563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->setNeedRestart(false); 4573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 4583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 4593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 4613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 4633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_GET_PARAMS: 4643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 4653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 4663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 4673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 4683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char* nullParams = (char *)malloc(1); 4693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (nullParams) { 4703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(nullParams, 0, 1); 4713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.params = nullParams; 4733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 4743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.params = m_parent->getParameters(); 4753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = result.params ? NO_ERROR : UNKNOWN_ERROR; 4773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 4783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 4793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 4803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 4813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 4833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PUT_PARAMS: 4843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 4853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->putParameters((char*)payload); 4863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 4873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 4883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 4903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 4923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_PREVIEW: 4933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 4943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 4953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 4963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 4973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 4983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 4993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 5013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //prepare preview success, move to ready state 5023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_READY; 5033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 5053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 5063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 5073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 5083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 5103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_PREVIEW: 5113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 5123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 5133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 5143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 5153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else if (m_parent->mPreviewWindow == NULL) { 5163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 5173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(rc == NO_ERROR) { 5183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // preview window is not set yet, move to previewReady state 5193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_READY; 5203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 5213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("preparePreview failed"); 5223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 5243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 5253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 5263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 5273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 5283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 5293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 5303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 5313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // start preview success, move to previewing state 5323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 5333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 5373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 5383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 5393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 5403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 5423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 5433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 5443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 5453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 5463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 5473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 5483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 5493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 5513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 5523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 5533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 5543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 5553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 5563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 5573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 5603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 5613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 5623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 5633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 5653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_PREVIEW: 5663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 5673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no op needed here 5683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("already in preview stopped state, do nothing"); 5693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = NO_ERROR; 5703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 5713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 5723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 5733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 5753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREVIEW_ENABLED: 5763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RECORDING_ENABLED: 5773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 5783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = NO_ERROR; 5793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 5803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 5813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 0; 5823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 5833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 5853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE: 5863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 5873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->release(); 5883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 5893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 5903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 5913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 5923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 5943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 5953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 5963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->storeMetaDataInBuffers(*((int *)payload)); 5973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 5983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 5993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 6013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 6033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DUMP: 6043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 6053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 6063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 6073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 6083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 6093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->dump(*((int *)payload)); 6103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 6123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 6133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 6153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 6173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SEND_COMMAND: 6183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 6193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 6203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 6213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 6223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 6233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_command_payload_t *cmd_payload = 6243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_command_payload_t *)payload; 6253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->sendCommand(cmd_payload->cmd, 6263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg1, 6273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg2); 6283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 6303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 6313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 6333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 635e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 636e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel { 637e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel LOGW("Free video handle %d %d", evt, m_state); 638e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel QCameraVideoMemory::closeNativeHandle((const void *)payload); 639e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } 6403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_START_RECORDING: 6413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_STOP_PREVIEW: 6423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_START_PREVIEW: 6433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_RECORDING: 6443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_RECORDING: 6453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 6463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_TAKE_PICTURE: 6473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_TAKE_PICTURE: 6483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 6493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 6503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 6513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 6523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 6533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 6553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 6573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_AUTO_FOCUS: 6583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_CANCEL_PICTURE: 6593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 6603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no op needed here 6613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("No ops for evt(%d) in state(%d)", evt, m_state); 6623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = NO_ERROR; 6633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 6643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 6663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 6683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 6693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 6703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 6713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 6723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 6733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 6743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelAutoFocus(); 6753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 6773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 6783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 6803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 6823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_REG_FACE_IMAGE: 6833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 6843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t faceID = 0; 6853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_reg_face_payload_t *reg_payload = 6863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_reg_face_payload_t *)payload; 6873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->registerFaceImage(reg_payload->img_ptr, 6883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel reg_payload->config, 6893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel faceID); 6903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 6913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 6923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 6933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.handle = faceID; 6943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 6953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 6973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_THERMAL_NOTIFY: 6983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 6993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 7003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 7013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 7023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 7033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateThermalLevel(payload); 7043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 7073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_NOTIFY: 7083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 7093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 7103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (cam_evt->server_event_type) { 7113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case CAM_EVENT_TYPE_DAEMON_DIED: 7123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 7133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 7143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel CAMERA_ERROR_SERVER_DIED, 7153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 0); 7163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 7183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 7193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Invalid internal event %d in state(%d)", 7203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_evt->server_event_type, m_state); 7213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 7223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 7253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SNAPSHOT_DONE: 7263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 7273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // No ops, but need to notify 7283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 7293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 7303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 7313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 7323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalEvtResult(&result); 7333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 7353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_INTERNAL: 7363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 7373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_internal_evt_payload_t *internal_evt = 7383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_internal_evt_payload_t *)payload; 7393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (internal_evt->evt_type) { 7403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_LED_MODE_OVERRIDE: 7413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->waitDeferredWork(m_parent->mParamInitJob); 7423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR != rc) { 7433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Param init deferred work failed"); 7443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 7453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->mParameters.updateFlashMode(internal_evt->led_data); 7463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 7483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 7493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 7503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 7513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 7543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 7553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 7563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 7573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 7583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 7603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 7613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 7623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 7633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 7643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : procEvtPreviewReadyState 7653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 7663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: finite state machine function to handle event in state of 7673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * QCAMERA_SM_STATE_PREVIEW_READY. 7683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 7693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 7703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt : event to be processed 7713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @payload : event payload. Can be NULL if not needed. 7723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 7733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 7743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 7753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 7763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 7773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::procEvtPreviewReadyState(qcamera_sm_evt_enum_t evt, 7783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *payload) 7793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 7803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t rc = NO_ERROR; 7813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_api_result_t result; 7823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(&result, 0, sizeof(qcamera_api_result_t)); 7833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 7843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("event (%d)", evt); 7853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (evt) { 7863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 7873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 7883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->setPreviewWindow((struct preview_stream_ops *)payload); 7893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->mPreviewWindow != NULL) { 7903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 7913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 7923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 7933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 7943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 7953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 7963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 7973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 7993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 8003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 8013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 8023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 8033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 8043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 8053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 8063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_CALLBACKS: 8073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 8083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_setcb_payload_t *setcbs = 8093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_setcb_payload_t *)payload; 8103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->setCallBacks(setcbs->notify_cb, 8113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb, 8123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb_timestamp, 8133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->get_memory, 8143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->user); 8153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 8163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 8173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 8183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 8193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 8203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 8213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 8223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 8233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->enableMsgType(*((int32_t *)payload)); 8243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 8253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 8263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 8273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 8283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 8293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 8303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 8313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 8323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->disableMsgType(*((int32_t *)payload)); 8333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 8343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 8353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 8363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 8373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 8383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 8393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 8403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 8413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int enabled = m_parent->msgTypeEnabled(*((int32_t *)payload)); 8423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 8433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 8443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 8453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = enabled; 8463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 8473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 8483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 8493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS: 8503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 8513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel bool needRestart = false; 8523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateParameters((char*)payload, needRestart); 8533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 8543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 8553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 8563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 8573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 8583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 8593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_STOP: 8603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 8613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("Stopping preview..."); 8623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // need restart preview for parameters to take effect 8633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 8643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Clear memory pools 8653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->m_memoryPool.clear(); 8663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 8673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 8683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 8693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 8703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 8713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 8723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_COMMIT: 8733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 8743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->commitParameterChanges(); 8753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 8763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 8773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 8783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 8793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 8803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 8813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_RESTART: 8823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 8833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // prepare preview again 8843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 8853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 8863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 8873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 8883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->setNeedRestart(false); 8893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 8903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 8913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 8923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 8933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 8943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 8953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_GET_PARAMS: 8963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 8973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.params = m_parent->getParameters(); 8983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = result.params ? NO_ERROR : UNKNOWN_ERROR; 8993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 9003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 9013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 9023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 9033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 9053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PUT_PARAMS: 9063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 9073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->putParameters((char*)payload); 9083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 9093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 9103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 9123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 9143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_PREVIEW: 9153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 9163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no ops here 9173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 9183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 9193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 9203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 9223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 9243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 9253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 9263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 9273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 9283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 9293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 9303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 9313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 9323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no ops here 9343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 9353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 9363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 9373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 9393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 9413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_PREVIEW: 9423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 9433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->mPreviewWindow != NULL) { 9443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 9453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 9463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 9473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 9483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 9493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 9503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no ops here 9533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 9543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 9553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 9563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 9583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 9603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_PREVIEW: 9613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 9623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 9633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = 0; 9643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 9653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 9663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 9673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 9693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 9713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREVIEW_ENABLED: 9723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 9733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 9743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 9753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 9763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 9773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 1; 9783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 9793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 9813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RECORDING_ENABLED: 9823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 9833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = 0; 9843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 9853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 9863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 9873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 0; 9883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 9893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 9913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 9923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 9933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->storeMetaDataInBuffers(*((int *)payload)); 9943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 9953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 9963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 9983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 9993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 10003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DUMP: 10013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 10023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->dump(*((int *)payload)); 10033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 10043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 10053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 10063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 10073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 10083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 10093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_AUTO_FOCUS: 10103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 10113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->autoFocus(); 10123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 10133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 10143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 10153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 10163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 10173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 10183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 10193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 10203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelAutoFocus(); 10213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 10223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 10233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 10243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 10253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 10263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 10273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SEND_COMMAND: 10283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 10293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_command_payload_t *cmd_payload = 10303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_command_payload_t *)payload; 10313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->sendCommand(cmd_payload->cmd, 10323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg1, 10333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg2); 10343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 10353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 10363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 10373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 10383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 10393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 10403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_REG_FACE_IMAGE: 10413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 10423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t faceID = 0; 10433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_reg_face_payload_t *reg_payload = 10443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_reg_face_payload_t *)payload; 10453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->registerFaceImage(reg_payload->img_ptr, 10463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel reg_payload->config, 10473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel faceID); 10483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 10493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 10503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 10513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.handle = faceID; 10523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 10533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 10543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 1055e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 1056e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel { 1057e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel LOGW("Free video handle %d %d", evt, m_state); 1058e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel QCameraVideoMemory::closeNativeHandle((const void *)payload); 1059e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } 10603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_START_RECORDING: 10613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_STOP_PREVIEW: 10623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_START_PREVIEW: 10633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_RECORDING: 10643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_RECORDING: 10653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 10663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_TAKE_PICTURE: 10673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_TAKE_PICTURE: 10683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_CANCEL_PICTURE: 10693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE: 10703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 10713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 10723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 10733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 10743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 10753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 10763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 10773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 10783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 10793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_NOTIFY: 10803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 10813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 10823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (cam_evt->server_event_type) { 10833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case CAM_EVENT_TYPE_DAEMON_DIED: 10843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 10853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 10863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel CAMERA_ERROR_SERVER_DIED, 10873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 0); 10883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 10893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 10903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 10913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Invalid internal event %d in state(%d)", 10923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_evt->server_event_type, m_state); 10933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 10943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 10953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 10963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 10973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SNAPSHOT_DONE: 10983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 10993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // No ops, but need to notify 11003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 11013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 11023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 11033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 11043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalEvtResult(&result); 11053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 11063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 11073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_INTERNAL: 11083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 11093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_internal_evt_payload_t *internal_evt = 11103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_internal_evt_payload_t *)payload; 11113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (internal_evt->evt_type) { 11123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_LED_MODE_OVERRIDE: 11133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->mParameters.updateFlashMode(internal_evt->led_data); 11143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 11153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 11163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 11173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 11183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 11193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 11203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 11213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 11223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_THERMAL_NOTIFY: 11233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 11243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 11253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 11263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 11273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 11283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 11293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 11303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 11313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 11323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : procEvtPreviewingState 11333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 11343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: finite state machine function to handle event in state of 11353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * QCAMERA_SM_STATE_PREVIEWING. 11363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 11373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 11383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt : event to be processed 11393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @payload : event payload. Can be NULL if not needed. 11403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 11413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 11423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 11433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 11443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 11453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::procEvtPreviewingState(qcamera_sm_evt_enum_t evt, 11463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *payload) 11473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 11483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t rc = NO_ERROR; 11493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_api_result_t result; 11503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(&result, 0, sizeof(qcamera_api_result_t)); 11513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 11523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("event (%d)", evt); 11533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (evt) { 11543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 11553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 11563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Error setting preview window during previewing 11573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot set preview window when preview is running"); 11583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 11593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 11603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 11613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 11623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 11633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 11643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 11653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_CALLBACKS: 11663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 11673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_setcb_payload_t *setcbs = 11683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_setcb_payload_t *)payload; 11693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->setCallBacks(setcbs->notify_cb, 11703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb, 11713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb_timestamp, 11723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->get_memory, 11733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->user); 11743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 11753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 11763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 11773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 11783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 11793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 11803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 11813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 11823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t enable_msgs = *((int32_t *)payload); 11833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_bDelayPreviewMsgs && 11843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (enable_msgs & CAMERA_MSG_PREVIEW_FRAME)) { 11853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel enable_msgs &= ~CAMERA_MSG_PREVIEW_FRAME; 11863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_DelayedMsgs = CAMERA_MSG_PREVIEW_FRAME; 11873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 11883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->enableMsgType(enable_msgs); 11893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 11903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 11913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 11923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 11933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 11943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 11953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 11963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 11973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t disable_msgs = *((int32_t *)payload); 11983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_bDelayPreviewMsgs && m_DelayedMsgs) { 11993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_DelayedMsgs &= ~disable_msgs; 12003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (0 == m_DelayedMsgs) { 12013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_bDelayPreviewMsgs = false; 12023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->disableMsgType(disable_msgs); 12053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 12063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 12073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 12083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 12093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 12113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 12123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 12133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t msgs = *((int32_t *)payload); 12143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int enabled = m_parent->msgTypeEnabled(msgs); 12153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_bDelayPreviewMsgs && m_DelayedMsgs) { 12163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel enabled |= (msgs & m_DelayedMsgs); 12173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 12193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 12203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 12213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = enabled; 12223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 12233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 12253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS: 12263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 12273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel bool needRestart = false; 12283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateParameters((char*)payload, needRestart); 12293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 12303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 12313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 12323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 12333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 12353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_STOP: 12363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 12373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("Stopping preview..."); 12383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // stop preview 12393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->stopPreview(); 12403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Clear memory pools 12413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->m_memoryPool.clear(); 12423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 12433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 12443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 12453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 12463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 12483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_COMMIT: 12493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 12503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->commitParameterChanges(); 12513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 12523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 12533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 12543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 12553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 12573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_RESTART: 12583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 12593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // start preview again 12603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 12613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 12623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 12633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 12643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 12653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 12663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 12683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 12693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->setNeedRestart(false); 12723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 12733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 12743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 12753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 12763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 12783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_GET_PARAMS: 12793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 12803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.params = m_parent->getParameters(); 12813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = result.params ? NO_ERROR : UNKNOWN_ERROR; 12823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 12833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 12843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 12853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 12863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 12883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PUT_PARAMS: 12893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 12903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->putParameters((char*)payload); 12913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 12923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 12933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 12943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 12953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 12963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 12973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_PREVIEW: 12983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 12993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no ops here 13003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Already in preview ready state, no ops here"); 13013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 13023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 13033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 13043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 13063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 13073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 13083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_PREVIEW: 13093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 13103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 13113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no ops here 13123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Already in previewing, no ops here to start preview"); 13133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 13143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 13153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 13163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 13173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 13193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 13203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 13213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_PREVIEW: 13223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 13233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->stopPreview(); 13243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 13253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 13263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 13273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 13283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 13303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 13313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 13323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREVIEW_ENABLED: 13333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 13343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 13353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 13363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 13373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 13383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 13393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 1; 13403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 13413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 13423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 13433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RECORDING_ENABLED: 13443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 13453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 13463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 13473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 13483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 13493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 0; 13503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 13513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 13523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 13533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 13543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 13553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->storeMetaDataInBuffers(*((int *)payload)); 13563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 13573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 13583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 13603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 13613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 13623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DUMP: 13633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 13643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->dump(*((int *)payload)); 13653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 13663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 13673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 13693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 13703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 13713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_AUTO_FOCUS: 13723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 13733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->autoFocus(); 13743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 13753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 13763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 13783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 13793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 13803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 13813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 13823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelAutoFocus(); 13833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 13843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 13853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 13873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 13883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 13893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_START_RECORDING: 13903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 13913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preStartRecording(); 13923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 13933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 13943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 13963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 13973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 13983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_RECORDING: 13993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 14003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startRecording(); 14013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 14023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // move state to recording state 14033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_RECORDING; 14043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 14053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 14063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 14073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 14083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 14093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 14103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 14113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 14123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 14133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 14143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->prepareHardwareForSnapshot(FALSE); 14153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 14163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Do not signal API result in this case. 14173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Need to wait for snapshot done in metadta. 14183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREPARE_SNAPSHOT; 14193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 14203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 14213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Do not change state in this case. 14223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("prepareHardwareForSnapshot failed %d", 14233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc); 14243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 14253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 14263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 14273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 14283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 14293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 14303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 14313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 14323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_TAKE_PICTURE: 14333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 14343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preTakePicture(); 14353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 14363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 14373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 14383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 14393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 14403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 14413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_TAKE_PICTURE: 14423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 14433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("QCAMERA_SM_EVT_TAKE_PICTURE "); 14443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ( m_parent->mParameters.getRecordingHintValue() == true) { 14453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->stopPreview(); 14463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->mParameters.updateRecordingHintValue(FALSE); 14473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // start preview again 14483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 14493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 14503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 14513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 14523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 14533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 14543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 14553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 14563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isZSLMode() || m_parent->isLongshotEnabled()) { 14573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel bool restartPreview = m_parent->isPreviewRestartEnabled(); 14583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ((restartPreview) && (m_parent->mParameters.getManualCaptureMode() 14593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel >= CAM_MANUAL_CAPTURE_TYPE_3)) { 14603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* stop preview and disable ZSL now */ 14613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->stopPreview(); 14623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->mParameters.updateZSLModeValue(FALSE); 14633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_RestoreZSL = TRUE; 14643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_bDelayPreviewMsgs = true; 14653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PIC_TAKING; 14663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 14673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_PIC_TAKING; 14683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_bDelayPreviewMsgs = true; 14693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 14703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 14713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->takePicture(); 14723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 14733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // move state to previewing state 14743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unconfigureAdvancedCapture(); 14753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 14763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 14773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (!(m_parent->isRetroPicture()) || (rc != NO_ERROR)) { 14783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("signal API result, m_state = %d", 14793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state); 14803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 14813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 14823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 14833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 14843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 14853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 14863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PIC_TAKING; 14873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->takePicture(); 14883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 14893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t temp_rc = NO_ERROR; 14903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // move state to preview stopped state 14913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unconfigureAdvancedCapture(); 14923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->stopPreview(); 14933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // start preview again 14943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel temp_rc = m_parent->preparePreview(); 14953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (temp_rc == NO_ERROR) { 14963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel temp_rc = m_parent->startPreview(); 14973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (temp_rc != NO_ERROR) { 14983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 14993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 15003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 15013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 15023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 15043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 15053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 15083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 15093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 15103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 15113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 15143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SEND_COMMAND: 15153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 15163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_command_payload_t *cmd_payload = 15173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_command_payload_t *)payload; 15183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->sendCommand(cmd_payload->cmd, 15193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg1, 15203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg2); 15213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_bPreviewNeedsRestart = 15223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (QCAMERA_SM_EVT_RESTART_PERVIEW == cmd_payload->arg1); 15233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_bPreviewDelayedRestart = 15243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (QCAMERA_SM_EVT_DELAYED_RESTART == cmd_payload->arg2); 15253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 15263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#ifndef VANILLA_HAL 15273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ((CAMERA_CMD_LONGSHOT_ON == cmd_payload->cmd) && 15283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (m_bPreviewNeedsRestart)) { 15293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->stopPreview(); 15303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Clear memory pools 15313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->m_memoryPool.clear(); 15323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 15333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (!m_bPreviewDelayedRestart) { 15343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // start preview again 15353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 15363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 15373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 15383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 15393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 15403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 15413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#endif 15463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 15473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 15483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 15493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 15503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 15523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SEND_COMMAND_RESTART: 15533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 15543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#ifndef VANILLA_HAL 15553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_command_payload_t *cmd_payload = 15563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_command_payload_t *)payload; 15573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ((CAMERA_CMD_LONGSHOT_ON == cmd_payload->cmd) && 15583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (m_bPreviewNeedsRestart) && 15593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (m_bPreviewDelayedRestart)) { 15603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // start preview again 15613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 15623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 15633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 15643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 15653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 15663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#endif 15703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 15713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 15723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 15733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 15743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 15763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_REG_FACE_IMAGE: 15773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 15783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t faceID = 0; 15793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_reg_face_payload_t *reg_payload = 15803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_reg_face_payload_t *)payload; 15813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->registerFaceImage(reg_payload->img_ptr, 15823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel reg_payload->config, 15833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel faceID); 15843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 15853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 15863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 15873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.handle = faceID; 15883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 15893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 15903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 1591e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 1592e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel { 1593e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel LOGW("Free video handle %d %d", evt, m_state); 1594e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel QCameraVideoMemory::closeNativeHandle((const void *)payload); 1595e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel } 15963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_CANCEL_PICTURE: 15973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_RECORDING: 15983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE: 15993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 16003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 16013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 16023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 16033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 16043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 16053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 16063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 16073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_INTERNAL: 16093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 16103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_internal_evt_payload_t *internal_evt = 16113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_internal_evt_payload_t *)payload; 16123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (internal_evt->evt_type) { 16133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_UPDATE: 16143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAutoFocusEvent(internal_evt->focus_data); 16153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_PREP_SNAPSHOT_DONE: 16173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FACE_DETECT_RESULT: 16193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processFaceDetectionResult(&internal_evt->faces_data); 16203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HISTOGRAM_STATS: 16223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processHistogramStats(internal_evt->stats_data); 16233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_CROP_INFO: 16253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZoomEvent(internal_evt->crop_data); 16263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ASD_UPDATE: 16283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processASDUpdate(internal_evt->asd_data); 16293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_LED_MODE_OVERRIDE: 16313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->mParameters.updateFlashMode(internal_evt->led_data); 16323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AWB_UPDATE: 16343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->transAwbMetaToParams(internal_evt->awb_data); 16353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AE_UPDATE: 16373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAEInfo(internal_evt->ae_data); 16383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_POS_UPDATE: 16403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processFocusPositionInfo(internal_evt->focus_pos); 16413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HDR_UPDATE: 16433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processHDRData(internal_evt->hdr_data); 16443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_RETRO_AEC_UNLOCK: 16463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processRetroAECUnlock(); 16473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ZSL_CAPTURE_DONE: 16493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZSLCaptureDone(); 16503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 1651cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel case QCAMERA_INTERNAL_EVT_DUAL_CAMERA_FOV_CONTROL: 1652c2ee3304e16253ceab19f9be91c5da84233940f3Thierry Strudel m_parent->processDualCamFovControl(); 1653cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel break; 16549ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel case QCAMERA_INTERNAL_EVT_LED_CALIB_UPDATE: 16559ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel rc = m_parent->processLEDCalibration(internal_evt->led_calib_result); 16569ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel break; 16573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 16583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Invalid internal event %d in state(%d)", 16593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel internal_evt->evt_type, m_state); 16603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 16623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 16633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_NOTIFY: 16653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 16663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 16673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (cam_evt->server_event_type) { 16683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case CAM_EVENT_TYPE_DAEMON_DIED: 16693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 16703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 16713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel CAMERA_ERROR_SERVER_DIED, 16723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 0); 16733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 16743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 16763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("no handling for server evt (%d) at this state", 16773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_evt->server_event_type); 16783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 16803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 16813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_THERMAL_NOTIFY: 16833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 16843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateThermalLevel(payload); 16853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 16863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SNAPSHOT_DONE: 16883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 16893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // No ops, but need to notify 16903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 16913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 16923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 16933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 16943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalEvtResult(&result); 16953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 16963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 16973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_STOP_PREVIEW: 16983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 16993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->stopPreview(); 17003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 17013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 17023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 17033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 17043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 17053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 17063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_START_PREVIEW: 17073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 17083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 17093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 17103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 17113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 17123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 17133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 17143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 17153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 17163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 17173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 17183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 17193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 17203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 17213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 17223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 17233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 17243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 17253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 17263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 17273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 17283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : procEvtPrepareSnapshotState 17293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 17303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: finite state machine function to handle event in state of 17313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * QCAMERA_SM_STATE_PREPARE_SNAPSHOT. 17323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 17333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 17343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt : event to be processed 17353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @payload : event payload. Can be NULL if not needed. 17363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 17373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 17383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 17393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 17403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 17413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::procEvtPrepareSnapshotState(qcamera_sm_evt_enum_t evt, 17423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *payload) 17433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 17443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t rc = NO_ERROR; 17453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_api_result_t result; 17463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(&result, 0, sizeof(qcamera_api_result_t)); 17473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 17483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("event (%d)", evt); 17493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (evt) { 17503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 17513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_CALLBACKS: 17523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 17533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 17543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 17553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS: 17563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_STOP: 17573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_COMMIT: 17583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_RESTART: 17593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_GET_PARAMS: 17603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PUT_PARAMS: 17613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_PREVIEW: 17623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_PREVIEW: 17633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 17643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_PREVIEW: 17653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREVIEW_ENABLED: 17663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RECORDING_ENABLED: 17673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 17683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DUMP: 17693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_AUTO_FOCUS: 17703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 17713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_START_RECORDING: 17723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_STOP_PREVIEW: 17733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_START_PREVIEW: 17743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_RECORDING: 17753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_TAKE_PICTURE: 17763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_TAKE_PICTURE: 17773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 17783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SEND_COMMAND: 17793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_CANCEL_PICTURE: 17803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_RECORDING: 17813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 17823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE: 17833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 17843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 17853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 17863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 17873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 17883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 17893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 17903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 17913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 17923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_INTERNAL: 17933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 17943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_internal_evt_payload_t *internal_evt = 17953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_internal_evt_payload_t *)payload; 17963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (internal_evt->evt_type) { 17973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_UPDATE: 17983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAutoFocusEvent(internal_evt->focus_data); 17993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_PREP_SNAPSHOT_DONE: 18013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->processPrepSnapshotDoneEvent(internal_evt->prep_snapshot_state); 18023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 18033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 18043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = NO_ERROR; 18053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = QCAMERA_SM_EVT_PREPARE_SNAPSHOT; 18063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 18073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 18083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FACE_DETECT_RESULT: 18103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processFaceDetectionResult(&internal_evt->faces_data); 18113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HISTOGRAM_STATS: 18133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processHistogramStats(internal_evt->stats_data); 18143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_CROP_INFO: 18163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZoomEvent(internal_evt->crop_data); 18173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ASD_UPDATE: 18193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processASDUpdate(internal_evt->asd_data); 18203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_LED_MODE_OVERRIDE: 18223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 18233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AWB_UPDATE: 18253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->transAwbMetaToParams(internal_evt->awb_data); 18263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AE_UPDATE: 18283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAEInfo(internal_evt->ae_data); 18293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_POS_UPDATE: 18313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processFocusPositionInfo(internal_evt->focus_pos); 18323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HDR_UPDATE: 18343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processHDRData(internal_evt->hdr_data); 18353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_RETRO_AEC_UNLOCK: 18373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processRetroAECUnlock(); 18383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ZSL_CAPTURE_DONE: 18403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZSLCaptureDone(); 18413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 1842cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel case QCAMERA_INTERNAL_EVT_DUAL_CAMERA_FOV_CONTROL: 1843c2ee3304e16253ceab19f9be91c5da84233940f3Thierry Strudel m_parent->processDualCamFovControl(); 1844cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel break; 18459ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel case QCAMERA_INTERNAL_EVT_LED_CALIB_UPDATE: 18469ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel rc = m_parent->processLEDCalibration(internal_evt->led_calib_result); 18479ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel break; 18483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 18493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Invalid internal event %d in state(%d)", 18503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel internal_evt->evt_type, m_state); 18513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 18533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 18543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_NOTIFY: 18563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 18573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 18583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (cam_evt->server_event_type) { 18593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case CAM_EVENT_TYPE_DAEMON_DIED: 18603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 18613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Send internal events to stop indefinite wait on prepare 18623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // snapshot done event. 1863e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 1864e80ad7c01b6fb44006dc55546b700fca34bb00edThierry Strudel 18653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 18663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = QCAMERA_SM_EVT_PREPARE_SNAPSHOT; 18673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 18683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 18693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 18703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 18713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = QCAMERA_SM_EVT_TAKE_PICTURE; 18723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 18733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 18743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 18753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 18763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel CAMERA_ERROR_SERVER_DIED, 18773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 0); 18783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 18793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 18813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Invalid internal event %d in state(%d)", 18823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_evt->server_event_type, m_state); 18833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 18853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 18863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SNAPSHOT_DONE: 18883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 18893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // No ops, but need to notify 18903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 18913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 18923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 18933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 18943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalEvtResult(&result); 18953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 18963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 18973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_THERMAL_NOTIFY: 18983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 18993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateThermalLevel(payload); 19003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 19013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 19023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 19033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 19043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 19053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 19063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 19073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 19083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 19093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 19103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 19113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 19123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : procEvtPicTakingState 19133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 19143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: finite state machine function to handle event in state of 19153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * QCAMERA_SM_STATE_PIC_TAKING. 19163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 19173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 19183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt : event to be processed 19193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @payload : event payload. Can be NULL if not needed. 19203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 19213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 19223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 19233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 19243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 19253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::procEvtPicTakingState(qcamera_sm_evt_enum_t evt, 19263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *payload) 19273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 19283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t rc = NO_ERROR; 19293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_api_result_t result; 19303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(&result, 0, sizeof(qcamera_api_result_t)); 19313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 19323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("event (%d)", evt); 19333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (evt) { 19343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 19353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 19363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Error setting preview window during previewing 19373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot set preview window when preview is running"); 19383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 19393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 19403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 19413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 19423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 19433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 19443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 19453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_CALLBACKS: 19463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 19473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_setcb_payload_t *setcbs = 19483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_setcb_payload_t *)payload; 19493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->setCallBacks(setcbs->notify_cb, 19503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb, 19513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb_timestamp, 19523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->get_memory, 19533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->user); 19543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 19553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 19563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 19573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 19583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 19593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 19603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 19613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 19623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->enableMsgType(*((int32_t *)payload)); 19633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 19643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 19653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 19663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 19673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 19683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 19693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 19703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 19713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->disableMsgType(*((int32_t *)payload)); 19723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 19733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 19743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 19753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 19763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 19773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 19783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 19793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 19803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int enabled = m_parent->msgTypeEnabled(*((int32_t *)payload)); 19813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 19823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 19833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 19843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = enabled; 19853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 19863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 19873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 19883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS: 19893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 19903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel bool needRestart = false; 19913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateParameters((char*)payload, needRestart); 19923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 19933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 19943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 19953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 19963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 19973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 19983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_STOP: 19993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 20003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 20013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 20023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 20043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 20053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 20063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_COMMIT: 20073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 20083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->commitParameterChanges(); 20093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 20103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 20113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 20133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 20143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 20153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_RESTART: 20163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 20173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->setNeedRestart(false); 20183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 20193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 20203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 20223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 20233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 20243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_GET_PARAMS: 20253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 20263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.params = m_parent->getParameters(); 20273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = result.params ? NO_ERROR : UNKNOWN_ERROR; 20283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 20293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 20303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 20313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 20323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 20333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 20343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PUT_PARAMS: 20353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 20363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->putParameters((char*)payload); 20373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 20383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 20393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 20413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 20423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 20433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_PREVIEW: 20443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 20453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // cancel picture first 20463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelPicture(); 20473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 20483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 20493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 20503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 20513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 20533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 20543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 20553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREVIEW_ENABLED: 20563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 20573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 20583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 20593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 20603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 20613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 0; 20623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 20633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 20643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 20653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RECORDING_ENABLED: 20663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 20673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 20683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 20693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 20703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 20713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 0; 20723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 20733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 20743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 20753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 20763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 20773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->storeMetaDataInBuffers(*((int *)payload)); 20783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 20793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 20803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 20823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 20833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 20843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DUMP: 20853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 20863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->dump(*((int *)payload)); 20873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 20883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 20893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 20913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 20923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 20933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_AUTO_FOCUS: 20943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 20953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->autoFocus(); 20963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 20973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 20983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 21003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 21013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 21023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 21033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 21043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelAutoFocus(); 21053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 21063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 21073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 21083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 21093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 21103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 21113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SEND_COMMAND: 21123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 21133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_command_payload_t *cmd_payload = 21143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_command_payload_t *)payload; 21153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->sendCommand(cmd_payload->cmd, 21163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg1, 21173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg2); 21183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#ifndef VANILLA_HAL 21193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ( CAMERA_CMD_LONGSHOT_OFF == cmd_payload->cmd ) { 21203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // move state to previewing state 21213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 21223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 21233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#endif 21243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 21253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 21263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 21273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 21283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 21293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 21303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_CANCEL_PICTURE: 21313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 21323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelPicture(); 21333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 21343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 21353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 21363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 21373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 21383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 21393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 21403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_REG_FACE_IMAGE: 21413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 21423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t faceID = 0; 21433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_reg_face_payload_t *reg_payload = 21443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_reg_face_payload_t *)payload; 21453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->registerFaceImage(reg_payload->img_ptr, 21463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel reg_payload->config, 21473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel faceID); 21483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 21493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 21503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 21513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.handle = faceID; 21523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 21533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 21543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 21553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_TAKE_PICTURE: 21563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 21573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ( m_parent->isLongshotEnabled() ) { 21583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no ops here, need to singal NO_ERROR 21593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 21603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 21613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 21623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 21633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 21643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 21653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 21663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 21673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 21683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 21693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 21703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 21713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_TAKE_PICTURE: 21723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 21733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ( m_parent->isLongshotEnabled() ) { 21743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->longShot(); 21753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 21763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 21773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 21783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 21793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 21803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 21813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 21823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 21833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 21843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 21853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 21863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 21873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_START_RECORDING: 21883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_STOP_PREVIEW: 21893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_START_PREVIEW: 21903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_RECORDING: 21913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_RECORDING: 21923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 21933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_PREVIEW: 21943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_PREVIEW: 21953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 21963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE: 21973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 21983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 21993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 22003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 22013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 22023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 22033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 22043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 22053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_INTERNAL: 22073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 22083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_internal_evt_payload_t *internal_evt = 22093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_internal_evt_payload_t *)payload; 22103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (internal_evt->evt_type) { 22113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_UPDATE: 22123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAutoFocusEvent(internal_evt->focus_data); 22133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_PREP_SNAPSHOT_DONE: 22153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FACE_DETECT_RESULT: 22173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HISTOGRAM_STATS: 22193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_CROP_INFO: 22213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZoomEvent(internal_evt->crop_data); 22223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ASD_UPDATE: 22243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processASDUpdate(internal_evt->asd_data); 22253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_LED_MODE_OVERRIDE: 22273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 22283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AWB_UPDATE: 22303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->transAwbMetaToParams(internal_evt->awb_data); 22313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AE_UPDATE: 22333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAEInfo(internal_evt->ae_data); 22343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_POS_UPDATE: 22363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processFocusPositionInfo(internal_evt->focus_pos); 22373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HDR_UPDATE: 22393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processHDRData(internal_evt->hdr_data); 22403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_RETRO_AEC_UNLOCK: 22423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processRetroAECUnlock(); 22433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ZSL_CAPTURE_DONE: 22453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZSLCaptureDone(); 22463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 2247cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel case QCAMERA_INTERNAL_EVT_DUAL_CAMERA_FOV_CONTROL: 2248c2ee3304e16253ceab19f9be91c5da84233940f3Thierry Strudel m_parent->processDualCamFovControl(); 2249cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel break; 22509ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel case QCAMERA_INTERNAL_EVT_LED_CALIB_UPDATE: 22519ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel rc = m_parent->processLEDCalibration(internal_evt->led_calib_result); 22529ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel break; 22533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 22543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 22563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 22573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_NOTIFY: 22593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 22603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 22613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (cam_evt->server_event_type) { 22623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case CAM_EVENT_TYPE_DAEMON_DIED: 22633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 22643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Send internal events to stop indefinite wait on prepare 22653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // snapshot done event. 22663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 22673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = QCAMERA_SM_EVT_PREPARE_SNAPSHOT; 22683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 22693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 22703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 22713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 22723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = QCAMERA_SM_EVT_TAKE_PICTURE; 22733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 22743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 22753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 22763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 22773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel CAMERA_ERROR_SERVER_DIED, 22783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 0); 22793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 22803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case CAM_EVENT_TYPE_CAC_DONE: 22823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isCACEnabled() || m_parent->mParameters.isOEMFeatEnabled()) { 22833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("[LONG_SHOT_DBG] : Received CAC Done"); 22843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isLongshotEnabled() 22853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel && !m_parent->isCaptureShutterEnabled()) { 22863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // play shutter sound for longshot 22873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // after CAC stage is done 22883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->playShutter(); 22893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 22903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->mCACDoneReceived = TRUE; 22913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 22923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 22943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGH("no handling for server evt (%d) at this state", 22953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_evt->server_event_type); 22963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 22973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 22983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 22993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 23003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 23013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 23023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_jpeg_evt_payload_t *jpeg_job = 23033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_jpeg_evt_payload_t *)payload; 23043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processJpegNotify(jpeg_job); 23053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 23063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 23073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_CAPTURE_CHANNEL: 23083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 23093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel bool restartPreview = m_parent->isPreviewRestartEnabled(); 23103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->stopCaptureChannel(restartPreview); 23113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 23123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (restartPreview && (NO_ERROR == rc)) { 231304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel m_parent->unconfigureAdvancedCapture(); 23143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 23153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR == rc) { 23163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->m_bPreviewStarted = true; 23173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 23183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 23193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 23203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 23213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 23223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 23233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 23243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 23253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 23263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 23273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 23283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SNAPSHOT_DONE: 23293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 23303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelPicture(); 23313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 23323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel bool restartPreview = m_parent->isPreviewRestartEnabled(); 23333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (restartPreview) { 23343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->mParameters.getManualCaptureMode() 23353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel >= CAM_MANUAL_CAPTURE_TYPE_3) { 23363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->mParameters.updateZSLModeValue(m_RestoreZSL); 23373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_RestoreZSL = FALSE; 23383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 23393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (NO_ERROR == rc) { 23403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->m_bPreviewStarted = true; 23413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 23423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 23433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 23443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 23453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 23463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 23473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 23483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 23493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 23503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 23513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 23523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 23533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalEvtResult(&result); 23543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 23553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 23563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_THERMAL_NOTIFY: 23573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 23583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateThermalLevel(payload); 23593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 23603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 23613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 23623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 23633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 23643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 23653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 23663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 23673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 23683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 23693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 23703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : procEvtRecordingState 23713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 23723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: finite state machine function to handle event in state of 23733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * QCAMERA_SM_STATE_RECORDING. 23743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 23753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 23763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt : event to be processed 23773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @payload : event payload. Can be NULL if not needed. 23783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 23793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 23803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 23813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 23823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 23833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::procEvtRecordingState(qcamera_sm_evt_enum_t evt, 23843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *payload) 23853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 23863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t rc = NO_ERROR; 23873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_api_result_t result; 23883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(&result, 0, sizeof(qcamera_api_result_t)); 23893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 23903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("event (%d)", evt); 23913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (evt) { 23923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_PREVIEW: 23933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_PREVIEW: 23943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 23953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 23963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // WA: CTS test VideoSnapshot will try to 23973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // start preview during video recording. 23983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGH("CTS video restart op"); 23993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 24003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 24013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 24023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 24043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 24063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_CALLBACKS: 24073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 24083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_setcb_payload_t *setcbs = 24093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_setcb_payload_t *)payload; 24103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->setCallBacks(setcbs->notify_cb, 24113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb, 24123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb_timestamp, 24133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->get_memory, 24143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->user); 24153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 24163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 24173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 24193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 24213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 24223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 24233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->enableMsgType(*((int32_t *)payload)); 24243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 24253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 24263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 24283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 24303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 24313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 24323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->disableMsgType(*((int32_t *)payload)); 24333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 24343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 24353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 24373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 24393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 24403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 24413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int enabled = m_parent->msgTypeEnabled(*((int32_t *)payload)); 24423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 24433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 24443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 24453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = enabled; 24463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 24473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 24493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS: 24503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 24513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel bool needRestart = false; 24523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateParameters((char*)payload, needRestart); 24533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 24543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (needRestart) { 24553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // cannot set parameters that requires restart during recording 24563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot set parameters that requires restart during recording"); 24573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = BAD_VALUE; 24583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 24613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->setNeedRestart(false); 24623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 24643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 24653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 24673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 24693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_COMMIT: 24703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 24713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->commitParameterChanges(); 24723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 24733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 24743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 24763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 24783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_STOP: 24793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_RESTART: 24803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 24813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("%s: Error!! cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 24823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 24833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 24843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 24853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 24873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 24893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_GET_PARAMS: 24903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 24913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.params = m_parent->getParameters(); 24923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = result.params ? NO_ERROR : UNKNOWN_ERROR; 24933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 24943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 24953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 24963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 24973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 24983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 24993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PUT_PARAMS: 25003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 25013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->putParameters((char*)payload); 25023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 25033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 25043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 25053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 25063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 25073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 25083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREVIEW_ENABLED: 25093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 25103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 25113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 25123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 25133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 25143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 0; 25153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 25163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 25173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 25183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RECORDING_ENABLED: 25193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 25203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 25213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 25223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 25233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 25243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 1; 25253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 25263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 25273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 25283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 25293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 25303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->storeMetaDataInBuffers(*((int *)payload)); 25313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 25323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 25333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 25343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 25353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 25363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 25373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DUMP: 25383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 25393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->dump(*((int *)payload)); 25403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 25413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 25423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 25433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 25443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 25453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 25463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_AUTO_FOCUS: 25473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 25483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->autoFocus(); 25493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 25503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 25513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 25523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 25533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 25543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 25553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 25563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 25573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelAutoFocus(); 25583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 25593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 25603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 25613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 25623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 25633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 25643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SEND_COMMAND: 25653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 25663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_command_payload_t *cmd_payload = 25673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_command_payload_t *)payload; 25683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->sendCommand(cmd_payload->cmd, 25693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg1, 25703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg2); 25713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 25723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 25733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 25743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 25753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 25763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 25773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_TAKE_PICTURE: 25783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 25793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // No ops here, send NO_ERROR. 25803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 25813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 25823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 25833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 25843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 25853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 25863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 25873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_TAKE_PICTURE: 25883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 25893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_VIDEO_PIC_TAKING; 25903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->takeLiveSnapshot(); 25913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 25923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unconfigureAdvancedCapture(); 25933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_RECORDING; 25943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 25953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 25963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 25973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 25983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 25993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 26003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 26013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_START_RECORDING: 26023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_STOP_PREVIEW: 26033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_START_PREVIEW: 26043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_RECORDING: 26053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 26063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no ops here 26073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("already in recording state, no ops for start_recording"); 26083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = 0; 26093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 26103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 26113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 26123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 26133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 26143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 26153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_RECORDING: 26163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 26173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->stopRecording(); 26183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 26193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 26203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 26213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 26223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 26233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 26243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 26253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_PREVIEW: 26263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 26273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->stopRecording(); 26283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 26293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 26303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->stopPreview(); 26313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 26323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 26333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 26343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 26353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 26363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 26373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 26383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 26393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 26403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 26413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->releaseRecordingFrame((const void *)payload); 26423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 26433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 26443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 26453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 26463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 26473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 26483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_REG_FACE_IMAGE: 26493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 26503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t faceID = 0; 26513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_reg_face_payload_t *reg_payload = 26523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_reg_face_payload_t *)payload; 26533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->registerFaceImage(reg_payload->img_ptr, 26543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel reg_payload->config, 26553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel faceID); 26563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 26573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 26583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 26593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.handle = faceID; 26603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 26613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 26623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 26633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 26643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 26653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //In Video snapshot, prepare hardware is a no-op. 26663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = NO_ERROR; 26673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 26683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 26693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 26703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 26713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 26723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_CANCEL_PICTURE: 26733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 26743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE: 26753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 26763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 26773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 26783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 26793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 26803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 26813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 26823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 26833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 26843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_INTERNAL: 26853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 26863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_internal_evt_payload_t *internal_evt = 26873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_internal_evt_payload_t *)payload; 26883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (internal_evt->evt_type) { 26893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_UPDATE: 26903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAutoFocusEvent(internal_evt->focus_data); 26913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 26923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_PREP_SNAPSHOT_DONE: 26933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 26943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FACE_DETECT_RESULT: 26953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processFaceDetectionResult(&internal_evt->faces_data); 26963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 26973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HISTOGRAM_STATS: 26983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processHistogramStats(internal_evt->stats_data); 26993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_CROP_INFO: 27013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZoomEvent(internal_evt->crop_data); 27023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ASD_UPDATE: 27043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processASDUpdate(internal_evt->asd_data); 27053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_LED_MODE_OVERRIDE: 27073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 27083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AWB_UPDATE: 27103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->transAwbMetaToParams(internal_evt->awb_data); 27113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AE_UPDATE: 27133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAEInfo(internal_evt->ae_data); 27143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_POS_UPDATE: 27163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processFocusPositionInfo(internal_evt->focus_pos); 27173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HDR_UPDATE: 27193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processHDRData(internal_evt->hdr_data); 27203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_RETRO_AEC_UNLOCK: 27223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processRetroAECUnlock(); 27233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ZSL_CAPTURE_DONE: 27253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZSLCaptureDone(); 27263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 2727cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel case QCAMERA_INTERNAL_EVT_DUAL_CAMERA_FOV_CONTROL: 2728c2ee3304e16253ceab19f9be91c5da84233940f3Thierry Strudel m_parent->processDualCamFovControl(); 2729cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel break; 27309ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel case QCAMERA_INTERNAL_EVT_LED_CALIB_UPDATE: 27319ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel rc = m_parent->processLEDCalibration(internal_evt->led_calib_result); 27329ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel break; 27333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 27343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 27363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 27373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_NOTIFY: 27393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 27403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 27413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (cam_evt->server_event_type) { 27423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case CAM_EVENT_TYPE_DAEMON_DIED: 27433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 27443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 27453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel CAMERA_ERROR_SERVER_DIED, 27463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 0); 27473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 27483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 27503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Invalid internal event %d in state(%d)", 27513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_evt->server_event_type, m_state); 27523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 27543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 27553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_THERMAL_NOTIFY: 27573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 27583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateThermalLevel(payload); 27593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 27603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SNAPSHOT_DONE: 27623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 27633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // No ops, but need to notify 27643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 27653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 27663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 27673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 27683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalEvtResult(&result); 27693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 27703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 27723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 27733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 27743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 27753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 27763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 27773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 27783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 27793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 27803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 27813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : procEvtVideoPicTakingState 27823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 27833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: finite state machine function to handle event in state of 27843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * QCAMERA_SM_STATE_VIDEO_PIC_TAKING. 27853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 27863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 27873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt : event to be processed 27883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @payload : event payload. Can be NULL if not needed. 27893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 27903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 27913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 27923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 27933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 27943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::procEvtVideoPicTakingState(qcamera_sm_evt_enum_t evt, 27953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *payload) 27963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 27973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t rc = NO_ERROR; 27983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_api_result_t result; 27993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(&result, 0, sizeof(qcamera_api_result_t)); 28003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 28013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("event (%d)", evt); 28023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (evt) { 28033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 28043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 28053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Error setting preview window during previewing 28063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot set preview window when preview is running"); 28073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 28083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 28093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 28103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 28113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 28123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 28133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 28143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_CALLBACKS: 28153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 28163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_setcb_payload_t *setcbs = 28173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_setcb_payload_t *)payload; 28183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->setCallBacks(setcbs->notify_cb, 28193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb, 28203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb_timestamp, 28213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->get_memory, 28223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->user); 28233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 28243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 28253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 28263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 28273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 28283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 28293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 28303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 28313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->enableMsgType(*((int32_t *)payload)); 28323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 28333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 28343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 28353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 28363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 28373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 28383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 28393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 28403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->disableMsgType(*((int32_t *)payload)); 28413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 28423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 28433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 28443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 28453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 28463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 28473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 28483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 28493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int enabled = m_parent->msgTypeEnabled(*((int32_t *)payload)); 28503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 28513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 28523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 28533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = enabled; 28543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 28553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 28563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 28573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS: 28583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 28593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel bool needRestart = false; 28603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateParameters((char*)payload, needRestart); 28613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 28623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (needRestart) { 28633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // cannot set parameters that requires restart during recording 28643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot set parameters that requires restart during recording"); 28653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = BAD_VALUE; 28663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 28673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 28683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 28693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->setNeedRestart(false); 28703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 28713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 28723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 28733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 28743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 28753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 28763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 28773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_COMMIT: 28783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 28793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->commitParameterChanges(); 28803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 28813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 28823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 28833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 28843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 28853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 28863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_STOP: 28873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_RESTART: 28883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 28893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("%s: Error!! cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 28903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 28913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 28923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 28933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 28943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 28953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 28963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 28973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_GET_PARAMS: 28983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 28993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.params = m_parent->getParameters(); 29003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = result.params ? NO_ERROR : UNKNOWN_ERROR; 29013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 29023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 29033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 29043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 29053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 29063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 29073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PUT_PARAMS: 29083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 29093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->putParameters((char*)payload); 29103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 29113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 29123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 29133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 29143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 29153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 29163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREVIEW_ENABLED: 29173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 29183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 29193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 29203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 29213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 29223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 1; 29233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 29243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 29253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 29263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RECORDING_ENABLED: 29273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 29283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 29293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 29303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 29313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 29323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 1; 29333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 29343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 29353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 29363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 29373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 29383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->storeMetaDataInBuffers(*((int *)payload)); 29393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 29403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 29413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 29423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 29433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 29443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 29453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DUMP: 29463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 29473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->dump(*((int *)payload)); 29483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 29493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 29503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 29513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 29523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 29533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 29543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_AUTO_FOCUS: 29553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 29563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->autoFocus(); 29573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 29583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 29593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 29603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 29613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 29623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 29633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 29643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 29653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelAutoFocus(); 29663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 29673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 29683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 29693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 29703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 29713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 29723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SEND_COMMAND: 29733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 29743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_command_payload_t *cmd_payload = 29753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_command_payload_t *)payload; 29763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->sendCommand(cmd_payload->cmd, 29773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg1, 29783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg2); 29793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 29803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 29813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 29823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 29833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 29843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 29853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_RECORDING: 29863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 29873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelLiveSnapshot(); 29883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_RECORDING; 29893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 29903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->stopRecording(); 29913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 29923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 29933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 29943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 29953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 29963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 29973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 29983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 29993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 30003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 30013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->releaseRecordingFrame((const void *)payload); 30023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 30033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 30043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 30053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 30063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 30073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_CANCEL_PICTURE: 30093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 30103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelLiveSnapshot(); 30113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_RECORDING; 30123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 30133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 30143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 30153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 30163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 30173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_REG_FACE_IMAGE: 30193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 30203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t faceID = 0; 30213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_reg_face_payload_t *reg_payload = 30223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_reg_face_payload_t *)payload; 30233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->registerFaceImage(reg_payload->img_ptr, 30243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel reg_payload->config, 30253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel faceID); 30263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 30273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 30283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 30293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.handle = faceID; 30303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 30313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 30323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_PREVIEW: 30343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 30353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelLiveSnapshot(); 30363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_RECORDING; 30373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 30383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->stopRecording(); 30393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 30403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 30413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->stopPreview(); 30423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 30433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 30443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 30453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 30463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 30473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 30483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 30493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_START_RECORDING: 30513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_STOP_PREVIEW: 30523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_START_PREVIEW: 30533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_RECORDING: 30543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_PREVIEW: 30553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_PREVIEW: 30563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 30573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 30583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_TAKE_PICTURE: 30593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_TAKE_PICTURE: 30603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE: 30613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 30623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 30633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 30643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 30653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 30663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 30673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 30683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 30693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_INTERNAL: 30713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 30723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_internal_evt_payload_t *internal_evt = 30733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_internal_evt_payload_t *)payload; 30743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (internal_evt->evt_type) { 30753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_UPDATE: 30763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAutoFocusEvent(internal_evt->focus_data); 30773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_PREP_SNAPSHOT_DONE: 30793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FACE_DETECT_RESULT: 30813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processFaceDetectionResult(&internal_evt->faces_data); 30823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HISTOGRAM_STATS: 30843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processHistogramStats(internal_evt->stats_data); 30853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_CROP_INFO: 30873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZoomEvent(internal_evt->crop_data); 30883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ASD_UPDATE: 30903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processASDUpdate(internal_evt->asd_data); 30913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_LED_MODE_OVERRIDE: 30933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 30943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AWB_UPDATE: 30963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->transAwbMetaToParams(internal_evt->awb_data); 30973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 30983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AE_UPDATE: 30993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAEInfo(internal_evt->ae_data); 31003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_POS_UPDATE: 31023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processFocusPositionInfo(internal_evt->focus_pos); 31033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HDR_UPDATE: 31053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processHDRData(internal_evt->hdr_data); 31063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_RETRO_AEC_UNLOCK: 31083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processRetroAECUnlock(); 31093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ZSL_CAPTURE_DONE: 31113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZSLCaptureDone(); 31123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3113cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel case QCAMERA_INTERNAL_EVT_DUAL_CAMERA_FOV_CONTROL: 3114c2ee3304e16253ceab19f9be91c5da84233940f3Thierry Strudel m_parent->processDualCamFovControl(); 3115cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel break; 31169ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel case QCAMERA_INTERNAL_EVT_LED_CALIB_UPDATE: 31179ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel rc = m_parent->processLEDCalibration(internal_evt->led_calib_result); 31189ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel break; 31193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 31203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 31223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 31233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_NOTIFY: 31253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 31263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 31273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (cam_evt->server_event_type) { 31283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case CAM_EVENT_TYPE_DAEMON_DIED: 31293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 31303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 31313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel CAMERA_ERROR_SERVER_DIED, 31323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 0); 31333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 31343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 31363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Invalid internal event %d in state(%d)", 31373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_evt->server_event_type, m_state); 31383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 31403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 31413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 31433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 31443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_jpeg_evt_payload_t *jpeg_job = 31453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_jpeg_evt_payload_t *)payload; 31463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processJpegNotify(jpeg_job); 31473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 31483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SNAPSHOT_DONE: 31503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 31513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelLiveSnapshot(); 31523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_RECORDING; 31533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 31543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 31553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 31563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalEvtResult(&result); 31573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 31583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_THERMAL_NOTIFY: 31603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 31613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateThermalLevel(payload); 31623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 31633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 31653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 31663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 31673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 31683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 31693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 31703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 31713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 31723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 31733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : procEvtPreviewPicTakingState 31743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 31753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: finite state machine function to handle event in state of 31763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * QCAMERA_SM_STATE_PREVIEW_PIC_TAKING. 31773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 31783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : 31793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @evt : event to be processed 31803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @payload : event payload. Can be NULL if not needed. 31813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 31823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : int32_t type of status 31833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * NO_ERROR -- success 31843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * none-zero failure code 31853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 31863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint32_t QCameraStateMachine::procEvtPreviewPicTakingState(qcamera_sm_evt_enum_t evt, 31873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *payload) 31883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 31893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t rc = NO_ERROR; 31903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_api_result_t result; 31913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(&result, 0, sizeof(qcamera_api_result_t)); 31923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 31933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("event (%d)", evt); 31943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (evt) { 31953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_CALLBACKS: 31963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 31973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_setcb_payload_t *setcbs = 31983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_setcb_payload_t *)payload; 31993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->setCallBacks(setcbs->notify_cb, 32003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb, 32013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->data_cb_timestamp, 32023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->get_memory, 32033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel setcbs->user); 32043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 32053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 32063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 32073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 32083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 32093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 32103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 32113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 32123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->enableMsgType(*((int32_t *)payload)); 32133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 32143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 32153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 32163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 32173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 32183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 32193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 32203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 32213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->disableMsgType(*((int32_t *)payload)); 32223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 32233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 32243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 32253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 32263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 32273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 32283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 32293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 32303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int enabled = m_parent->msgTypeEnabled(*((int32_t *)payload)); 32313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 32323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 32333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 32343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = enabled; 32353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 32363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 32373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 32383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS: 32393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 32403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel bool needRestart = false; 32413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateParameters((char*)payload, needRestart); 32423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 32433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 32443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 32453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 32463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 32473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 32483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_STOP: 32493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 32503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // need restart preview for parameters to take effect 32513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("Stopping preview..."); 32523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // stop preview 32533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->stopPreview(); 32543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Clear memory pools 32553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->m_memoryPool.clear(); 32563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 32573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 32583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 32593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 32603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 32613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 32623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_COMMIT: 32633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 32643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // commit parameter changes to server 32653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->commitParameterChanges(); 32663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 32673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 32683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 32693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 32703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 32713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 32723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PARAMS_RESTART: 32733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 32743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // start preview again 32753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 32763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 32773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel applyDelayedMsgs(); 32783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 32793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 32803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 32813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 32823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 32833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 32843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PIC_TAKING; 32853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 32863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->setNeedRestart(false); 32873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 32883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 32893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 32903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 32913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 32923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 32933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_GET_PARAMS: 32943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 32953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.params = m_parent->getParameters(); 32963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = result.params ? NO_ERROR : UNKNOWN_ERROR; 32973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 32983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 32993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 33003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 33013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 33023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 33033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PUT_PARAMS: 33043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 33053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->putParameters((char*)payload); 33063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 33073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 33083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 33093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 33103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 33113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 33123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREVIEW_ENABLED: 33133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 33143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 33153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 33163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 33173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 33183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 1; 33193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 33203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 33213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 33223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RECORDING_ENABLED: 33233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 33243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 33253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 33263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 33273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 33283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.enabled = 0; 33293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 33303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 33313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 33323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 33333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 33343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->storeMetaDataInBuffers(*((int *)payload)); 33353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 33363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 33373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 33383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 33393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 33403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 33413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_DUMP: 33423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 33433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->dump(*((int *)payload)); 33443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 33453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 33463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 33473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 33483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 33493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 33503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_AUTO_FOCUS: 33513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 33523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->autoFocus(); 33533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 33543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 33553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 33563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 33573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 33583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 33593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 33603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 33613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelAutoFocus(); 33623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 33633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 33643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 33653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 33663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 33673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 33683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SEND_COMMAND: 33693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 33703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_command_payload_t *cmd_payload = 33713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_command_payload_t *)payload; 33723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->sendCommand(cmd_payload->cmd, 33733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg1, 33743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cmd_payload->arg2); 33753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#ifndef VANILLA_HAL 33763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ( CAMERA_CMD_LONGSHOT_OFF == cmd_payload->cmd ) { 33773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // move state to previewing state 33783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 33793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 33803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#endif 33813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 33823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 33833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 33843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 33853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 33863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 33873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 33883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 33893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->releaseRecordingFrame((const void *)payload); 33903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 33913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 33923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 33933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 33943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 33953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 33963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_CANCEL_PICTURE: 33973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 33983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isZSLMode() || m_parent->isLongshotEnabled()) { 33993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelPicture(); 34003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 34013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelLiveSnapshot(); 34023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 34033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 34043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 34053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 34063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 34073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 34083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 34093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 34103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_PREVIEW: 34113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 34123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isZSLMode()) { 34133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // cancel picture first 34143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelPicture(); 34153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->stopChannel(QCAMERA_CH_TYPE_ZSL); 34163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else if (m_parent->isLongshotEnabled()) { 34173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // just cancel picture 34183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelPicture(); 34193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 34203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelLiveSnapshot(); 34213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->stopChannel(QCAMERA_CH_TYPE_PREVIEW); 34223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 34233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // unprepare preview 34243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->unpreparePreview(); 34253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 34263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 34273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 34283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 34293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 34303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 34313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 34323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_START_RECORDING: 34333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 34343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isZSLMode()) { 34353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d) in ZSL mode", evt, m_state); 34363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 34373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else if (m_parent->isLongshotEnabled()) { 34383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d) in Longshot mode", evt, m_state); 34393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 34403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 34413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preStartRecording(); 34423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 34433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 34443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 34453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 34463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 34473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 34483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 34493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_RECORDING: 34503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 34513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isZSLMode()) { 34523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d) in ZSL mode", 34533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel evt, m_state); 34543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 34553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else if (m_parent->isLongshotEnabled()) { 34563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d) in Longshot mode", 34573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel evt, m_state); 34583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 34593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 34603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startRecording(); 34613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 34623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_VIDEO_PIC_TAKING; 34633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 34643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 34653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 34663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 34673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 34683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 34693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 34703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 34713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_REG_FACE_IMAGE: 34723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 34733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t faceID = 0; 34743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_evt_reg_face_payload_t *reg_payload = 34753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_evt_reg_face_payload_t *)payload; 34763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->registerFaceImage(reg_payload->img_ptr, 34773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel reg_payload->config, 34783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel faceID); 34793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 34803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 34813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 34823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.handle = faceID; 34833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 34843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 34853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 34863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PRE_TAKE_PICTURE: 34873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 34883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ( m_parent->isLongshotEnabled() ) { 34893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // no ops here, need to singal NO_ERROR 34903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = NO_ERROR; 34913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 34923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 34933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 34943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 34953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 34963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 34973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 34983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 34993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 35003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 35023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_TAKE_PICTURE: 35033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 35043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ( m_parent->isLongshotEnabled() ) { 35053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->longShot(); 35063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 35073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 35083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 35093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 35113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 35123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 35133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 35143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 35153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 35173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 35183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 35193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 35203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("Prepare Snapshot"); 35213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isRetroPicture()) { 35223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("Prepare Snapshot in Retro Mode"); 35233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->prepareHardwareForSnapshot(FALSE); 35243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc != NO_ERROR) { 35253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("prepareHardwareForSnapshot failed %d", 35263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc); 35273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 35283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 35293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 35303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 35313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel else { 35343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", 35353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel evt, m_state); 35363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 35373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 35383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 35393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 35403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 35413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 35443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_STOP_RECORDING: 35453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_PREPARE_PREVIEW: 35463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_PREVIEW: 35473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 35483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 35493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RELEASE: 35503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 35513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Error!! cannot handle evt(%d) in state(%d)", evt, m_state); 35523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = INVALID_OPERATION; 35533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 35543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 35553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 35563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 35573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 35593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_INTERNAL: 35603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 35613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_sm_internal_evt_payload_t *internal_evt = 35623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_sm_internal_evt_payload_t *)payload; 35633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (internal_evt->evt_type) { 35643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_UPDATE: 35653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAutoFocusEvent(internal_evt->focus_data); 35663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 35673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_PREP_SNAPSHOT_DONE: 35683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("Received QCAMERA_INTERNAL_EVT_PREP_SNAPSHOT_DONE event"); 35693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isRetroPicture()) { 35703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->processPrepSnapshotDoneEvent(internal_evt->prep_snapshot_state); 35713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("Retro picture"); 35723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = NO_ERROR; 35733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = QCAMERA_SM_EVT_PREPARE_SNAPSHOT; 35743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 35753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 35763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel else { 35783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Invalid Case for " 35793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel "QCAMERA_INTERNAL_EVT_READY_FOR_SNAPSHOT event"); 35803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 35823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FACE_DETECT_RESULT: 35833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processFaceDetectionResult(&internal_evt->faces_data); 35843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 35853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_READY_FOR_SNAPSHOT: 35863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // This is valid only in Retro picture Mode 35873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isRetroPicture()) { 35883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("Received QCAMERA_INTERNAL_EVT_READY_FOR_SNAPSHOT event"); 35893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = NO_ERROR; 35903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = QCAMERA_SM_EVT_TAKE_PICTURE; 35913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 35923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 35933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel else { 35953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("Wrong Case for QCAMERA_INTERNAL_EVT_READY_FOR_SNAPSHOT event"); 35963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 35973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 35983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HISTOGRAM_STATS: 35993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processHistogramStats(internal_evt->stats_data); 36003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_CROP_INFO: 36023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZoomEvent(internal_evt->crop_data); 36033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ASD_UPDATE: 36053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processASDUpdate(internal_evt->asd_data); 36063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_LED_MODE_OVERRIDE: 36083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 36093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AWB_UPDATE: 36113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->transAwbMetaToParams(internal_evt->awb_data); 36123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_AE_UPDATE: 36143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processAEInfo(internal_evt->ae_data); 36153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_FOCUS_POS_UPDATE: 36173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processFocusPositionInfo(internal_evt->focus_pos); 36183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_HDR_UPDATE: 36203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processHDRData(internal_evt->hdr_data); 36213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_RETRO_AEC_UNLOCK: 36233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processRetroAECUnlock(); 36243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_INTERNAL_EVT_ZSL_CAPTURE_DONE: 36263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processZSLCaptureDone(); 36273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 3628cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel case QCAMERA_INTERNAL_EVT_DUAL_CAMERA_FOV_CONTROL: 3629c2ee3304e16253ceab19f9be91c5da84233940f3Thierry Strudel m_parent->processDualCamFovControl(); 3630cca4d9c3be40fe18502f3237f7993b41175ef3a7Thierry Strudel break; 36319ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel case QCAMERA_INTERNAL_EVT_LED_CALIB_UPDATE: 36329ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel rc = m_parent->processLEDCalibration(internal_evt->led_calib_result); 36339ec39c64004dda78086849a21087cb217d0bf6acThierry Strudel break; 36343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 36353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 36373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 36383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_EVT_NOTIFY: 36403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 36413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 36423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (cam_evt->server_event_type) { 36433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case CAM_EVENT_TYPE_DAEMON_DIED: 36443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 36453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Send internal events to stop indefinite wait on prepare 36463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // snapshot done event. 36473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 36483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = QCAMERA_SM_EVT_PREPARE_SNAPSHOT; 36493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 36503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 36513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 36523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 36533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = QCAMERA_SM_EVT_TAKE_PICTURE; 36543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 36553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 36563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 36573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 36583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel CAMERA_ERROR_SERVER_DIED, 36593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 0); 36603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 36613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case CAM_EVENT_TYPE_CAC_DONE: 36633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isCACEnabled() || m_parent->mParameters.isOEMFeatEnabled()) { 36643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("[LONG_SHOT_DBG] : Received CAC Done"); 36653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ((m_parent->isLongshotEnabled()) 36663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel && (!m_parent->isCaptureShutterEnabled())) { 36673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // play shutter sound for longshot 36683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // after CAC stage is done 36693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->playShutter(); 36703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 36713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->mCACDoneReceived = TRUE; 36723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 36733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 36753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("Invalid internal event %d in state(%d)", 36763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_evt->server_event_type, m_state); 36773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 36793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 36803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 36823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 36833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("Calling Process Jpeg Notify"); 36843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qcamera_jpeg_evt_payload_t *jpeg_job = 36853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (qcamera_jpeg_evt_payload_t *)payload; 36863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->processJpegNotify(jpeg_job); 36873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 36883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 36893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_SNAPSHOT_DONE: 36903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 36913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("Snapshot Done"); 36923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isZSLMode() || m_parent->isLongshotEnabled()) { 36933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelPicture(); 36943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 36953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->cancelLiveSnapshot(); 36963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 36973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_state = QCAMERA_SM_STATE_PREVIEWING; 36983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (m_parent->isRetroPicture()){ 36993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 37003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 37013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 37023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGL("\n Signalling for JPEG snapshot done!!"); 37033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 37043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 37053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 37063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 37073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 37083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 37093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalEvtResult(&result); 37103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 37113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 37123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_THERMAL_NOTIFY: 37133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 37143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->updateThermalLevel(payload); 37153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 37163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 37173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_STOP_PREVIEW: 37183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 37193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->stopPreview(); 37203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 37213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 37223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 37233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 37243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 37253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 37263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_EVT_RESTART_START_PREVIEW: 37273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 37283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->preparePreview(); 37293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (rc == NO_ERROR) { 37303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = m_parent->startPreview(); 37313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 37323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.status = rc; 37333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.request_api = evt; 37343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 37353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_parent->signalAPIResult(&result); 37363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 37373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 37383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 37393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGW("Cannot handle evt(%d) in state(%d)", evt, m_state); 37403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 37413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 37423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 37433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 37443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 37453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 37463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 37473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : isRecording 37483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 37493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: check if recording is in process. 37503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 37513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : None 37523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 37533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : true -- recording 37543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * false -- not in recording mode 37553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 37563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelbool QCameraStateMachine::isRecording() 37573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 37583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (m_state) { 37593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_RECORDING: 37603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_VIDEO_PIC_TAKING: 37613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return true; 37623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 37633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return false; 37643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 37653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 37663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 37673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 37683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : isPreviewRunning 37693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 37703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: check if preview is in process. 37713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 37723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : None 37733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 37743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : true -- preview running 37753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * false -- preview stopped 37763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 37773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelbool QCameraStateMachine::isPreviewRunning() 37783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 37793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (m_state) { 37803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEWING: 37813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_RECORDING: 37823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_VIDEO_PIC_TAKING: 37833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEW_PIC_TAKING: 37843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREPARE_SNAPSHOT: 37853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEW_READY: 37863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return true; 37873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 37883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return false; 37893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 37903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 37913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 37923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 37933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : isPreviewReady 37943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 37953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: check if preview is in ready state. 37963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 37973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : None 37983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 37993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : true -- preview is in ready state 38003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * false -- preview is stopped 38013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 38023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelbool QCameraStateMachine::isPreviewReady() 38033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 38043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (m_state) { 38053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEW_READY: 38063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return true; 38073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 38083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return false; 38093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 38103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 38113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 38123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 38133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : isCaptureRunning 38143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 38153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: check if image capture is in process. 38163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 38173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : None 38183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 38193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : true -- capture running 38203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * false -- capture stopped 38213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 38223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelbool QCameraStateMachine::isCaptureRunning() 38233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 38243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (m_state) { 38253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PIC_TAKING: 38263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_VIDEO_PIC_TAKING: 38273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEW_PIC_TAKING: 38283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return true; 38293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 38303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return false; 38313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 38323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 38333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 38343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : isNonZSLCaptureRunning 38353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 38363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: check if image capture is in process in non ZSL mode. 38373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 38383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : None 38393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 38403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : true -- capture running in non ZSL mode 38413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * false -- Either in not capture mode or captur is not in non ZSL mode 38423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 38433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelbool QCameraStateMachine::isNonZSLCaptureRunning() 38443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 38453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch (m_state) { 38463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PIC_TAKING: 38473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return true; 38483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel default: 38493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return false; 38503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 38513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 38523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 38533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/*=========================================================================== 38543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * FUNCTION : dump 38553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 38563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * DESCRIPTION: Composes a string based on current configuration 38573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 38583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * PARAMETERS : none 38593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 38603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * RETURN : Formatted string 38613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *==========================================================================*/ 38623d63919a23d7e7954e160c48c36713267106c3c2Thierry StrudelString8 QCameraStateMachine::dump() 38633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 38643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel String8 str("\n"); 38653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char s[128]; 38663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 38673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, "Is Preview Running: %d\n", isPreviewRunning()); 38683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str += s; 38693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 38703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, "Is Capture Running: %d\n", isCaptureRunning()); 38713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str += s; 38723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 38733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, "Is Non ZSL Capture Running: %d\n", 38743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel isNonZSLCaptureRunning()); 38753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str += s; 38763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 38773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, "Current State: %d \n", m_state); 38783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str += s; 38793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 38803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel switch(m_state){ 38813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEW_STOPPED: 38823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, " QCAMERA_SM_STATE_PREVIEW_STOPPED \n"); 38833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 38843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 38853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEW_READY: 38863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, " QCAMERA_SM_STATE_PREVIEW_READY \n"); 38873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 38883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 38893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEWING: 38903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, " QCAMERA_SM_STATE_PREVIEWING \n"); 38913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 38923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 38933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREPARE_SNAPSHOT: 38943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, " QCAMERA_SM_STATE_PREPARE_SNAPSHOT \n"); 38953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 38963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 38973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PIC_TAKING: 38983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, " QCAMERA_SM_STATE_PIC_TAKING \n"); 38993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 39003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 39013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_RECORDING: 39023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, " QCAMERA_SM_STATE_RECORDING \n"); 39033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 39043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 39053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_VIDEO_PIC_TAKING: 39063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, " QCAMERA_SM_STATE_VIDEO_PIC_TAKING \n"); 39073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 39083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 39093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel case QCAMERA_SM_STATE_PREVIEW_PIC_TAKING: 39103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(s, 128, " QCAMERA_SM_STATE_PREVIEW_PIC_TAKING \n"); 39113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 39123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 39133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str += s; 39143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 39153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return str; 39163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 39173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 39183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; // namespace qcamera 3919