Home | History | Annotate | Download | only in src
      1 /* Copyright (c) 2013, 2016, The Linux Foundation. All rights reserved.
      2  *
      3  * Redistribution and use in source and binary forms, with or without
      4  * modification, are permitted provided that the following conditions are
      5  * met:
      6  *     * Redistributions of source code must retain the above copyright
      7  *       notice, this list of conditions and the following disclaimer.
      8  *     * Redistributions in binary form must reproduce the above
      9  *       copyright notice, this list of conditions and the following
     10  *       disclaimer in the documentation and/or other materials provided
     11  *       with the distribution.
     12  *     * Neither the name of The Linux Foundation nor the names of its
     13  *       contributors may be used to endorse or promote products derived
     14  *       from this software without specific prior written permission.
     15  *
     16  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
     17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
     19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
     20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     23  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     25  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
     26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  *
     28  */
     29 
     30 // Camera dependencies
     31 #include "mm_qcamera_app.h"
     32 #include "mm_qcamera_dbg.h"
     33 
     34 #include <unistd.h>
     35 
     36 #define MM_QCAMERA_APP_UTEST_MAX_MAIN_LOOP 1
     37 #define MM_QCAMERA_APP_UTEST_OUTER_LOOP 1
     38 #define MM_QCAMERA_APP_UTEST_INNER_LOOP 1
     39 #define MM_QCAM_APP_TEST_NUM 128
     40 
     41 static mm_app_tc_t mm_app_tc[MM_QCAM_APP_TEST_NUM];
     42 
     43 int mm_app_tc_open_close(mm_camera_app_t *cam_app)
     44 {
     45     int rc = MM_CAMERA_OK;
     46     int i;
     47     mm_camera_test_obj_t test_obj;
     48 
     49     printf("\n Verifying open/close cameras...\n");
     50     for (i = 0; i < cam_app->num_cameras; i++) {
     51         memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
     52         rc = mm_app_open(cam_app, i, &test_obj);
     53         if (rc != MM_CAMERA_OK) {
     54             LOGE("mm_app_open() cam_idx=%d, err=%d\n",
     55                         i, rc);
     56             break;
     57         }
     58         sleep(1);
     59         rc = mm_app_close(&test_obj);
     60         if (rc != MM_CAMERA_OK) {
     61             LOGE("mm_app_close() cam_idx=%d, err=%d\n",
     62                         i, rc);
     63             break;
     64         }
     65     }
     66     if (rc == MM_CAMERA_OK) {
     67         printf("\nPassed\n");
     68     } else {
     69         printf("\nFailed\n");
     70     }
     71     LOGD("END, rc = %d\n",  rc);
     72     return rc;
     73 }
     74 
     75 int mm_app_tc_start_stop_preview(mm_camera_app_t *cam_app)
     76 {
     77     int rc = MM_CAMERA_OK;
     78     int i, j;
     79     mm_camera_test_obj_t test_obj;
     80 
     81     printf("\n Verifying start/stop preview...\n");
     82     for (i = 0; i < cam_app->num_cameras; i++) {
     83         memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
     84         rc = mm_app_open(cam_app, i, &test_obj);
     85         if (rc != MM_CAMERA_OK) {
     86             LOGE("mm_app_open() cam_idx=%d, err=%d\n",
     87                         i, rc);
     88             break;
     89         }
     90 
     91         for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
     92             rc = mm_app_start_preview(&test_obj);
     93             if (rc != MM_CAMERA_OK) {
     94                 LOGE(" mm_app_start_preview() cam_idx=%d, err=%d\n",
     95                             i, rc);
     96                 break;
     97             }
     98             sleep(1);
     99             rc = mm_app_stop_preview(&test_obj);
    100             if (rc != MM_CAMERA_OK) {
    101                 LOGE(" mm_app_stop_preview() cam_idx=%d, err=%d\n",
    102                             i, rc);
    103                 break;
    104             }
    105         }
    106 
    107         rc |= mm_app_close(&test_obj);
    108         if (rc != MM_CAMERA_OK) {
    109             LOGE("mm_app_close() cam_idx=%d, err=%d\n",
    110                         i, rc);
    111             break;
    112         }
    113     }
    114     if (rc == MM_CAMERA_OK) {
    115         printf("\nPassed\n");
    116     } else {
    117         printf("\nFailed\n");
    118     }
    119     LOGD("END, rc = %d\n",  rc);
    120     return rc;
    121 }
    122 
    123 int mm_app_tc_start_stop_zsl(mm_camera_app_t *cam_app)
    124 {
    125     int rc = MM_CAMERA_OK;
    126     int i, j;
    127     mm_camera_test_obj_t test_obj;
    128 
    129     printf("\n Verifying start/stop preview...\n");
    130     for (i = 0; i < cam_app->num_cameras; i++) {
    131         memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
    132         rc = mm_app_open(cam_app, i, &test_obj);
    133         if (rc != MM_CAMERA_OK) {
    134             LOGE("mm_app_open() cam_idx=%d, err=%d\n",
    135                         i, rc);
    136             break;
    137         }
    138 
    139         for (j = 0; j < 1; j++) {
    140             rc = mm_app_start_preview_zsl(&test_obj);
    141             if (rc != MM_CAMERA_OK) {
    142                 LOGE(" mm_app_start_preview_zsl() cam_idx=%d, err=%d\n",
    143                             i, rc);
    144                 break;
    145             }
    146             sleep(1);
    147             rc = mm_app_stop_preview_zsl(&test_obj);
    148             if (rc != MM_CAMERA_OK) {
    149                 LOGE(" mm_app_stop_preview_zsl() cam_idx=%d, err=%d\n",
    150                             i, rc);
    151                 break;
    152             }
    153         }
    154 
    155         rc = mm_app_close(&test_obj);
    156         if (rc != MM_CAMERA_OK) {
    157             LOGE("mm_app_close() cam_idx=%d, err=%d\n",
    158                         i, rc);
    159             break;
    160         }
    161     }
    162     if (rc == MM_CAMERA_OK) {
    163         printf("\nPassed\n");
    164     } else {
    165         printf("\nFailed\n");
    166     }
    167     LOGD("END, rc = %d\n",  rc);
    168     return rc;
    169 }
    170 
    171 int mm_app_tc_start_stop_video_preview(mm_camera_app_t *cam_app)
    172 {
    173     int rc = MM_CAMERA_OK;
    174     int i, j;
    175     mm_camera_test_obj_t test_obj;
    176     mm_camera_lib_snapshot_params dim;
    177     memset(&dim, 0, sizeof(mm_camera_lib_snapshot_params));
    178 
    179     printf("\n Verifying start/stop video preview...\n");
    180     for (i = 0; i < cam_app->num_cameras; i++) {
    181         memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
    182         rc = mm_app_open(cam_app, i, &test_obj);
    183         if (rc != MM_CAMERA_OK) {
    184             LOGE("mm_app_open() cam_idx=%d, err=%d\n",
    185                         i, rc);
    186             break;
    187         }
    188 
    189         for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
    190             rc = mm_app_start_record_preview(&test_obj, &dim);
    191             if (rc != MM_CAMERA_OK) {
    192                 LOGE("mm_app_start_record_preview() cam_idx=%d, err=%d\n",
    193                             i, rc);
    194                 break;
    195             }
    196             sleep(1);
    197             rc = mm_app_stop_record_preview(&test_obj);
    198             if (rc != MM_CAMERA_OK) {
    199                 LOGE("mm_app_stop_record_preview() cam_idx=%d, err=%d\n",
    200                             i, rc);
    201                 break;
    202             }
    203         }
    204 
    205         rc = mm_app_close(&test_obj);
    206         if (rc != MM_CAMERA_OK) {
    207             LOGE("mm_app_close() cam_idx=%d, err=%d\n",
    208                         i, rc);
    209             break;
    210         }
    211     }
    212     if (rc == MM_CAMERA_OK) {
    213         printf("\nPassed\n");
    214     } else {
    215         printf("\nFailed\n");
    216     }
    217     LOGD("END, rc = %d\n",  rc);
    218     return rc;
    219 }
    220 
    221 int mm_app_tc_start_stop_video_record(mm_camera_app_t *cam_app)
    222 {
    223     int rc = MM_CAMERA_OK;
    224     int i, j;
    225     mm_camera_test_obj_t test_obj;
    226     mm_camera_lib_snapshot_params dim;
    227     memset(&dim, 0, sizeof(mm_camera_lib_snapshot_params));
    228 
    229     printf("\n Verifying start/stop recording...\n");
    230     for (i = 0; i < cam_app->num_cameras; i++) {
    231         memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
    232         rc = mm_app_open(cam_app, i, &test_obj);
    233         if (rc != MM_CAMERA_OK) {
    234             LOGE("mm_app_open() cam_idx=%d, err=%d\n",
    235                         i, rc);
    236             break;
    237         }
    238 
    239         rc = mm_app_start_record_preview(&test_obj, &dim);
    240         if (rc != MM_CAMERA_OK) {
    241             LOGE("mm_app_start_record_preview() cam_idx=%d, err=%d\n",
    242                         i, rc);
    243             mm_app_close(&test_obj);
    244             break;
    245         }
    246 
    247         sleep(1);
    248 
    249         for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
    250             rc = mm_app_start_record(&test_obj);
    251             if (rc != MM_CAMERA_OK) {
    252                 LOGE("mm_app_start_record() cam_idx=%d, err=%d\n",
    253                             i, rc);
    254                 break;
    255             }
    256 
    257             sleep(1);
    258 
    259             rc = mm_app_stop_record(&test_obj);
    260             if (rc != MM_CAMERA_OK) {
    261                 LOGE("mm_app_stop_record() cam_idx=%d, err=%d\n",
    262                             i, rc);
    263                 break;
    264             }
    265         }
    266         if (rc != MM_CAMERA_OK) {
    267             LOGE("start/stop record cam_idx=%d, err=%d\n",
    268                         i, rc);
    269             mm_app_stop_record_preview(&test_obj);
    270             mm_app_close(&test_obj);
    271             break;
    272         }
    273 
    274         rc = mm_app_stop_record_preview(&test_obj);
    275         if (rc != MM_CAMERA_OK) {
    276             LOGE("mm_app_stop_record_preview() cam_idx=%d, err=%d\n",
    277                         i, rc);
    278             mm_app_close(&test_obj);
    279             break;
    280         }
    281 
    282         rc = mm_app_close(&test_obj);
    283         if (rc != MM_CAMERA_OK) {
    284             LOGE("mm_app_close() cam_idx=%d, err=%d\n",
    285                         i, rc);
    286             break;
    287         }
    288     }
    289     if (rc == MM_CAMERA_OK) {
    290         printf("\nPassed\n");
    291     } else {
    292         printf("\nFailed\n");
    293     }
    294     LOGD("END, rc = %d\n",  rc);
    295     return rc;
    296 }
    297 
    298 int mm_app_tc_start_stop_live_snapshot(mm_camera_app_t *cam_app)
    299 {
    300     int rc = MM_CAMERA_OK;
    301     int i, j;
    302     mm_camera_test_obj_t test_obj;
    303     mm_camera_lib_snapshot_params dim;
    304     memset(&dim, 0, sizeof(mm_camera_lib_snapshot_params));
    305 
    306     printf("\n Verifying start/stop live snapshot...\n");
    307     for (i = 0; i < cam_app->num_cameras; i++) {
    308         memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
    309         rc = mm_app_open(cam_app, i, &test_obj);
    310         if (rc != MM_CAMERA_OK) {
    311             LOGE("mm_app_open() cam_idx=%d, err=%d\n",
    312                         i, rc);
    313             break;
    314         }
    315 
    316         rc = mm_app_start_record_preview(&test_obj, &dim);
    317         if (rc != MM_CAMERA_OK) {
    318             LOGE("mm_app_start_record_preview() cam_idx=%d, err=%d\n",
    319                         i, rc);
    320             mm_app_close(&test_obj);
    321             break;
    322         }
    323 
    324         sleep(1);
    325 
    326         rc = mm_app_start_record(&test_obj);
    327         if (rc != MM_CAMERA_OK) {
    328             LOGE("mm_app_start_record() cam_idx=%d, err=%d\n",
    329                         i, rc);
    330             mm_app_stop_record_preview(&test_obj);
    331             mm_app_close(&test_obj);
    332             break;
    333         }
    334 
    335         sleep(1);
    336 
    337         for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
    338             rc = mm_app_start_live_snapshot(&test_obj);
    339             if (rc != MM_CAMERA_OK) {
    340                 LOGE("mm_app_start_live_snapshot() cam_idx=%d, err=%d\n",
    341                             i, rc);
    342                 break;
    343             }
    344 
    345             /* wait for jpeg is done */
    346             mm_camera_app_wait();
    347 
    348             rc = mm_app_stop_live_snapshot(&test_obj);
    349             if (rc != MM_CAMERA_OK) {
    350                 LOGE("mm_app_stop_live_snapshot() cam_idx=%d, err=%d\n",
    351                             i, rc);
    352                 break;
    353             }
    354         }
    355         if (rc != MM_CAMERA_OK) {
    356             LOGE("start/stop live snapshot cam_idx=%d, err=%d\n",
    357                         i, rc);
    358             mm_app_stop_record(&test_obj);
    359             mm_app_stop_record_preview(&test_obj);
    360             mm_app_close(&test_obj);
    361             break;
    362         }
    363 
    364         rc = mm_app_stop_record(&test_obj);
    365         if (rc != MM_CAMERA_OK) {
    366             LOGE("mm_app_stop_record() cam_idx=%d, err=%d\n",
    367                         i, rc);
    368             mm_app_stop_record_preview(&test_obj);
    369             mm_app_close(&test_obj);
    370             break;
    371         }
    372 
    373         sleep(1);
    374 
    375         rc = mm_app_stop_record_preview(&test_obj);
    376         if (rc != MM_CAMERA_OK) {
    377             LOGE("mm_app_stop_record_preview() cam_idx=%d, err=%d\n",
    378                         i, rc);
    379             mm_app_close(&test_obj);
    380             break;
    381         }
    382 
    383         rc = mm_app_close(&test_obj);
    384         if (rc != MM_CAMERA_OK) {
    385             LOGE("mm_app_close() cam_idx=%d, err=%d\n",
    386                         i, rc);
    387             break;
    388         }
    389     }
    390     if (rc == MM_CAMERA_OK) {
    391         printf("\nPassed\n");
    392     } else {
    393         printf("\nFailed\n");
    394     }
    395     LOGD("END, rc = %d\n",  rc);
    396     return rc;
    397 }
    398 
    399 int mm_app_tc_capture_raw(mm_camera_app_t *cam_app)
    400 {
    401     int rc = MM_CAMERA_OK;
    402     int i, j;
    403     mm_camera_test_obj_t test_obj;
    404     uint8_t num_snapshot = 1;
    405     uint8_t num_rcvd_snapshot = 0;
    406 
    407     printf("\n Verifying raw capture...\n");
    408     for (i = 0; i < cam_app->num_cameras; i++) {
    409         memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
    410         rc = mm_app_open(cam_app, i, &test_obj);
    411         if (rc != MM_CAMERA_OK) {
    412             LOGE("mm_app_open() cam_idx=%d, err=%d\n",
    413                         i, rc);
    414             break;
    415         }
    416 
    417         for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
    418             rc = mm_app_start_capture_raw(&test_obj, num_snapshot);
    419             if (rc != MM_CAMERA_OK) {
    420                 LOGE(" mm_app_start_capture() cam_idx=%d, err=%d\n",
    421                             i, rc);
    422                 break;
    423             }
    424             while (num_rcvd_snapshot < num_snapshot) {
    425                 mm_camera_app_wait();
    426                 num_rcvd_snapshot++;
    427             }
    428             rc = mm_app_stop_capture_raw(&test_obj);
    429             if (rc != MM_CAMERA_OK) {
    430                 LOGE(" mm_app_stop_capture() cam_idx=%d, err=%d\n",
    431                             i, rc);
    432                 break;
    433             }
    434         }
    435 
    436         rc |= mm_app_close(&test_obj);
    437         if (rc != MM_CAMERA_OK) {
    438             LOGE("mm_app_close() cam_idx=%d, err=%d\n",
    439                         i, rc);
    440             break;
    441         }
    442     }
    443     if (rc == MM_CAMERA_OK) {
    444         printf("\nPassed\n");
    445     } else {
    446         printf("\nFailed\n");
    447     }
    448     LOGD("END, rc = %d\n",  rc);
    449     return rc;
    450 }
    451 
    452 int mm_app_tc_capture_regular(mm_camera_app_t *cam_app)
    453 {
    454     int rc = MM_CAMERA_OK;
    455     int i, j;
    456     mm_camera_test_obj_t test_obj;
    457     uint8_t num_snapshot = 1;
    458     uint8_t num_rcvd_snapshot = 0;
    459 
    460     printf("\n Verifying capture...\n");
    461     for (i = 0; i < cam_app->num_cameras; i++) {
    462         memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
    463         rc = mm_app_open(cam_app, i, &test_obj);
    464         if (rc != MM_CAMERA_OK) {
    465             LOGE("mm_app_open() cam_idx=%d, err=%d\n",
    466                         i, rc);
    467             break;
    468         }
    469 
    470         for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
    471             rc = mm_app_start_capture(&test_obj, num_snapshot);
    472             if (rc != MM_CAMERA_OK) {
    473                 LOGE(" mm_app_start_capture() cam_idx=%d, err=%d\n",
    474                             i, rc);
    475                 break;
    476             }
    477             while (num_rcvd_snapshot < num_snapshot) {
    478                 mm_camera_app_wait();
    479                 num_rcvd_snapshot++;
    480             }
    481             rc = mm_app_stop_capture(&test_obj);
    482             if (rc != MM_CAMERA_OK) {
    483                 LOGE(" mm_app_stop_capture() cam_idx=%d, err=%d\n",
    484                             i, rc);
    485                 break;
    486             }
    487         }
    488 
    489         rc = mm_app_close(&test_obj);
    490         if (rc != MM_CAMERA_OK) {
    491             LOGE("mm_app_close() cam_idx=%d, err=%d\n",
    492                         i, rc);
    493             break;
    494         }
    495     }
    496     if (rc == MM_CAMERA_OK) {
    497         printf("\nPassed\n");
    498     } else {
    499         printf("\nFailed\n");
    500     }
    501     LOGD("END, rc = %d\n",  rc);
    502     return rc;
    503 }
    504 
    505 int mm_app_tc_capture_burst(mm_camera_app_t *cam_app)
    506 {
    507     int rc = MM_CAMERA_OK;
    508     int i, j;
    509     mm_camera_test_obj_t test_obj;
    510     uint8_t num_snapshot = 3;
    511     uint8_t num_rcvd_snapshot = 0;
    512 
    513     printf("\n Verifying capture...\n");
    514     for (i = 0; i < cam_app->num_cameras; i++) {
    515         memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
    516         rc = mm_app_open(cam_app, i, &test_obj);
    517         if (rc != MM_CAMERA_OK) {
    518             LOGE("mm_app_open() cam_idx=%d, err=%d\n",
    519                         i, rc);
    520             break;
    521         }
    522 
    523         for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
    524             rc = mm_app_start_capture(&test_obj, num_snapshot);
    525             if (rc != MM_CAMERA_OK) {
    526                 LOGE(" mm_app_start_capture() cam_idx=%d, err=%d\n",
    527                             i, rc);
    528                 break;
    529             }
    530             while (num_rcvd_snapshot < num_snapshot) {
    531                 mm_camera_app_wait();
    532                 num_rcvd_snapshot++;
    533             }
    534             rc = mm_app_stop_capture(&test_obj);
    535             if (rc != MM_CAMERA_OK) {
    536                 LOGE(" mm_app_stop_capture() cam_idx=%d, err=%d\n",
    537                             i, rc);
    538                 break;
    539             }
    540         }
    541 
    542         rc = mm_app_close(&test_obj);
    543         if (rc != MM_CAMERA_OK) {
    544             LOGE("mm_app_close() cam_idx=%d, err=%d\n",
    545                         i, rc);
    546             break;
    547         }
    548     }
    549     if (rc == MM_CAMERA_OK) {
    550         printf("\nPassed\n");
    551     } else {
    552         printf("\nFailed\n");
    553     }
    554     LOGD("END, rc = %d\n",  rc);
    555     return rc;
    556 }
    557 
    558 int mm_app_tc_rdi_burst(mm_camera_app_t *cam_app)
    559 {
    560     int rc = MM_CAMERA_OK, rc2 = MM_CAMERA_OK;
    561     int i, j;
    562     mm_camera_test_obj_t test_obj;
    563 
    564     printf("\n Verifying rdi burst (3) capture...\n");
    565     for (i = 0; i < cam_app->num_cameras; i++) {
    566         memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
    567         rc = mm_app_open(cam_app, i, &test_obj);
    568         if (rc != MM_CAMERA_OK) {
    569             LOGE("mm_app_open() cam_idx=%d, err=%d\n",
    570                         i, rc);
    571             break;
    572         }
    573 
    574         for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
    575             rc = mm_app_start_rdi(&test_obj, 3);
    576             if (rc != MM_CAMERA_OK) {
    577                 LOGE(" mm_app_start_preview() cam_idx=%d, err=%d\n",
    578                             i, rc);
    579                 break;
    580             }
    581             sleep(1);
    582             rc = mm_app_stop_rdi(&test_obj);
    583             if (rc != MM_CAMERA_OK) {
    584                 LOGE(" mm_app_stop_preview() cam_idx=%d, err=%d\n",
    585                             i, rc);
    586                 break;
    587             }
    588         }
    589 
    590         rc2 = mm_app_close(&test_obj);
    591         if (rc2 != MM_CAMERA_OK) {
    592             LOGE("mm_app_close() cam_idx=%d, err=%d\n",
    593                         i, rc2);
    594             if (rc == MM_CAMERA_OK) {
    595                 rc = rc2;
    596             }
    597             break;
    598         }
    599     }
    600     if (rc == MM_CAMERA_OK) {
    601         printf("\nPassed\n");
    602     } else {
    603         printf("\nFailed\n");
    604     }
    605     LOGD("END, rc = %d\n",  rc);
    606     return rc;
    607 }
    608 
    609 int mm_app_tc_rdi_cont(mm_camera_app_t *cam_app)
    610 {
    611     int rc = MM_CAMERA_OK, rc2 = MM_CAMERA_OK;
    612     int i, j;
    613     mm_camera_test_obj_t test_obj;
    614 
    615     printf("\n Verifying rdi continuous capture...\n");
    616     for (i = 0; i < cam_app->num_cameras; i++) {
    617         memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
    618         rc = mm_app_open(cam_app, i, &test_obj);
    619         if (rc != MM_CAMERA_OK) {
    620             LOGE("mm_app_open() cam_idx=%d, err=%d\n",
    621                         i, rc);
    622             break;
    623         }
    624 
    625         for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
    626             rc = mm_app_start_rdi(&test_obj, 0);
    627             if (rc != MM_CAMERA_OK) {
    628                 LOGE(" mm_app_start_preview() cam_idx=%d, err=%d\n",
    629                             i, rc);
    630                 break;
    631             }
    632             sleep(1);
    633             rc = mm_app_stop_rdi(&test_obj);
    634             if (rc != MM_CAMERA_OK) {
    635                 LOGE(" mm_app_stop_preview() cam_idx=%d, err=%d\n",
    636                             i, rc);
    637                 break;
    638             }
    639         }
    640 
    641         rc2 = mm_app_close(&test_obj);
    642         if (rc2 != MM_CAMERA_OK) {
    643             LOGE("mm_app_close() cam_idx=%d, err=%d\n",
    644                         i, rc2);
    645             if (rc == MM_CAMERA_OK) {
    646                 rc = rc2;
    647             }
    648             break;
    649         }
    650     }
    651     if (rc == MM_CAMERA_OK) {
    652         printf("\nPassed\n");
    653     } else {
    654         printf("\nFailed\n");
    655     }
    656     LOGD("END, rc = %d\n",  rc);
    657     return rc;
    658 }
    659 
    660 int mm_app_gen_test_cases()
    661 {
    662     int tc = 0;
    663     memset(mm_app_tc, 0, sizeof(mm_app_tc));
    664     if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_open_close;
    665     if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_start_stop_preview;
    666     //if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_start_stop_zsl;
    667     //if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_start_stop_video_preview;
    668     //if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_start_stop_video_record;
    669     //if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_start_stop_live_snapshot;
    670     //if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_capture_regular;
    671     //if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_capture_burst;
    672     //if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_rdi_cont;
    673     //if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_rdi_burst;
    674 
    675     return tc;
    676 }
    677 
    678 int mm_app_unit_test_entry(mm_camera_app_t *cam_app)
    679 {
    680     int rc = MM_CAMERA_OK;
    681     int i, j, tc = 0;
    682 
    683     tc = mm_app_gen_test_cases();
    684     LOGD("Running %d test cases\n",tc);
    685     for (i = 0; i < tc; i++) {
    686         for (j = 0; j < MM_QCAMERA_APP_UTEST_OUTER_LOOP; j++) {
    687             mm_app_tc[i].r = mm_app_tc[i].f(cam_app);
    688             if (mm_app_tc[i].r != MM_CAMERA_OK) {
    689                 printf(" test case %d (iteration %d) error = %d, abort unit testing engine!!!!\n",
    690                         i, j, mm_app_tc[i].r);
    691                 rc = mm_app_tc[i].r;
    692                 goto end;
    693             }
    694         }
    695     }
    696 end:
    697     printf("nTOTAL_TSET_CASE = %d, NUM_TEST_RAN = %d, rc=%d\n", tc, i, rc);
    698     return rc;
    699 }
    700 
    701 
    702 
    703 
    704