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