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