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