1e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev/* 2e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevCopyright (c) 2011-2012, The Linux Foundation. All rights reserved. 3e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 4e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevRedistribution and use in source and binary forms, with or without 5e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevmodification, are permitted provided that the following conditions are 6e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevmet: 7e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev * Redistributions of source code must retain the above copyright 8e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev notice, this list of conditions and the following disclaimer. 9e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev * Redistributions in binary form must reproduce the above 10e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev copyright notice, this list of conditions and the following 11e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev disclaimer in the documentation and/or other materials provided 12e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev with the distribution. 13e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev * Neither the name of The Linux Foundation nor the names of its 14e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev contributors may be used to endorse or promote products derived 15e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev from this software without specific prior written permission. 16e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 17e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan MalchevIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev*/ 29e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 30e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#include <pthread.h> 31e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#include "mm_camera_dbg.h" 32e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#include <errno.h> 33e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#include <sys/ioctl.h> 34e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#include <sys/types.h> 35e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#include <sys/stat.h> 36e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#include <fcntl.h> 37e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#include <poll.h> 38e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#include "mm_qcamera_unit_test.h" 39e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 40e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#define MM_QCAMERA_APP_UTEST_MAX_MAIN_LOOP 4 41e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#define MM_QCAM_APP_TEST_NUM 128 42e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 43e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#define MM_QCAMERA_APP_INTERATION 5 44e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 45e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevstatic mm_app_tc_t mm_app_tc[MM_QCAM_APP_TEST_NUM]; 46e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevstatic int num_test_cases = 0; 47e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 48e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevint mm_app_tc_0(mm_camera_app_t *cam_apps) 49e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev{ 50e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int rc = MM_CAMERA_OK; 51e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int i,j; 52e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int result = 0; 53e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 54e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\n Verifying Preview on front and back camera...\n"); 55e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (cam_apps->num_cameras == 0) { 56e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:Query Failed: Num of cameras = %d\n",__func__, cam_apps->num_cameras); 57e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 58e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 59e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 60e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (i = 0; i < cam_apps->num_cameras; i++) { 61e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( mm_app_open(i) != MM_CAMERA_OK) { 62e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:mm_app_open() err=%d\n",__func__, rc); 63e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 64e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 65e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 66e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (system_dimension_set(my_cam_app.cam_open) != MM_CAMERA_OK) { 67e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:system_dimension_set() err=%d\n",__func__, rc); 68e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 69e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 70e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 71e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 72e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (j = 0; j < MM_QCAMERA_APP_INTERATION; j++) { 73e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( MM_CAMERA_OK != (rc = startPreview(my_cam_app.cam_open))) { 74e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: startPreview() err=%d\n", __func__, rc); 75e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 76e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 77e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev /*if(mm_camera_app_timedwait() == ETIMEDOUT) { 78e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: Preview Callback not received in time or qbuf failed\n", __func__); 79e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 80e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev }*/ 81e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev mm_camera_app_wait(); 82e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( MM_CAMERA_OK != (rc = stopPreview(my_cam_app.cam_open))) { 83e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: startPreview() err=%d\n", __func__, rc); 84e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 85e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 86e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev result++; 87e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 88e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( mm_app_close(my_cam_app.cam_open) != MM_CAMERA_OK) { 89e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:mm_app_close() err=%d\n",__func__, rc); 90e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 91e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 92e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 93e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 94e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (result != MM_QCAMERA_APP_INTERATION) { 95e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("%s: Preview Start/Stop Fails for Camera %d in %d iteration", __func__, i,j); 96e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 97e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 98e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 99e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 100e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev result = 0; 101e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 102e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev end: 103e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (rc == 0) { 104e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\nPassed\n"); 105e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } else { 106e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\nFailed\n"); 107e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 108e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s:END, rc = %d\n", __func__, rc); 109e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev return rc; 110e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev} 111e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 112e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevint mm_app_tc_1(mm_camera_app_t *cam_apps) 113e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev{ 114e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int rc = MM_CAMERA_OK; 115e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int i,j; 116e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int result = 0; 117e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 118e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\n Verifying Snapshot on front and back camera...\n"); 119e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (i = 0; i < cam_apps->num_cameras; i++) { 120e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( mm_app_open(i) != MM_CAMERA_OK) { 121e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:mm_app_open() err=%d\n",__func__, rc); 122e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 123e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 124e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 125e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (system_dimension_set(my_cam_app.cam_open) != MM_CAMERA_OK) { 126e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:system_dimension_set() err=%d\n",__func__, rc); 127e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 128e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 129e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 130e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 131e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( MM_CAMERA_OK != (rc = startPreview(my_cam_app.cam_open))) { 132e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: startPreview() err=%d\n", __func__, rc); 133e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 134e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 135e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (j = 0; j < MM_QCAMERA_APP_INTERATION; j++) { 136e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( MM_CAMERA_OK != (rc = takePicture_yuv(my_cam_app.cam_open))) { 137e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: TakePicture() err=%d\n", __func__, rc); 138e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 139e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 140e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev /*if(mm_camera_app_timedwait() == ETIMEDOUT) { 141e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: Snapshot/Preview Callback not received in time or qbuf Faile\n", __func__); 142e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 143e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev }*/ 144e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev mm_camera_app_wait(); 145e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev result++; 146e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 147e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( MM_CAMERA_OK != (rc = stopPreview(my_cam_app.cam_open))) { 148e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: startPreview() err=%d\n", __func__, rc); 149e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 150e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 151e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( mm_app_close(my_cam_app.cam_open) != MM_CAMERA_OK) { 152e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:mm_app_close() err=%d\n",__func__, rc); 153e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 154e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 155e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 156e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (result != MM_QCAMERA_APP_INTERATION) { 157e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("%s: Snapshot Start/Stop Fails for Camera %d in %d iteration", __func__, i,j); 158e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 159e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 160e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 161e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 162e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev result = 0; 163e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 164e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev end: 165e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (rc == 0) { 166e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\t***Passed***\n"); 167e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } else { 168e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\t***Failed***\n"); 169e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 170e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s:END, rc = %d\n", __func__, rc); 171e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev return rc; 172e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev} 173e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 174e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevint mm_app_tc_2(mm_camera_app_t *cam_apps) 175e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev{ 176e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int rc = MM_CAMERA_OK; 177e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int i,j; 178e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int result = 0; 179e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 180e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\n Verifying Video on front and back camera...\n"); 181e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (i = 0; i < cam_apps->num_cameras; i++) { 182e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( mm_app_open(i) != MM_CAMERA_OK) { 183e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:mm_app_open() err=%d\n",__func__, rc); 184e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 185e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 186e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 187e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (system_dimension_set(my_cam_app.cam_open) != MM_CAMERA_OK) { 188e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:system_dimension_set() err=%d\n",__func__, rc); 189e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 190e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 191e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 192e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 193e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( MM_CAMERA_OK != (rc = startPreview(my_cam_app.cam_open))) { 194e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: startPreview() err=%d\n", __func__, rc); 195e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 196e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 197e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (j = 0; j < MM_QCAMERA_APP_INTERATION; j++) { 198e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( MM_CAMERA_OK != (rc = startRecording(my_cam_app.cam_open))) { 199e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: StartVideorecording() err=%d\n", __func__, rc); 200e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 201e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 202e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 203e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev /*if(mm_camera_app_timedwait() == ETIMEDOUT) { 204e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: Video Callback not received in time\n", __func__); 205e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 206e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev }*/ 207e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev mm_camera_app_wait(); 208e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( MM_CAMERA_OK != (rc = stopRecording(my_cam_app.cam_open))) { 209e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: Stopvideorecording() err=%d\n", __func__, rc); 210e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 211e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 212e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev result++; 213e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 214e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( MM_CAMERA_OK != (rc = stopPreview(my_cam_app.cam_open))) { 215e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: startPreview() err=%d\n", __func__, rc); 216e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 217e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 218e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( mm_app_close(my_cam_app.cam_open) != MM_CAMERA_OK) { 219e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:mm_app_close() err=%d\n",__func__, rc); 220e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 221e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 222e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 223e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (result != MM_QCAMERA_APP_INTERATION) { 224e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("%s: Video Start/Stop Fails for Camera %d in %d iteration", __func__, i,j); 225e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 226e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 227e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 228e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 229e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev result = 0; 230e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 231e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev end: 232e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (rc == 0) { 233e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\nPassed\n"); 234e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } else { 235e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\nFailed\n"); 236e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 237e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s:END, rc = %d\n", __func__, rc); 238e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev return rc; 239e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev} 240e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 241e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevint mm_app_tc_3(mm_camera_app_t *cam_apps) 242e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev{ 243e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int rc = MM_CAMERA_OK; 244e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int i,j; 245e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int result = 0; 246e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 247e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\n Verifying RDI Stream on front and back camera...\n"); 248e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (cam_apps->num_cameras == 0) { 249e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:Query Failed: Num of cameras = %d\n",__func__, cam_apps->num_cameras); 250e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 251e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 252e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 253e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (i = 0; i < cam_apps->num_cameras; i++) { 254e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( mm_app_open(i) != MM_CAMERA_OK) { 255e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:mm_app_open() err=%d\n",__func__, rc); 256e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 257e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 258e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 259e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (system_dimension_set(my_cam_app.cam_open) != MM_CAMERA_OK) { 260e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:system_dimension_set() err=%d\n",__func__, rc); 261e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 262e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 263e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 264e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (j = 0; j < MM_QCAMERA_APP_INTERATION; j++) { 265e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( MM_CAMERA_OK != (rc = startRdi(my_cam_app.cam_open))) { 266e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: StartVideorecording() err=%d\n", __func__, rc); 267e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 268e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 269e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 270e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev /*if(mm_camera_app_timedwait() == ETIMEDOUT) { 271e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: Video Callback not received in time\n", __func__); 272e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 273e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev }*/ 274e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev mm_camera_app_wait(); 275e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( MM_CAMERA_OK != (rc = stopRdi(my_cam_app.cam_open))) { 276e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s: Stopvideorecording() err=%d\n", __func__, rc); 277e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 278e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 279e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev result++; 280e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 281e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( mm_app_close(my_cam_app.cam_open) != MM_CAMERA_OK) { 282e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG_ERROR("%s:mm_app_close() err=%d\n",__func__, rc); 283e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 284e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 285e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 286e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (result != MM_QCAMERA_APP_INTERATION) { 287e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("%s: Video Start/Stop Fails for Camera %d in %d iteration", __func__, i,j); 288e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = -1; 289e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev break; 290e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 291e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 292e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev result = 0; 293e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 294e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev end: 295e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (rc == 0) { 296e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\nPassed\n"); 297e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } else { 298e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("\nFailed\n"); 299e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 300e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s:END, rc = %d\n", __func__, rc); 301e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev return rc; 302e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev} 303e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 304e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevint mm_app_tc_4(mm_camera_app_t *cam_apps) 305e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev{ 306e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int rc = MM_CAMERA_OK; 307e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int i; 308e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("Running %s - open/close ,video0, open/close preview channel only\n", __func__); 309e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#if 0 310e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (i = 0; i < MM_QCAMERA_APP_UTEST_MAX_MAIN_LOOP; i++) { 311e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( 0 != (rc = mm_app_open(cam_id, MM_CAMERA_OP_MODE_NOTUSED))) { 312e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: open cam %d at opmode = %d err, loop=%d, rc=%d\n", __func__, cam_id, MM_CAMERA_OP_MODE_NOTUSED, i, rc); 313e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 314e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 315e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_open_preview(cam_id))) { 316e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 317e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 318e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_close_preview(cam_id))) { 319e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 320e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 321e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( 0 != (rc = mm_app_close(cam_id))) { 322e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: close cam %d at opmode = %d err,loop=%d, rc=%d\n", __func__, cam_id, MM_CAMERA_OP_MODE_NOTUSED, i, rc); 323e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 324e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 325e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 326e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevend: 327e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#endif 328e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s:END, rc=%d\n", __func__, rc); 329e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev return rc; 330e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev} 331e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 332e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 333e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 334e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevint mm_app_tc_5(mm_camera_app_t *cam_apps) 335e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev{ 336e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int rc = MM_CAMERA_OK; 337e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int i; 338e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("Running %s - open/close ,video0, open/close snapshot channel only\n", __func__); 339e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#if 0 340e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (i = 0; i < MM_QCAMERA_APP_UTEST_MAX_MAIN_LOOP; i++) { 341e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( 0 != (rc = mm_app_open(cam_id, MM_CAMERA_OP_MODE_NOTUSED))) { 342e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: open cam %d at opmode = %d err, loop=%d, rc=%d\n", 343e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev __func__, cam_id, MM_CAMERA_OP_MODE_NOTUSED, i, rc); 344e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 345e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 346e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_open_snapshot(cam_id))) { 347e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 348e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 349e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_close_snapshot(cam_id))) { 350e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 351e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 352e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( 0 != (rc = mm_app_close(cam_id))) { 353e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: close cam %d at opmode = %d err,loop=%d, rc=%d\n", 354e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev __func__, cam_id, MM_CAMERA_OP_MODE_NOTUSED, i, rc); 355e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 356e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 357e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 358e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev end: 359e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#endif 360e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s:END, rc=%d\n", __func__, rc); 361e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev return rc; 362e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev} 363e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 364e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevint mm_app_tc_6(mm_camera_app_t *cam_apps) 365e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev{ 366e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int rc = MM_CAMERA_OK; 367e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int i; 368e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("Running %s - simple preview \n", __func__); 369e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#if 0 370e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( 0 != (rc = mm_app_open(cam_id, MM_CAMERA_OP_MODE_NOTUSED))) { 371e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: open cam %d at opmode = %d err, loop=%d, rc=%d\n", 372e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev __func__, cam_id, MM_CAMERA_OP_MODE_NOTUSED, i, rc); 373e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 374e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 375e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 376e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (i = 0; i < MM_QCAMERA_APP_UTEST_MAX_MAIN_LOOP; i++) { 377e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_init_preview(cam_id))) { 378e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 379e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 380e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_start_preview(cam_id))) { 381e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 382e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 383e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev /* sleep 8 seconds */ 384e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev usleep(8000000); 385e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_stop_preview(cam_id))) { 386e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 387e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 388e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc=mm_app_deinit_preview(cam_id))) { 389e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 390e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 391e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_close_preview(cam_id))) { 392e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 393e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 394e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 395e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( 0 != (rc = mm_app_close(cam_id))) { 396e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: close cam %d at opmode = %d err,loop=%d, rc=%d\n", 397e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev __func__, cam_id, MM_CAMERA_OP_MODE_NOTUSED, i, rc); 398e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 399e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 400e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevend: 401e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#endif 402e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s:END, rc=%d\n", __func__, rc); 403e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev return rc; 404e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev} 405e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 406e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevint mm_app_tc_7(mm_camera_app_t *cam_apps) 407e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev{ 408e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int rc = MM_CAMERA_OK; 409e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int i; 410e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("Running %s - simple preview and recording \n", __func__); 411e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#if 0 412e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( 0 != (rc = mm_app_open(cam_id, MM_CAMERA_OP_MODE_NOTUSED))) { 413e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: open cam %d at opmode = %d err, loop=%d, rc=%d\n", 414e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev __func__, cam_id, MM_CAMERA_OP_MODE_NOTUSED, i, rc); 415e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 416e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 417e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 418e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (i = 0; i < MM_QCAMERA_APP_UTEST_MAX_MAIN_LOOP; i++) { 419e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_init_preview(cam_id))) { 420e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 421e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 422e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_start_preview(cam_id))) { 423e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 424e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 425e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev /* sleep 8 seconds */ 426e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev usleep(8000000); 427e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_start_recording(cam_id))) { 428e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 429e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 430e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev usleep(1000000); 431e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_stop_recording(cam_id))) { 432e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 433e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 434e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev usleep(8000000); 435e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_stop_preview(cam_id))) { 436e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 437e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 438e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc=mm_app_deinit_preview(cam_id))) { 439e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 440e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 441e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_close_preview(cam_id))) { 442e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 443e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 444e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 445e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( 0 != (rc = mm_app_close(cam_id))) { 446e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: close cam %d at opmode = %d err,loop=%d, rc=%d\n", 447e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev __func__, cam_id, MM_CAMERA_OP_MODE_NOTUSED, i, rc); 448e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 449e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 450e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevend: 451e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#endif 452e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s:END, rc=%d\n", __func__, rc); 453e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev return rc; 454e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev} 455e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 456e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevint mm_app_tc_8(mm_camera_app_t *cam_apps) 457e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev{ 458e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int rc = MM_CAMERA_OK; 459e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int i; 460e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("Running %s - preview, recording, and snapshot, then preview again \n", __func__); 461e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#if 0 462e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( 0 != (rc = mm_app_open(cam_id, MM_CAMERA_OP_MODE_NOTUSED))) { 463e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: open cam %d at opmode = %d err, loop=%d, rc=%d\n", 464e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev __func__, cam_id, MM_CAMERA_OP_MODE_NOTUSED, i, rc); 465e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 466e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 467e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 468e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (i = 0; i < MM_QCAMERA_APP_UTEST_MAX_MAIN_LOOP; i++) { 469e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_init_preview(cam_id))) { 470e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 471e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 472e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_start_preview(cam_id))) { 473e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 474e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 475e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev /* sleep 8 seconds */ 476e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev usleep(8000000); 477e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_start_recording(cam_id))) { 478e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 479e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 480e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev usleep(1000000); 481e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_stop_recording(cam_id))) { 482e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 483e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 484e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_stop_preview(cam_id))) { 485e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 486e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 487e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0!=(rc=mm_app_init_snapshot(cam_id))) { 488e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 489e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 490e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc=mm_app_take_picture(cam_id))) { 491e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 492e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 493e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( 0 != (rc = mm_app_deinit_snahspot(cam_id))) { 494e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 495e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 496e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_start_preview(cam_id))) { 497e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 498e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 499e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev usleep(8000000); 500e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc=mm_app_deinit_preview(cam_id))) { 501e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 502e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 503e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (0 != (rc = mm_app_close_preview(cam_id))) { 504e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 505e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 506e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 507e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if ( 0 != (rc = mm_app_close(cam_id))) { 508e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s: close cam %d at opmode = %d err,loop=%d, rc=%d\n", 509e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev __func__, cam_id, MM_CAMERA_OP_MODE_NOTUSED, i, rc); 510e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 511e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 512e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevend: 513e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev#endif 514e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("%s:END, rc=%d\n", __func__, rc); 515e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev return rc; 516e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev} 517e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 518e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 519e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevint mm_app_gen_test_cases() 520e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev{ 521e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int tc = 0; 522e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev memset(mm_app_tc, 0, sizeof(mm_app_tc)); 523e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_0; 524e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_1; 525e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_2; 526e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_3; 527e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev /*if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_4; 528e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_5; 529e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_6; 530e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_7; 531e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_8;*/ 532e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev return tc; 533e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev} 534e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 535e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchevint mm_app_unit_test_entry(mm_camera_app_t *cam_app) 536e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev{ 537e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int rc = MM_CAMERA_OK; 538e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int i, tc = 0; 539e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev int cam_id = 0; 540e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 541e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev tc = mm_app_gen_test_cases(); 542e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev CDBG("Running %d test cases\n",tc); 543e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev for (i = 0; i < tc; i++) { 544e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev mm_app_tc[i].r = mm_app_tc[i].f(cam_app); 545e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev if (mm_app_tc[i].r != MM_CAMERA_OK) { 546e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("%s: test case %d error = %d, abort unit testing engine!!!!\n", 547e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev __func__, i, mm_app_tc[i].r); 548e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev rc = mm_app_tc[i].r; 549e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev goto end; 550e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 551e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev } 552e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev end: 553e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev printf("nTOTAL_TSET_CASE = %d, NUM_TEST_RAN = %d, rc=%d\n", tc, i, rc); 554e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev return rc; 555e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev} 556e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 557e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 558e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 559e6e5b199f1d8d2d10d9ca66210e8ee9315d65a50Iliyan Malchev 560