16f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Copyright (c) 2012-2013, The Linux Foundataion. All rights reserved. 26f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* 36f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* Redistribution and use in source and binary forms, with or without 46f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* modification, are permitted provided that the following conditions are 56f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* met: 66f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* * Redistributions of source code must retain the above copyright 76f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* notice, this list of conditions and the following disclaimer. 86f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* * Redistributions in binary form must reproduce the above 96f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* copyright notice, this list of conditions and the following 106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* disclaimer in the documentation and/or other materials provided 116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* with the distribution. 126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* * Neither the name of The Linux Foundation nor the names of its 136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* contributors may be used to endorse or promote products derived 146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* from this software without specific prior written permission. 156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* 166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev* 286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev*/ 296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define LOG_TAG "QCameraStateMachine" 316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include <utils/Errors.h> 336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include "QCamera2HWI.h" 346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include "QCameraStateMachine.h" 356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevnamespace qcamera { 376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : smEvtProcRoutine 406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: Statemachine process thread routine to handle events 426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * in different state. 436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @data : ptr to QCameraStateMachine object 466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevvoid *QCameraStateMachine::smEvtProcRoutine(void *data) 506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int running = 1, ret; 526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev QCameraStateMachine *pme = (QCameraStateMachine *)data; 536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: E", __func__); 556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev do { 566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev do { 576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ret = cam_sem_wait(&pme->cmd_sem); 586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (ret != 0 && errno != EINVAL) { 596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cam_sem_wait error (%s)", 606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, strerror(errno)); 616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NULL; 626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } while (ret != 0); 646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // we got notified about new cmd avail in cmd queue 666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // first check API cmd queue 676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_cmd_t *node = (qcamera_sm_cmd_t *)pme->api_queue.dequeue(); 686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (node == NULL) { 696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // no API cmd, then check evt cmd queue 706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev node = (qcamera_sm_cmd_t *)pme->evt_queue.dequeue(); 716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (node != NULL) { 736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (node->cmd) { 746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_CMD_TYPE_API: 756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pme->stateMachine(node->evt, node->evt_payload); 766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // API is in a way sync call, so evt_payload is managed by HWI 776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // no need to free payload for API 786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_CMD_TYPE_EVT: 806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pme->stateMachine(node->evt, node->evt_payload); 816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // EVT is async call, so payload need to be free after use 836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev free(node->evt_payload); 846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev node->evt_payload = NULL; 856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_CMD_TYPE_EXIT: 876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev running = 0; 886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev free(node); 936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev node = NULL; 946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } while (running); 966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: X", __func__); 976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NULL; 986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 1016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : QCameraStateMachine 1026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: constructor of QCameraStateMachine. Will start process thread 1046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 1066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @ctrl : ptr to HWI object 1076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 1096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 1106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevQCameraStateMachine::QCameraStateMachine(QCamera2HardwareInterface *ctrl) : 1116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev api_queue(), 1126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev evt_queue() 1136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 1146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent = ctrl; 1156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 1166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_pid = 0; 1176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_sem_init(&cmd_sem, 0); 1186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pthread_create(&cmd_pid, 1196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev NULL, 1206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev smEvtProcRoutine, 1216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev this); 1226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 1236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 1256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : ~QCameraStateMachine 1266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: desctructor of QCameraStateMachine. Will stop process thread. 1286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 1306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 1326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 1336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevQCameraStateMachine::~QCameraStateMachine() 1346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 1356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (cmd_pid != 0) { 1366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_cmd_t *node = 1376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_cmd_t *)malloc(sizeof(qcamera_sm_cmd_t)); 1386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL != node) { 1396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(node, 0, sizeof(qcamera_sm_cmd_t)); 1406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev node->cmd = QCAMERA_SM_CMD_TYPE_EXIT; 1416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev api_queue.enqueue((void *)node); 1436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_sem_post(&cmd_sem); 1446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* wait until cmd thread exits */ 1466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (pthread_join(cmd_pid, NULL) != 0) { 1476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: pthread dead already\n", __func__); 1486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_pid = 0; 1516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_sem_destroy(&cmd_sem); 1536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 1546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 1566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : procAPI 1576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: process incoming API request from framework layer. 1596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 1616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt : event to be processed 1626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @api_payload : API payload. Can be NULL if not needed. 1636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 1656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 1666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 1676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 1686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraStateMachine::procAPI(qcamera_sm_evt_enum_t evt, 1696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *api_payload) 1706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 1716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_cmd_t *node = 1726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_cmd_t *)malloc(sizeof(qcamera_sm_cmd_t)); 1736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL == node) { 1746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: No memory for qcamera_sm_cmd_t", __func__); 1756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_MEMORY; 1766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(node, 0, sizeof(qcamera_sm_cmd_t)); 1796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev node->cmd = QCAMERA_SM_CMD_TYPE_API; 1806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev node->evt = evt; 1816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev node->evt_payload = api_payload; 1826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (api_queue.enqueue((void *)node)) { 1836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_sem_post(&cmd_sem); 1846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 1856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 1866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev free(node); 1876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return UNKNOWN_ERROR; 1886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 1906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 1926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : procEvt 1936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: process incoming envent from mm-camera-interface and 1956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * mm-jpeg-interface. 1966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 1986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt : event to be processed 1996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt_payload : event payload. Can be NULL if not needed. 2006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 2016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 2026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 2036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 2046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 2056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraStateMachine::procEvt(qcamera_sm_evt_enum_t evt, 2066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *evt_payload) 2076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 2086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_cmd_t *node = 2096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_cmd_t *)malloc(sizeof(qcamera_sm_cmd_t)); 2106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL == node) { 2116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: No memory for qcamera_sm_cmd_t", __func__); 2126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_MEMORY; 2136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 2146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(node, 0, sizeof(qcamera_sm_cmd_t)); 2166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev node->cmd = QCAMERA_SM_CMD_TYPE_EVT; 2176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev node->evt = evt; 2186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev node->evt_payload = evt_payload; 2196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (evt_queue.enqueue((void *)node)) { 2206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_sem_post(&cmd_sem); 2216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 2226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 2236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev free(node); 2246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return UNKNOWN_ERROR; 2256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 2266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 2276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 2296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : stateMachine 2306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 2316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: finite state machine entry function. Depends on state, 2326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * incoming event will be handled differently. 2336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 2346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 2356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt : event to be processed 2366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @payload : event payload. Can be NULL if not needed. 2376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 2386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 2396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 2406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 2416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 2426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraStateMachine::stateMachine(qcamera_sm_evt_enum_t evt, void *payload) 2436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 2446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 2456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (m_state) { 2466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_PREVIEW_STOPPED: 2476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = procEvtPreviewStoppedState(evt, payload); 2486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 2496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_PREVIEW_READY: 2506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = procEvtPreviewReadyState(evt, payload); 2516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 2526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_PREVIEWING: 2536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = procEvtPreviewingState(evt, payload); 2546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 2556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_PREPARE_SNAPSHOT: 2566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = procEvtPrepareSnapshotState(evt, payload); 2576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 2586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_PIC_TAKING: 2596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = procEvtPicTakingState(evt, payload); 2606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 2616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_RECORDING: 2626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = procEvtRecordingState(evt, payload); 2636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 2646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_VIDEO_PIC_TAKING: 2656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = procEvtVideoPicTakingState(evt, payload); 2666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 2676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_PREVIEW_PIC_TAKING: 2686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = procEvtPreviewPicTakingState(evt, payload); 2696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 2706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 2716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 2726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 2736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 2756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 2766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 2786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : procEvtPreviewStoppedState 2796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 2806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: finite state machine function to handle event in state of 2816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * QCAMERA_SM_STATE_PREVIEW_STOPPED. 2826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 2836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 2846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt : event to be processed 2856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @payload : event payload. Can be NULL if not needed. 2866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 2876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 2886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 2896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 2906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 2916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraStateMachine::procEvtPreviewStoppedState(qcamera_sm_evt_enum_t evt, 2926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *payload) 2936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 2946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 2956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_api_result_t result; 2966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&result, 0, sizeof(qcamera_api_result_t)); 2976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (evt) { 2996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 3006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 3016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->setPreviewWindow((struct preview_stream_ops *)payload); 3026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 3036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 3046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 3056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 3066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 3076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 3086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_CALLBACKS: 3096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 3106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_setcb_payload_t *setcbs = 3116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_setcb_payload_t *)payload; 3126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->setCallBacks(setcbs->notify_cb, 3136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb, 3146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb_timestamp, 3156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->get_memory, 3166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->user); 3176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 3186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 3196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 3206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 3216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 3226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 3236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 3246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 3256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->enableMsgType(int32_t(payload)); 3266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 3276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 3286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 3296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 3306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 3316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 3326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 3336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 3346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->disableMsgType(int32_t(payload)); 3356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 3366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 3376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 3386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 3396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 3406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 3416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 3426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 3436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int enabled = m_parent->msgTypeEnabled(int32_t(payload)); 3446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 3456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 3466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 3476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = enabled; 3486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 3496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 3506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 3516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PARAMS: 3526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 3536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool needRestart = false; 3546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->updateParameters((char*)payload, needRestart); 3556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 3566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->commitParameterChanges(); 3576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 3586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 3596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 3606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 3616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 3626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 3636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 3646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_GET_PARAMS: 3656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 3666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.params = m_parent->getParameters(); 3676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 3686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 3696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 3706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 3716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 3726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 3736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 3746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PUT_PARAMS: 3756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 3766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->putParameters((char*)payload); 3776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 3786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 3796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 3806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 3816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 3826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 3836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_PREVIEW: 3846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 3856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_parent->mPreviewWindow == NULL) { 3866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->preparePreview(); 3876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(rc == NO_ERROR) { 3886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // preview window is not set yet, move to previewReady state 3896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_READY; 3906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 3916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: preparePreview failed",__func__); 3926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 3936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 3946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->preparePreview(); 3956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 3966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->startPreview(); 3976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 3986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->unpreparePreview(); 3996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 4006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // start preview success, move to previewing state 4016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEWING; 4026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 4066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 4076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 4096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 4116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 4126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 4136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->preparePreview(); 4146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 4156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->startPreview(); 4166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 4176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->unpreparePreview(); 4186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 4196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEWING; 4206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 4236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 4246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 4266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 4286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_PREVIEW: 4296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 4306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // no op needed here 4316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: already in preview stopped state, do nothing", __func__); 4326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = NO_ERROR; 4336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 4346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 4366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 4386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREVIEW_ENABLED: 4396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RECORDING_ENABLED: 4406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 4416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = NO_ERROR; 4426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 4436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 4446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 0; 4456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 4466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 4486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE: 4496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 4506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->release(); 4516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 4526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 4536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 4556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 4576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 4586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 4596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->storeMetaDataInBuffers(int(payload)); 4606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 4616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 4626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 4646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 4666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DUMP: 4676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 4686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->dump((int)payload); 4696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 4706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 4716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 4736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 4756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SEND_COMMAND: 4766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 4776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_command_payload_t *cmd_payload = 4786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_command_payload_t *)payload; 4796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->sendCommand(cmd_payload->cmd, 4806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg1, 4816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg2); 4826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 4836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 4846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 4856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 4866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 4876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 4886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_RECORDING: 4896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_RECORDING: 4906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 4916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 4926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_TAKE_PICTURE: 4936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_AUTO_FOCUS: 4946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 4956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 4966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 4976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 4986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 4996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 5006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 5016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 5026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 5036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_CANCEL_PICTURE: 5046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 5056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // no op needed here 5066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: No ops for evt(%d) in state(%d)", __func__, evt, m_state); 5076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = NO_ERROR; 5086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 5096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 5106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 5116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 5126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 5136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 5146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 5156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelAutoFocus(); 5166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 5176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 5186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 5196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 5206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 5216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 5226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_REG_FACE_IMAGE: 5236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 5246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t faceID = 0; 5256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_reg_face_payload_t *reg_payload = 5266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_reg_face_payload_t *)payload; 5276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->registerFaceImage(reg_payload->img_ptr, 5286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev reg_payload->config, 5296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceID); 5306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 5316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 5326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 5336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.handle = faceID; 5346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 5356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 5366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 537744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case QCAMERA_SM_EVT_THERMAL_NOTIFY: 538744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 539744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy rc = m_parent->updateThermalLevel( 540744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy *(qcamera_thermal_level_enum_t *)&payload); 541744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 542744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 5436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_NOTIFY: 544744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 545744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 546744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy switch (cam_evt->server_event_type) { 547744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case CAM_EVENT_TYPE_DAEMON_DIED: 548744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 549744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 550744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CAMERA_ERROR_SERVER_DIED, 551744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 0); 552744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 553744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 554744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy default: 555744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy ALOGE("%s: Invalid internal event %d in state(%d)", 556744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy __func__, cam_evt->server_event_type, m_state); 557744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 558744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 559744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 560744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 561744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case QCAMERA_SM_EVT_EVT_INTERNAL: 5626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 5636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SNAPSHOT_DONE: 5646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 5656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 5666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 5676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 5686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 5706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 5716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 5736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : procEvtPreviewReadyState 5746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 5756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: finite state machine function to handle event in state of 5766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * QCAMERA_SM_STATE_PREVIEW_READY. 5776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 5786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 5796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt : event to be processed 5806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @payload : event payload. Can be NULL if not needed. 5816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 5826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 5836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 5846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 5856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 5866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraStateMachine::procEvtPreviewReadyState(qcamera_sm_evt_enum_t evt, 5876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *payload) 5886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 5896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 5906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_api_result_t result; 5916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&result, 0, sizeof(qcamera_api_result_t)); 5926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (evt) { 5946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 5956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 5966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->setPreviewWindow((struct preview_stream_ops *)payload); 5976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_parent->mPreviewWindow != NULL) { 5986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->startPreview(); 5996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 6006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->unpreparePreview(); 6016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 6026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 6036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEWING; 6046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 6076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 6086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 6096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 6116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 6136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_CALLBACKS: 6146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 6156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_setcb_payload_t *setcbs = 6166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_setcb_payload_t *)payload; 6176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->setCallBacks(setcbs->notify_cb, 6186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb, 6196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb_timestamp, 6206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->get_memory, 6216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->user); 6226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 6236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 6246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 6266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 6286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 6296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 6306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->enableMsgType(int32_t(payload)); 6316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 6326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 6336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 6356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 6376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 6386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 6396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->disableMsgType(int32_t(payload)); 6406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 6416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 6426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 6446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 6466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 6476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 6486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int enabled = m_parent->msgTypeEnabled(int32_t(payload)); 6496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 6506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 6516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 6526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = enabled; 6536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 6546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 6566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PARAMS: 6576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 6586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool needRestart = false; 6596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->updateParameters((char*)payload, needRestart); 6606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 6616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (needRestart) { 6626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // need restart preview for parameters to take effect 6636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->unpreparePreview(); 6646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // commit parameter changes to server 6656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->commitParameterChanges(); 6666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // prepare preview again 6676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->preparePreview(); 6686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 6696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 6706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 6726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->commitParameterChanges(); 6736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 6766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 6776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 6786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 6806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 6826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_GET_PARAMS: 6836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 6846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.params = m_parent->getParameters(); 6856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 6866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 6876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 6886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 6896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 6906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 6926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PUT_PARAMS: 6936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 6946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->putParameters((char*)payload); 6956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 6966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 6976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 6986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 6996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 7016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_PREVIEW: 7026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 7036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // no ops here 7046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 7056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 7066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 7076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 7086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 7096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 7116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_PREVIEW: 7126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 7136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->unpreparePreview(); 7146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = 0; 7156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 7166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 7176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 7186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 7196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 7206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 7226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREVIEW_ENABLED: 7236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 7246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 7256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 7266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 7276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 7286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 1; 7296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 7306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 7326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RECORDING_ENABLED: 7336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 7346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = 0; 7356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 7366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 7376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 7386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 0; 7396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 7406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 7426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 7436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 7446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->storeMetaDataInBuffers(int(payload)); 7456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 7466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 7476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 7486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 7496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 7516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DUMP: 7526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 7536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->dump((int)payload); 7546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 7556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 7566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 7576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 7586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 7606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_AUTO_FOCUS: 7616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 7626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->autoFocus(); 7636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 7646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 7656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 7666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 7676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 7696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 7706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 7716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelAutoFocus(); 7726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 7736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 7746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 7756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 7766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 7786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SEND_COMMAND: 7796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 7806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_command_payload_t *cmd_payload = 7816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_command_payload_t *)payload; 7826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->sendCommand(cmd_payload->cmd, 7836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg1, 7846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg2); 7856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 7866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 7876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 7886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 7896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 7916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_REG_FACE_IMAGE: 7926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 7936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t faceID = 0; 7946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_reg_face_payload_t *reg_payload = 7956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_reg_face_payload_t *)payload; 7966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->registerFaceImage(reg_payload->img_ptr, 7976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev reg_payload->config, 7986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceID); 7996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 8006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 8016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 8026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.handle = faceID; 8036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 8046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 8056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 8066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 8076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_RECORDING: 8086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_RECORDING: 8096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 8106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_TAKE_PICTURE: 8116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_CANCEL_PICTURE: 8126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 8136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE: 8146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 8156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 8166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 8176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 8186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 8196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 8206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 8216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 8226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 8236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_NOTIFY: 824744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 825744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 826744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy switch (cam_evt->server_event_type) { 827744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case CAM_EVENT_TYPE_DAEMON_DIED: 828744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 829744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 830744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CAMERA_ERROR_SERVER_DIED, 831744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 0); 832744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 833744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 834744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy default: 835744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy ALOGE("%s: Invalid internal event %d in state(%d)", 836744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy __func__, cam_evt->server_event_type, m_state); 837744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 838744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 839744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 840744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 841744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case QCAMERA_SM_EVT_EVT_INTERNAL: 8426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 8436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SNAPSHOT_DONE: 8446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_THERMAL_NOTIFY: 8456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 8466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 8476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 8486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 8496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 8506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 8516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 8526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 8536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 8546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : procEvtPreviewingState 8556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 8566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: finite state machine function to handle event in state of 8576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * QCAMERA_SM_STATE_PREVIEWING. 8586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 8596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 8606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt : event to be processed 8616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @payload : event payload. Can be NULL if not needed. 8626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 8636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 8646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 8656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 8666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 8676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraStateMachine::procEvtPreviewingState(qcamera_sm_evt_enum_t evt, 8686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *payload) 8696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 8706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 8716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_api_result_t result; 8726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&result, 0, sizeof(qcamera_api_result_t)); 8736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 8746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (evt) { 8756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 8766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 8776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Error setting preview window during previewing 8786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Cannot set preview window when preview is running"); 8796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 8806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 8816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 8826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 8836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 8846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 8856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 8866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_CALLBACKS: 8876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 8886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_setcb_payload_t *setcbs = 8896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_setcb_payload_t *)payload; 8906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->setCallBacks(setcbs->notify_cb, 8916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb, 8926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb_timestamp, 8936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->get_memory, 8946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->user); 8956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 8966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 8976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 8986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 8996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 9016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 9026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 9036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->enableMsgType(int32_t(payload)); 9046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 9056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 9066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 9086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 9106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 9116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 9126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->disableMsgType(int32_t(payload)); 9136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 9146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 9156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 9176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 9196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 9206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 9216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int enabled = m_parent->msgTypeEnabled(int32_t(payload)); 9226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 9236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 9246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 9256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = enabled; 9266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 9276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 9296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PARAMS: 9306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 9316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool needRestart = false; 9326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->updateParameters((char*)payload, needRestart); 9336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 9346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (needRestart) { 9356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // need restart preview for parameters to take effect 9366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // stop preview 9376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->stopPreview(); 9386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // commit parameter changes to server 9396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->commitParameterChanges(); 9406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // start preview again 9416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->preparePreview(); 9426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 9436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->startPreview(); 9446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 9456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->unpreparePreview(); 9466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 9496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 9506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 9526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->commitParameterChanges(); 9536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 9566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 9576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 9596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 9616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_GET_PARAMS: 9626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 9636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.params = m_parent->getParameters(); 9646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 9656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 9666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 9676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 9686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 9696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 9716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PUT_PARAMS: 9726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 9736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->putParameters((char*)payload); 9746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 9756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 9766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 9786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 9806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_PREVIEW: 9816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 9826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 9836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // no ops here 9846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Already in previewing, no ops here to start preview", __func__); 9856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 9866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 9876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 9886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 9906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 9926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_PREVIEW: 9936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 9946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->stopPreview(); 9956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 9966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 9976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 9986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 9996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 10006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 10026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREVIEW_ENABLED: 10036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 10046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 10056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 10066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 10076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 10086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 1; 10096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 10106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 10126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RECORDING_ENABLED: 10136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 10146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 10156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 10166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 10176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 10186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 0; 10196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 10206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 10226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 10236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 10246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->storeMetaDataInBuffers(int(payload)); 10256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 10266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 10276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 10286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 10296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 10316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DUMP: 10326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 10336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->dump((int)payload); 10346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 10356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 10366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 10376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 10386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 10406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_AUTO_FOCUS: 10416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 10426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->autoFocus(); 10436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 10446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 10456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 10466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 10476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 10496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 10506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 10516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelAutoFocus(); 10526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 10536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 10546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 10556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 10566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 10586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_RECORDING: 10596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 10606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->startRecording(); 10616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 10626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // move state to recording state 10636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_RECORDING; 10646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 10666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 10676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 10686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 10696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 10716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 10726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 10736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->prepareHardwareForSnapshot(FALSE); 10746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 10756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Do not signal API result in this case. 10766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Need to wait for snapshot done in metadta. 10776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREPARE_SNAPSHOT; 10786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 10796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Do not change state in this case. 10806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: prepareHardwareForSnapshot failed %d", 10816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, rc); 10826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 10836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 10846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 10856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 10866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 10876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 10906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_TAKE_PICTURE: 10916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 1092744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy if ( m_parent->mParameters.getRecordingHintValue() == false) { 10936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->takePicture(); 10946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 10956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // move state to picture taking state 10966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_parent->isZSLMode()) { 10976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_PIC_TAKING; 10986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 10996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PIC_TAKING; 11006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 11026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // move state to preview stopped state 11036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 11046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 11066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 11076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 11086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 1109744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } else { 1110744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy rc = m_parent->takeLiveSnapshot(); 1111744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy if (rc == NO_ERROR ) { 1112744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_state = QCAMERA_SM_STATE_PREVIEW_PIC_TAKING; 1113744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.status = rc; 1114744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.request_api = evt; 1115744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 1116744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->signalAPIResult(&result); 1117744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 1118744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 11196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 11216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SEND_COMMAND: 11226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 11236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_command_payload_t *cmd_payload = 11246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_command_payload_t *)payload; 11256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->sendCommand(cmd_payload->cmd, 11266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg1, 11276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg2); 11286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 11296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 11306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 11316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 11326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 11346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_REG_FACE_IMAGE: 11356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 11366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t faceID = 0; 11376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_reg_face_payload_t *reg_payload = 11386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_reg_face_payload_t *)payload; 11396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->registerFaceImage(reg_payload->img_ptr, 11406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev reg_payload->config, 11416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceID); 11426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 11436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 11446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 11456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.handle = faceID; 11466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 11476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 11496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_CANCEL_PICTURE: 11506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_RECORDING: 11516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 11526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE: 11536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 11546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 11556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 11566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 11576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 11586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 11596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 11606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 11626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_INTERNAL: 11636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 11646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_internal_evt_payload_t *internal_evt = 11656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_internal_evt_payload_t *)payload; 11666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (internal_evt->evt_type) { 11676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_INTERNAL_EVT_FOCUS_UPDATE: 11686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->processAutoFocusEvent(internal_evt->focus_data); 11696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 11706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 11716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid internal event %d in state(%d)", 11726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, internal_evt->evt_type, m_state); 11736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 11746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 11776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_NOTIFY: 11786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 11796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 11806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (cam_evt->server_event_type) { 1181744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case CAM_EVENT_TYPE_DAEMON_DIED: 1182744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 1183744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 1184744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CAMERA_ERROR_SERVER_DIED, 1185744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 0); 1186744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 1187744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 11886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 11896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: no handling for server evt (%d) at this state", 11906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, cam_evt->server_event_type); 11916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 11926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 11956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_THERMAL_NOTIFY: 11966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 11976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->updateThermalLevel( 11986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *(qcamera_thermal_level_enum_t *)&payload); 11996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 12006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 12016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 12026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SNAPSHOT_DONE: 12036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 12046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 12056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 12066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 12076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 12086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 12096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 12106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 12116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 12126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : procEvtPrepareSnapshotState 12136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 12146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: finite state machine function to handle event in state of 12156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * QCAMERA_SM_STATE_PREPARE_SNAPSHOT. 12166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 12176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 12186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt : event to be processed 12196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @payload : event payload. Can be NULL if not needed. 12206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 12216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 12226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 12236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 12246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 12256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraStateMachine::procEvtPrepareSnapshotState(qcamera_sm_evt_enum_t evt, 12266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *payload) 12276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 12286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 12296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_api_result_t result; 12306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&result, 0, sizeof(qcamera_api_result_t)); 12316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 12326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (evt) { 12336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 12346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_CALLBACKS: 12356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 12366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 12376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 12386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PARAMS: 12396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_GET_PARAMS: 12406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PUT_PARAMS: 12416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_PREVIEW: 12426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 12436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_PREVIEW: 12446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREVIEW_ENABLED: 12456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RECORDING_ENABLED: 12466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 12476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DUMP: 12486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_AUTO_FOCUS: 12496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 12506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_RECORDING: 12516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_TAKE_PICTURE: 12526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SEND_COMMAND: 12536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_CANCEL_PICTURE: 12546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_RECORDING: 12556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 12566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE: 12576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 12586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 12596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 12606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 12616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 12626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 12636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 12646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 12656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 12666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_INTERNAL: 12676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 12686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_internal_evt_payload_t *internal_evt = 12696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_internal_evt_payload_t *)payload; 12706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (internal_evt->evt_type) { 12716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_INTERNAL_EVT_PREP_SNAPSHOT_DONE: 12726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGI("%s: Received QCAMERA_INTERNAL_EVT_PREP_SNAPSHOT_DONE event", 12736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__); 12746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->processPrepSnapshotDoneEvent(internal_evt->prep_snapshot_state); 12756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEWING; 12766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 12776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = NO_ERROR; 12786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = QCAMERA_SM_EVT_PREPARE_SNAPSHOT; 12796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 12806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 12816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 12826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 12836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid internal event %d in state(%d)", 12846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, internal_evt->evt_type, m_state); 12856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 12866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 12876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 12886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 12896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_NOTIFY: 1290744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 1291744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 1292744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy switch (cam_evt->server_event_type) { 1293744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case CAM_EVENT_TYPE_DAEMON_DIED: 1294744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 1295744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 1296744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CAMERA_ERROR_SERVER_DIED, 1297744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 0); 1298744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 1299744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 1300744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy default: 1301744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy ALOGE("%s: Invalid internal event %d in state(%d)", 1302744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy __func__, cam_evt->server_event_type, m_state); 1303744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 1304744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 1305744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 1306744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 13076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_THERMAL_NOTIFY: 13086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 13096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SNAPSHOT_DONE: 13106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 13116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 13126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 13136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 13156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 13166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 13176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 13186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 13196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : procEvtPicTakingState 13206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: finite state machine function to handle event in state of 13226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * QCAMERA_SM_STATE_PIC_TAKING. 13236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 13256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt : event to be processed 13266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @payload : event payload. Can be NULL if not needed. 13276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 13296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 13306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 13316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 13326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraStateMachine::procEvtPicTakingState(qcamera_sm_evt_enum_t evt, 13336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *payload) 13346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 13356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 13366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_api_result_t result; 13376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&result, 0, sizeof(qcamera_api_result_t)); 13386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 13396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (evt) { 13406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 13416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 13426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Error setting preview window during previewing 13436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Cannot set preview window when preview is running"); 13446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 13456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 13466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 13476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 13496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 13516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_CALLBACKS: 13526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 13536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_setcb_payload_t *setcbs = 13546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_setcb_payload_t *)payload; 13556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->setCallBacks(setcbs->notify_cb, 13566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb, 13576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb_timestamp, 13586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->get_memory, 13596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->user); 13606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 13616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 13626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 13646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 13666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 13676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 13686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->enableMsgType(int32_t(payload)); 13696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 13706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 13716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 13736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 13756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 13766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 13776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->disableMsgType(int32_t(payload)); 13786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 13796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 13806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 13816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 13826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 13846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 13856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 13866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int enabled = m_parent->msgTypeEnabled(int32_t(payload)); 13876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 13886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 13896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 13906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = enabled; 13916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 13926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 13946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PARAMS: 13956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 13966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool needRestart = false; 13976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->updateParameters((char*)payload, needRestart); 13986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 13996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->commitParameterChanges(); 14006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 14026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 14036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 14046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 14056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 14076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_GET_PARAMS: 14086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 14096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.params = m_parent->getParameters(); 14106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 14116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 14126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 14136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 14146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 14156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 14176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PUT_PARAMS: 14186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 14196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->putParameters((char*)payload); 14206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 14216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 14226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 14236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 14246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 14266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_PREVIEW: 14276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 14286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // cancel picture first 14296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelPicture(); 14306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 14316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 14326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 14336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 14346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 14356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 14366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 14386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREVIEW_ENABLED: 14396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 14406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 14416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 14426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 14436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 14446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 0; 14456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 14466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 14486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RECORDING_ENABLED: 14496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 14506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 14516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 14526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 14536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 14546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 0; 14556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 14566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 14586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 14596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 14606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->storeMetaDataInBuffers(int(payload)); 14616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 14626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 14636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 14646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 14656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 14676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DUMP: 14686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 14696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->dump((int)payload); 14706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 14716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 14726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 14736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 14746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 14766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_AUTO_FOCUS: 14776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 14786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->autoFocus(); 14796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 14806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 14816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 14826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 14836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 14856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 14866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 14876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelAutoFocus(); 14886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 14896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 14906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 14916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 14926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 14946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SEND_COMMAND: 14956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 14966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_command_payload_t *cmd_payload = 14976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_command_payload_t *)payload; 14986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->sendCommand(cmd_payload->cmd, 14996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg1, 15006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg2); 15016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 15026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 15036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 15046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 15056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 15076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_CANCEL_PICTURE: 15086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 15096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelPicture(); 15106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 15116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 15126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 15136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 15146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 15156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 15176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_REG_FACE_IMAGE: 15186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 15196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t faceID = 0; 15206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_reg_face_payload_t *reg_payload = 15216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_reg_face_payload_t *)payload; 15226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->registerFaceImage(reg_payload->img_ptr, 15236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev reg_payload->config, 15246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceID); 15256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 15266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 15276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 15286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.handle = faceID; 15296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 15306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 15326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_TAKE_PICTURE: 15336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_RECORDING: 15346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_RECORDING: 15356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 15366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_PREVIEW: 15376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 15386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE: 15396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 15406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 15416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 15426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 15436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 15446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 15456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 15466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 15486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_INTERNAL: 15496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 15506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_internal_evt_payload_t *internal_evt = 15516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_internal_evt_payload_t *)payload; 15526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (internal_evt->evt_type) { 15536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_INTERNAL_EVT_FOCUS_UPDATE: 15546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->processAutoFocusEvent(internal_evt->focus_data); 15556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 15566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 15576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 15586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 15616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_NOTIFY: 15626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 15636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 15646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (cam_evt->server_event_type) { 1565744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case CAM_EVENT_TYPE_DAEMON_DIED: 1566744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 1567744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 1568744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CAMERA_ERROR_SERVER_DIED, 1569744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 0); 1570744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 1571744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 15726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 15736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: no handling for server evt (%d) at this state", 15746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, cam_evt->server_event_type); 15756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 15766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 15796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 15806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 15816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_jpeg_evt_payload_t *jpeg_job = 15826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_jpeg_evt_payload_t *)payload; 15836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->processJpegNotify(jpeg_job); 15846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 15866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SNAPSHOT_DONE: 15876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 15886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelPicture(); 15896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 1590744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.status = rc; 1591744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.request_api = evt; 1592744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 1593744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->signalEvtResult(&result); 15946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 15966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_THERMAL_NOTIFY: 1597744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 1598744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy rc = m_parent->updateThermalLevel( 1599744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy *(qcamera_thermal_level_enum_t *)&payload); 1600744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 1601744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 16026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 16036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 16046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 16056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 16076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 16086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 16096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 16106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 16116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : procEvtRecordingState 16126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: finite state machine function to handle event in state of 16146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * QCAMERA_SM_STATE_RECORDING. 16156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 16176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt : event to be processed 16186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @payload : event payload. Can be NULL if not needed. 16196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 16216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 16226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 16236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 16246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraStateMachine::procEvtRecordingState(qcamera_sm_evt_enum_t evt, 16256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *payload) 16266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 16276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 16286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_api_result_t result; 16296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&result, 0, sizeof(qcamera_api_result_t)); 16306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 16316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (evt) { 16326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 16336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 16346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Error setting preview window during previewing 16356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Cannot set preview window when preview is running"); 16366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 16376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 16386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 16396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 16406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 16416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 16436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_CALLBACKS: 16446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 16456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_setcb_payload_t *setcbs = 16466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_setcb_payload_t *)payload; 16476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->setCallBacks(setcbs->notify_cb, 16486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb, 16496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb_timestamp, 16506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->get_memory, 16516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->user); 16526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 16536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 16546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 16556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 16566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 16586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 16596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 16606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->enableMsgType(int32_t(payload)); 16616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 16626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 16636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 16646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 16656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 16676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 16686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 16696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->disableMsgType(int32_t(payload)); 16706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 16716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 16726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 16736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 16746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 16766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 16776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 16786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int enabled = m_parent->msgTypeEnabled(int32_t(payload)); 16796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 16806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 16816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 16826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = enabled; 16836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 16846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 16866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PARAMS: 16876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 16886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool needRestart = false; 16896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->updateParameters((char*)payload, needRestart); 16906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 16916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (needRestart) { 16926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // cannot set parameters that requires restart during recording 16936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Cannot set parameters that requires restart during recording", 16946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__); 16956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = BAD_VALUE; 16966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 16976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->commitParameterChanges(); 16986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 17016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 17026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 17036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 17046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 17066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_GET_PARAMS: 17076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 17086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.params = m_parent->getParameters(); 17096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 17106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 17116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 17126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 17136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 17146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 17166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PUT_PARAMS: 17176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 17186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->putParameters((char*)payload); 17196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 17206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 17216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 17226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 17236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 17256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREVIEW_ENABLED: 17266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 17276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 17286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 17296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 17306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 17316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 0; 17326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 17336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 17356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RECORDING_ENABLED: 17366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 17376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 17386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 17396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 17406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 17416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 1; 17426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 17436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 17456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 17466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 17476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->storeMetaDataInBuffers(int(payload)); 17486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 17496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 17506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 17516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 17526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 17546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DUMP: 17556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 17566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->dump((int)payload); 17576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 17586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 17596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 17606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 17616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 17636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_AUTO_FOCUS: 17646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 17656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->autoFocus(); 17666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 17676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 17686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 17696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 17706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 17726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 17736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 17746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelAutoFocus(); 17756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 17766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 17776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 17786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 17796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 17816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SEND_COMMAND: 17826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 17836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_command_payload_t *cmd_payload = 17846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_command_payload_t *)payload; 17856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->sendCommand(cmd_payload->cmd, 17866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg1, 17876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg2); 17886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 17896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 17906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 17916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 17926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 17946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_TAKE_PICTURE: 17956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 17966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_VIDEO_PIC_TAKING; 17976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->takeLiveSnapshot(); 17986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 17996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_RECORDING; 18006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 18026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 18036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 18046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 18056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 18076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_RECORDING: 18086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 18096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // no ops here 18106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: already in recording state, no ops for start_recording", __func__); 18116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = 0; 18126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 18136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 18146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 18156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 18166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 18186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_RECORDING: 18196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 18206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->stopRecording(); 18216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEWING; 18226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 18236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 18246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 18256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 18266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 18286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 18296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 18306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->releaseRecordingFrame((const void *)payload); 18316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 18326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 18336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 18346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 18356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 18376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_REG_FACE_IMAGE: 18386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 18396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t faceID = 0; 18406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_reg_face_payload_t *reg_payload = 18416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_reg_face_payload_t *)payload; 18426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->registerFaceImage(reg_payload->img_ptr, 18436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev reg_payload->config, 18446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceID); 18456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 18466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 18476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 18486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.handle = faceID; 18496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 18506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 18526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREPARE_SNAPSHOT: 18536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 18546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //In Video snapshot, prepare hardware is a no-op. 18556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = NO_ERROR; 18566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 18576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 18586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 18596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 18616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_CANCEL_PICTURE: 18626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_PREVIEW: 18636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 18646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_PREVIEW: 18656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE: 18666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 18676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 18686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 18696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 18706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 18716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 18726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 18736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 18756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_INTERNAL: 18766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 18776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_internal_evt_payload_t *internal_evt = 18786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_internal_evt_payload_t *)payload; 18796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (internal_evt->evt_type) { 18806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_INTERNAL_EVT_FOCUS_UPDATE: 18816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->processAutoFocusEvent(internal_evt->focus_data); 18826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 18836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 18846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 18856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 18886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_NOTIFY: 18896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 18906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 18916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (cam_evt->server_event_type) { 1892744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case CAM_EVENT_TYPE_DAEMON_DIED: 1893744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 1894744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 1895744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CAMERA_ERROR_SERVER_DIED, 1896744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 0); 1897744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 1898744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 18996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 1900744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy ALOGE("%s: Invalid internal event %d in state(%d)", 1901744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy __func__, cam_evt->server_event_type, m_state); 19026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 19036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 19066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_THERMAL_NOTIFY: 19076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 19086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->updateThermalLevel( 19096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *(qcamera_thermal_level_enum_t *)&payload); 19106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 19126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 19136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SNAPSHOT_DONE: 19146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 19156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 19166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 19176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 19196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 19206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 19216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 19226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 19236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : procEvtVideoPicTakingState 19246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: finite state machine function to handle event in state of 19266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * QCAMERA_SM_STATE_VIDEO_PIC_TAKING. 19276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 19296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt : event to be processed 19306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @payload : event payload. Can be NULL if not needed. 19316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 19336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 19346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 19356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 19366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraStateMachine::procEvtVideoPicTakingState(qcamera_sm_evt_enum_t evt, 19376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *payload) 19386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 19396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 19406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_api_result_t result; 19416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&result, 0, sizeof(qcamera_api_result_t)); 19426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 19436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (evt) { 19446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 19456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 19466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Error setting preview window during previewing 19476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Cannot set preview window when preview is running"); 19486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 19496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 19506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 19516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 19526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 19536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 19556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_CALLBACKS: 19566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 19576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_setcb_payload_t *setcbs = 19586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_setcb_payload_t *)payload; 19596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->setCallBacks(setcbs->notify_cb, 19606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb, 19616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb_timestamp, 19626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->get_memory, 19636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->user); 19646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 19656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 19666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 19676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 19686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 19706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 19716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 19726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->enableMsgType(int32_t(payload)); 19736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 19746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 19756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 19766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 19776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 19796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 19806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 19816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->disableMsgType(int32_t(payload)); 19826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 19836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 19846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 19856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 19866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 19886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 19896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 19906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int enabled = m_parent->msgTypeEnabled(int32_t(payload)); 19916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 19926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 19936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 19946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = enabled; 19956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 19966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 19986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PARAMS: 19996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 20006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool needRestart = false; 20016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->updateParameters((char*)payload, needRestart); 20026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 20036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (needRestart) { 20046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // cannot set parameters that requires restart during recording 20056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Cannot set parameters that requires restart during recording", 20066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__); 20076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = BAD_VALUE; 20086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 20096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->commitParameterChanges(); 20106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 20136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 20146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 20166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 20186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_GET_PARAMS: 20196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 20206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.params = m_parent->getParameters(); 20216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 20226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 20236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 20246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 20256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 20266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 20286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PUT_PARAMS: 20296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 20306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->putParameters((char*)payload); 20316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 20326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 20336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 20356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 20376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREVIEW_ENABLED: 20386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 20396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 20406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 20416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 20426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 20436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 1; 20446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 20456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 20476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RECORDING_ENABLED: 20486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 20496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 20506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 20516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 20526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 20536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 1; 20546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 20556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 20576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 20586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 20596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->storeMetaDataInBuffers(int(payload)); 20606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 20616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 20626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 20646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 20666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DUMP: 20676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 20686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->dump((int)payload); 20696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 20706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 20716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 20736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 20756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_AUTO_FOCUS: 20766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 20776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->autoFocus(); 20786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 20796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 20806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 20826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 20846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 20856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 20866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelAutoFocus(); 20876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 20886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 20896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 20906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 20916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 20936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SEND_COMMAND: 20946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 20956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_command_payload_t *cmd_payload = 20966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_command_payload_t *)payload; 20976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->sendCommand(cmd_payload->cmd, 20986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg1, 20996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg2); 21006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 21016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 21026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 21036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 21046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 21066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_RECORDING: 21076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 21086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->stopRecording(); 21096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_PIC_TAKING; 21106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 21116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 21126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 21136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 21146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 21166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 21176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 21186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->releaseRecordingFrame((const void *)payload); 21196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 21206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 21216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 21226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 21236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 21256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_CANCEL_PICTURE: 21266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 21276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelLiveSnapshot(); 21286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_RECORDING; 21296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 21306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 21316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 21326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 21336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 21356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_REG_FACE_IMAGE: 21366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 21376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t faceID = 0; 21386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_reg_face_payload_t *reg_payload = 21396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_reg_face_payload_t *)payload; 21406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->registerFaceImage(reg_payload->img_ptr, 21416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev reg_payload->config, 21426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceID); 21436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 21446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 21456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 21466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.handle = faceID; 21476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 21486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 21506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_RECORDING: 21516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_PREVIEW: 21526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 21536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_PREVIEW: 21546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_TAKE_PICTURE: 21556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE: 21566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 21576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 21586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 21596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 21606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 21616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 21626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 21636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 21656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_INTERNAL: 21666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 21676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_internal_evt_payload_t *internal_evt = 21686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_internal_evt_payload_t *)payload; 21696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (internal_evt->evt_type) { 21706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_INTERNAL_EVT_FOCUS_UPDATE: 21716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->processAutoFocusEvent(internal_evt->focus_data); 21726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 21736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 21746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 21756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 21786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_NOTIFY: 21796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 21806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 21816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (cam_evt->server_event_type) { 2182744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case CAM_EVENT_TYPE_DAEMON_DIED: 2183744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 2184744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 2185744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CAMERA_ERROR_SERVER_DIED, 2186744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 0); 2187744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 2188744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 21896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 2190744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy ALOGE("%s: Invalid internal event %d in state(%d)", 2191744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy __func__, cam_evt->server_event_type, m_state); 21926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 21936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 21966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 21976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 21986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_jpeg_evt_payload_t *jpeg_job = 21996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_jpeg_evt_payload_t *)payload; 22006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->processJpegNotify(jpeg_job); 22016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 22036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SNAPSHOT_DONE: 22046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 22056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelLiveSnapshot(); 22066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_RECORDING; 2207744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.status = rc; 2208744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.request_api = evt; 2209744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 2210744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->signalEvtResult(&result); 22116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 22136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_THERMAL_NOTIFY: 22146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 22156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->updateThermalLevel( 22166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *(qcamera_thermal_level_enum_t *)&payload); 22176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 22196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 22206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 22216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 22226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 22246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 22256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 22266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 22276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 22286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : procEvtPreviewPicTakingState 22296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: finite state machine function to handle event in state of 22316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * QCAMERA_SM_STATE_PREVIEW_PIC_TAKING. 22326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 22346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @evt : event to be processed 22356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @payload : event payload. Can be NULL if not needed. 22366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 22386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 22396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 22406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 22416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraStateMachine::procEvtPreviewPicTakingState(qcamera_sm_evt_enum_t evt, 22426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *payload) 22436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 22446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 22456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_api_result_t result; 22466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&result, 0, sizeof(qcamera_api_result_t)); 22476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 22486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (evt) { 22496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_CALLBACKS: 22506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 22516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_setcb_payload_t *setcbs = 22526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_setcb_payload_t *)payload; 22536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->setCallBacks(setcbs->notify_cb, 22546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb, 22556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->data_cb_timestamp, 22566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->get_memory, 22576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setcbs->user); 22586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 22596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 22606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 22616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 22626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 22646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_ENABLE_MSG_TYPE: 22656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 22666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->enableMsgType(int32_t(payload)); 22676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 22686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 22696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 22706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 22716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 22736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DISABLE_MSG_TYPE: 22746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 22756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->disableMsgType(int32_t(payload)); 22766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 22776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 22786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 22796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 22806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 22826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_MSG_TYPE_ENABLED: 22836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 22846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int enabled = m_parent->msgTypeEnabled(int32_t(payload)); 22856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 22866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 22876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 22886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = enabled; 22896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 22906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 22926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PARAMS: 22936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 22946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool needRestart = false; 22956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->updateParameters((char*)payload, needRestart); 22966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 22976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (needRestart) { 22986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // need restart preview for parameters to take effect 22996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // stop preview 23006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->stopPreview(); 23016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // commit parameter changes to server 23026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->commitParameterChanges(); 23036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // start preview again 23046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->preparePreview(); 23056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 23066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->startPreview(); 23076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 23086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->unpreparePreview(); 23096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 23126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PIC_TAKING; 23136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 23156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->commitParameterChanges(); 23166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 23196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 23206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 23216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 23226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 23246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_GET_PARAMS: 23256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 23266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.params = m_parent->getParameters(); 23276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 23286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 23296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 23306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_PARAMS; 23316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 23326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 23346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PUT_PARAMS: 23356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 23366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->putParameters((char*)payload); 23376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 23386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 23396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 23406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 23416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 23436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_PREVIEW_ENABLED: 23446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 23456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 23466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 23476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 23486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 23496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 1; 23506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 23516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 23536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RECORDING_ENABLED: 23546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 23556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 23566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 23576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 23586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_ENABLE_FLAG; 23596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.enabled = 0; 23606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 23616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 23636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STORE_METADATA_IN_BUFS: 23646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 23656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->storeMetaDataInBuffers(int(payload)); 23666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 23676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 23686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 23696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 23706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 23726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_DUMP: 23736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 23746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->dump((int)payload); 23756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 23766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 23776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 23786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 23796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 23816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_AUTO_FOCUS: 23826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 23836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->autoFocus(); 23846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 23856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 23866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 23876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 23886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 23906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_AUTO_FOCUS: 23916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 23926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelAutoFocus(); 23936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 23946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 23956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 23966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 23976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 23996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SEND_COMMAND: 24006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 24016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_command_payload_t *cmd_payload = 24026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_command_payload_t *)payload; 24036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->sendCommand(cmd_payload->cmd, 24046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg1, 24056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cmd_payload->arg2); 24066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 24076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 24086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 24106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 24126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME: 24136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 24146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->releaseRecordingFrame((const void *)payload); 24156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 24166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 24176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 24196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 24216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_CANCEL_PICTURE: 24226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 24236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_parent->isZSLMode()) { 24246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelPicture(); 24256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 24266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelLiveSnapshot(); 24276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEWING; 24296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 24306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 24316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 24336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 24356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_PREVIEW: 24366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 24376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_parent->isZSLMode()) { 24386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // cancel picture first 24396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelPicture(); 24406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->stopChannel(QCAMERA_CH_TYPE_ZSL); 24416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 24426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelLiveSnapshot(); 24436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->stopChannel(QCAMERA_CH_TYPE_PREVIEW); 24446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // unprepare preview 24466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->unpreparePreview(); 24476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED; 24486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 24496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 24506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 24526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 24546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_RECORDING: 24556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 24566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->stopRecording(); 24576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 24586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_VIDEO_PIC_TAKING; 24596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 24616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 24626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 24646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 24666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_REG_FACE_IMAGE: 24676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 24686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t faceID = 0; 24696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_evt_reg_face_payload_t *reg_payload = 24706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_evt_reg_face_payload_t *)payload; 24716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->registerFaceImage(reg_payload->img_ptr, 24726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev reg_payload->config, 24736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceID); 24746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 24756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 24766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_HANDLE; 24776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.handle = faceID; 24786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 24796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 24816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_STOP_RECORDING: 24826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_PREVIEW: 24836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_START_NODISPLAY_PREVIEW: 24846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_TAKE_PICTURE: 24856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SET_PREVIEW_WINDOW: 24866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_RELEASE: 24876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 24886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 24896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = INVALID_OPERATION; 24906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.status = rc; 24916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.request_api = evt; 24926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 24936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_parent->signalAPIResult(&result); 24946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 24966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_INTERNAL: 24976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 24986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_sm_internal_evt_payload_t *internal_evt = 24996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_sm_internal_evt_payload_t *)payload; 25006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (internal_evt->evt_type) { 25016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_INTERNAL_EVT_FOCUS_UPDATE: 25026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->processAutoFocusEvent(internal_evt->focus_data); 25036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 25046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 25056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 25066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 25096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_EVT_NOTIFY: 25106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 25116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_camera_event_t *cam_evt = (mm_camera_event_t *)payload; 25126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (cam_evt->server_event_type) { 2513744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case CAM_EVENT_TYPE_DAEMON_DIED: 2514744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy { 2515744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->sendEvtNotify(CAMERA_MSG_ERROR, 2516744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CAMERA_ERROR_SERVER_DIED, 2517744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 0); 2518744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 2519744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy break; 25206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 2521744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy ALOGE("%s: Invalid internal event %d in state(%d)", 2522744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy __func__, cam_evt->server_event_type, m_state); 25236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 25246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 25276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_JPEG_EVT_NOTIFY: 25286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 25296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qcamera_jpeg_evt_payload_t *jpeg_job = 25306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (qcamera_jpeg_evt_payload_t *)payload; 25316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->processJpegNotify(jpeg_job); 25326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 25346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_SNAPSHOT_DONE: 25356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 25366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_parent->isZSLMode()) { 25376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelPicture(); 25386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 25396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->cancelLiveSnapshot(); 25406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_state = QCAMERA_SM_STATE_PREVIEWING; 2542744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.status = rc; 2543744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.request_api = evt; 2544744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy result.result_type = QCAMERA_API_RESULT_TYPE_DEF; 2545744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_parent->signalEvtResult(&result); 25466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 25486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_EVT_THERMAL_NOTIFY: 25496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 25506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_parent->updateThermalLevel( 25516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *(qcamera_thermal_level_enum_t *)&payload); 25526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 25546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 25556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state); 25566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 25576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 25596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 25606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 25616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 25626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 25636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : isPreviewRunning 25646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: check if preview is in process. 25666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : None 25686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : true -- preview running 25706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * false -- preview stopped 25716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 25726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevbool QCameraStateMachine::isPreviewRunning() 25736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 25746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (m_state) { 25756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_PREVIEWING: 25766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_RECORDING: 25776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_VIDEO_PIC_TAKING: 25786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case QCAMERA_SM_STATE_PREVIEW_PIC_TAKING: 2579744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy case QCAMERA_SM_STATE_PREPARE_SNAPSHOT: 25806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return true; 25816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 25826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return false; 25836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 25856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 25866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; // namespace qcamera 2587