camera_test_script.cpp revision c322989ae6ff6769490828de1b5eda12b749cce9
1#include <stdlib.h> 2#include <unistd.h> 3#include <sys/types.h> 4#include <sys/stat.h> 5#include <fcntl.h> 6#include <time.h> 7#include <semaphore.h> 8#include <pthread.h> 9 10#include <surfaceflinger/Surface.h> 11#include <surfaceflinger/ISurface.h> 12#include <surfaceflinger/ISurfaceComposer.h> 13#include <surfaceflinger/ISurfaceComposerClient.h> 14#include <surfaceflinger/SurfaceComposerClient.h> 15 16#include <camera/Camera.h> 17#include <camera/ICamera.h> 18#include <media/mediarecorder.h> 19 20#include <binder/IPCThreadState.h> 21#include <binder/ProcessState.h> 22#include <binder/IServiceManager.h> 23#include <cutils/properties.h> 24#include <camera/CameraParameters.h> 25 26#include <sys/wait.h> 27 28#include "camera_test.h" 29 30using namespace android; 31 32extern bool stopScript; 33extern bool hardwareActive; 34extern sp<Camera> camera; 35extern CameraParameters params; 36extern bool recordingMode; 37extern int camera_index; 38extern int rotation; 39extern const preview_size previewSize []; 40extern const Vcapture_size VcaptureSize []; 41extern const capture_Size captureSize[]; 42extern const outformat outputFormat[]; 43extern const video_Codecs videoCodecs[]; 44extern const audio_Codecs audioCodecs[]; 45extern const V_bitRate VbitRate[]; 46extern const fps_ranges fpsRanges[]; 47extern const fpsConst_Ranges fpsConstRanges[]; 48extern const fpsConst_RangesSec fpsConstRangesSec[]; 49extern const Zoom zoom []; 50extern int previewSizeIDX; 51extern bool reSizePreview; 52extern bool previewRunning; 53extern int captureSizeIDX; 54extern float compensation; 55extern int videoCodecIDX; 56extern int outputFormatIDX; 57extern int audioCodecIDX; 58extern int VcaptureSizeIDX; 59extern int VbitRateIDX; 60extern int thumbSizeIDX; 61extern int thumbQuality; 62extern int jpegQuality; 63extern int dump_preview; 64extern int ippIDX_old; 65extern const char *capture[]; 66extern int capture_mode; 67extern int ippIDX; 68extern const char *ipp_mode[]; 69extern int tempBracketRange; 70extern int iso_mode; 71extern int sharpness; 72extern int contrast; 73extern int zoomIDX; 74extern int brightness; 75extern int saturation; 76extern int fpsRangeIdx; 77extern timeval autofocus_start, picture_start; 78extern const char *cameras[]; 79extern double latitude; 80extern double degree_by_step; 81extern double longitude; 82extern double altitude; 83extern char dir_path[80]; 84extern int AutoConvergenceModeIDX; 85extern const char *autoconvergencemode[]; 86extern const char *manualconvergencevalues[]; 87extern const int ManualConvergenceDefaultValueIDX; 88extern size_t length_cam; 89extern char script_name[]; 90extern int restartCount; 91extern bool bLogSysLinkTrace; 92extern int bufferStarvationTest; 93extern size_t length_previewSize; 94extern size_t lenght_Vcapture_size; 95extern size_t length_outformat; 96extern size_t length_capture_Size; 97extern size_t length_video_Codecs; 98extern size_t length_audio_Codecs; 99extern size_t length_V_bitRate; 100extern size_t length_Zoom; 101extern size_t length_fps_ranges; 102extern size_t length_fpsConst_Ranges; 103extern size_t length_fpsConst_RangesSec; 104 105 106int execute_functional_script(char *script) { 107 char *cmd, *ctx, *cycle_cmd, *temp_cmd; 108 char id; 109 unsigned int i; 110 int dly; 111 int cycleCounter = 1; 112 int tLen = 0; 113 unsigned int iteration = 0; 114 status_t ret = NO_ERROR; 115 int frameR = 20; 116 int frameRateIndex = 0; 117 118 LOG_FUNCTION_NAME; 119 120 dump_mem_status(); 121 122 cmd = strtok_r((char *) script, DELIMITER, &ctx); 123 124 while ( NULL != cmd && (stopScript == false)) { 125 id = cmd[0]; 126 printf("Full Command: %s \n", cmd); 127 printf("Command: %c \n", cmd[0]); 128 129 switch (id) { 130 131 // Case for Suspend-Resume Feature 132 case '!': { 133 // STEP 1: Mount Debugfs 134 system("mkdir /debug"); 135 system("mount -t debugfs debugfs /debug"); 136 137 // STEP 2: Set up wake up Timer - wake up happens after 5 seconds 138 system("echo 10 > /debug/pm_debug/wakeup_timer_seconds"); 139 140 // STEP 3: Make system ready for Suspend 141 system("echo camerahal_test > /sys/power/wake_unlock"); 142 // Release wake lock held by test app 143 printf(" Wake lock released "); 144 system("cat /sys/power/wake_lock"); 145 system("sendevent /dev/input/event0 1 60 1"); 146 system("sendevent /dev/input/event0 1 60 0"); 147 // Simulate F2 key press to make display OFF 148 printf(" F2 event simulation complete "); 149 150 //STEP 4: Wait for system Resume and then simuate F1 key 151 sleep(50);//50s // This delay is not related to suspend resume timer 152 printf(" After 30 seconds of sleep"); 153 system("sendevent /dev/input/event0 1 59 0"); 154 system("sendevent /dev/input/event0 1 59 1"); 155 // Simulate F1 key press to make display ON 156 system("echo camerahal_test > /sys/power/wake_lock"); 157 // Acquire wake lock for test app 158 159 break; 160 } 161 162 case '[': 163 if ( hardwareActive ) 164 { 165 166 camera->setParameters(params.flatten()); 167 168 printf("starting camera preview.."); 169 status_t ret = camera->startPreview(); 170 if(ret !=NO_ERROR) 171 { 172 printf("startPreview failed %d..", ret); 173 } 174 } 175 break; 176 case '+': { 177 cycleCounter = atoi(cmd + 1); 178 cycle_cmd = get_cycle_cmd(ctx); 179 tLen = strlen(cycle_cmd); 180 temp_cmd = new char[tLen+1]; 181 182 for (int ind = 0; ind < cycleCounter; ind++) { 183 strcpy(temp_cmd, cycle_cmd); 184 if ( execute_functional_script(temp_cmd) != 0 ) 185 return -1; 186 temp_cmd[0] = '\0'; 187 188 //patch for image capture 189 //[ 190 if (ind < cycleCounter - 1) { 191 if (hardwareActive == false) { 192 if ( openCamera() < 0 ) { 193 printf("Camera initialization failed\n"); 194 195 return -1; 196 } 197 198 initDefaults(); 199 } 200 } 201 202 //] 203 } 204 205 ctx += tLen + 1; 206 207 if (temp_cmd) { 208 delete temp_cmd; 209 temp_cmd = NULL; 210 } 211 212 if (cycle_cmd) { 213 delete cycle_cmd; 214 cycle_cmd = NULL; 215 } 216 217 break; 218 } 219 220 case '0': 221 { 222 initDefaults(); 223 break; 224 } 225 226 case '1': 227 228 if ( startPreview() < 0 ) { 229 printf("Error while starting preview\n"); 230 231 return -1; 232 } 233 234 break; 235 236 case '2': 237 stopPreview(); 238 239 if ( recordingMode ) { 240 241 camera->disconnect(); 242 camera.clear(); 243 stopRecording(); 244 closeRecorder(); 245 246 camera = Camera::connect(camera_index); 247 if ( NULL == camera.get() ) { 248 sleep(1); 249 camera = Camera::connect(camera_index); 250 251 if ( NULL == camera.get() ) { 252 return -1; 253 } 254 } 255 camera->setListener(new CameraHandler()); 256 camera->setParameters(params.flatten()); 257 258 recordingMode = false; 259 } 260 261 break; 262 263 case '3': 264 rotation = atoi(cmd + 1); 265 params.set(CameraParameters::KEY_ROTATION, rotation); 266 267 if ( hardwareActive ) 268 camera->setParameters(params.flatten()); 269 270 break; 271 272 case '4': 273 { 274 printf("Setting resolution..."); 275 int width, height; 276 for(i = 0; i < length_previewSize ; i++) 277 { 278 if( strcmp((cmd + 1), previewSize[i].desc) == 0) 279 { 280 width = previewSize[i].width; 281 height = previewSize[i].height; 282 previewSizeIDX = i; 283 break; 284 } 285 } 286 287 if (i == length_previewSize ) //if the resolution is not in the supported ones 288 { 289 char *res = NULL; 290 res = strtok(cmd + 1, "x"); 291 width = atoi(res); 292 res = strtok(NULL, "x"); 293 height = atoi(res); 294 } 295 296 if ( strcmp(params.get(KEY_STEREO_CAMERA), "true") == 0 ) { 297 height *=2; 298 } 299 printf("Resolution: %d x %d\n", width, height); 300 params.setPreviewSize(width, height); 301 reSizePreview = true; 302 303 if ( hardwareActive && previewRunning ) { 304 camera->stopPreview(); 305 camera->setParameters(params.flatten()); 306 camera->startPreview(); 307 } else if ( hardwareActive ) { 308 camera->setParameters(params.flatten()); 309 } 310 311 break; 312 } 313 case '5': 314 315 for (i = 0; i < length_capture_Size; i++) { 316 if ( strcmp((cmd + 1), captureSize[i].name) == 0) 317 break; 318 } 319 320 if ( i < length_capture_Size ) { 321 params.setPictureSize(captureSize[i].width, captureSize[i].height); 322 captureSizeIDX = i; 323 } 324 325 if ( hardwareActive ) 326 camera->setParameters(params.flatten()); 327 328 break; 329 330 case '6': 331 332 if ( !recordingMode ) { 333 334 recordingMode = true; 335 336 if ( startPreview() < 0 ) { 337 printf("Error while starting preview\n"); 338 339 return -1; 340 } 341 342 if ( openRecorder() < 0 ) { 343 printf("Error while openning video recorder\n"); 344 345 return -1; 346 } 347 348 if ( configureRecorder() < 0 ) { 349 printf("Error while configuring video recorder\n"); 350 351 return -1; 352 } 353 354 if ( startRecording() < 0 ) { 355 printf("Error while starting video recording\n"); 356 357 return -1; 358 } 359 360 } 361 362 break; 363 364 case '7': 365 compensation = atof(cmd + 1); 366 params.set(KEY_COMPENSATION, (int) (compensation * 10)); 367 368 if ( hardwareActive ) 369 camera->setParameters(params.flatten()); 370 371 break; 372 373 case '8': 374 params.set(params.KEY_WHITE_BALANCE, (cmd + 1)); 375 376 if ( hardwareActive ) 377 camera->setParameters(params.flatten()); 378 379 break; 380 381 case '9': 382 for(i = 0; i < length_video_Codecs; i++) 383 { 384 if( strcmp((cmd + 1), videoCodecs[i].desc) == 0) 385 { 386 videoCodecIDX = i; 387 printf("Video Codec Selected: %s\n", 388 videoCodecs[i].desc); 389 break; 390 } 391 } 392 break; 393 394 case 'v': 395 for(i = 0; i < length_outformat; i++) 396 397 { 398 if( strcmp((cmd + 1), outputFormat[i].desc) == 0) 399 { 400 outputFormatIDX = i; 401 printf("Video Codec Selected: %s\n", 402 videoCodecs[i].desc); 403 break; 404 } 405 } 406 break; 407 408 case '~': 409 params.setPreviewFormat(cmd + 1); 410 if ( hardwareActive ) 411 camera->setParameters(params.flatten()); 412 413 break; 414 415 case '$': 416 params.setPictureFormat(cmd + 1); 417 if ( hardwareActive ) 418 camera->setParameters(params.flatten()); 419 420 break; 421 case '-': 422 for(i = 0; i < length_audio_Codecs; i++) 423 { 424 if( strcmp((cmd + 1), audioCodecs[i].desc) == 0) 425 { 426 audioCodecIDX = i; 427 printf("Selected Audio: %s\n", audioCodecs[i].desc); 428 break; 429 } 430 } 431 break; 432 433 case 'A': 434 camera_index=atoi(cmd+1); 435 // camera_index %= ARRAY_SIZE(cameras); 436 camera_index %= length_cam; 437 if ( camera_index == 2) 438 params.set(KEY_STEREO_CAMERA, "true"); 439 else 440 params.set(KEY_STEREO_CAMERA, "false"); 441 442 printf("%s selected.\n", cameras[camera_index]); 443 444 if ( hardwareActive ) { 445 stopPreview(); 446 closeCamera(); 447 openCamera(); 448 } else { 449 closeCamera(); 450 openCamera(); 451 } 452 453 if (camera_index == 0) params.setPreviewFrameRate(30); 454 else params.setPreviewFrameRate(27); 455 456 457 break; 458 459 case 'a': 460 char * temp_str; 461 462 temp_str = strtok(cmd+1,"!"); 463 printf("Latitude %s \n",temp_str); 464 params.set(params.KEY_GPS_LATITUDE, temp_str); 465 temp_str=strtok(NULL,"!"); 466 printf("Longitude %s \n",temp_str); 467 params.set(params.KEY_GPS_LONGITUDE, temp_str); 468 temp_str=strtok(NULL,"!"); 469 printf("Altitude %s \n",temp_str); 470 params.set(params.KEY_GPS_ALTITUDE, temp_str); 471 472 if ( hardwareActive ) 473 camera->setParameters(params.flatten()); 474 break; 475 476 case 'l': 477 case 'L': 478 for(i = 0; i < lenght_Vcapture_size; i++) 479 { 480 if( strcmp((cmd + 1), VcaptureSize[i].desc) == 0) 481 { 482 VcaptureSizeIDX = i; 483 printf("Video Capture Size: %s\n", VcaptureSize[i].desc); 484 break; 485 } 486 } 487 break; 488 case ']': 489 for(i = 0; i < length_V_bitRate; i++) 490 { 491 if( strcmp((cmd + 1), VbitRate[i].desc) == 0) 492 { 493 VbitRateIDX = i; 494 printf("Video Bit Rate: %s\n", VbitRate[i].desc); 495 break; 496 } 497 } 498 break; 499 case ':': 500 int width, height; 501 for(i = 0; i < length_previewSize ; i++) 502 { 503 if( strcmp((cmd + 1), previewSize[i].desc) == 0) 504 { 505 width = previewSize[i].width; 506 height = previewSize[i].height; 507 thumbSizeIDX = i; 508 break; 509 } 510 } 511 512 if (i == length_previewSize ) //if the resolution is not in the supported ones 513 { 514 char *res = NULL; 515 res = strtok(cmd + 1, "x"); 516 width = atoi(res); 517 res = strtok(NULL, "x"); 518 height = atoi(res); 519 } 520 521 params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, width); 522 params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, height); 523 524 if ( hardwareActive ) 525 camera->setParameters(params.flatten()); 526 527 break; 528 529 case '\'': 530 thumbQuality = atoi(cmd + 1); 531 532 params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, thumbQuality); 533 if ( hardwareActive ) 534 camera->setParameters(params.flatten()); 535 break; 536 537 case '*': 538 if ( hardwareActive ) 539 camera->startRecording(); 540 break; 541 542 case 't': 543 params.setPreviewFormat((cmd + 1)); 544 if ( hardwareActive ) 545 camera->setParameters(params.flatten()); 546 break; 547 548 case 'o': 549 jpegQuality = atoi(cmd + 1); 550 params.set(CameraParameters::KEY_JPEG_QUALITY, jpegQuality); 551 552 if ( hardwareActive ) 553 camera->setParameters(params.flatten()); 554 555 break; 556 557 558 case '&': 559 printf("Enabling Preview Callback"); 560 dump_preview = 1; 561 camera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_ENABLE_MASK); 562 break; 563 564 565 case 'k': 566 ippIDX_old = atoi(cmd + 1); 567 params.set(KEY_IPP, atoi(cmd + 1)); 568 if ( hardwareActive ) 569 camera->setParameters(params.flatten()); 570 571 break; 572 573 case 'K': 574 params.set(KEY_GBCE, (cmd+1)); 575 if ( hardwareActive ) 576 camera->setParameters(params.flatten()); 577 578 break; 579 580 case 'u': 581 // HQ should always be in ldc-nsf 582 // if not HQ, then return the ipp to its previous state 583 if( !strcmp(capture[capture_mode], "high-quality") ) { 584 ippIDX_old = ippIDX; 585 ippIDX = 3; 586 params.set(KEY_IPP, ipp_mode[ippIDX]); 587 } else { 588 ippIDX = ippIDX_old; 589 } 590 591 params.set(KEY_MODE, (cmd + 1)); 592 if ( hardwareActive ) 593 camera->setParameters(params.flatten()); 594 595 break; 596 597 case 'U': 598 599 params.set(KEY_TEMP_BRACKETING, (cmd + 1)); 600 601 if ( hardwareActive ) 602 camera->setParameters(params.flatten()); 603 604 break; 605 606 case 'W': 607 608 tempBracketRange = atoi(cmd + 1); 609 tempBracketRange %= TEMP_BRACKETING_MAX_RANGE; 610 if ( 0 == tempBracketRange ) { 611 tempBracketRange = 1; 612 } 613 614 params.set(KEY_TEMP_BRACKETING_NEG, tempBracketRange); 615 params.set(KEY_TEMP_BRACKETING_POS, tempBracketRange); 616 617 if ( hardwareActive ) 618 camera->setParameters(params.flatten()); 619 620 break; 621 622 case '#': 623 624 params.set(KEY_BURST, atoi(cmd + 1)); 625 626 if ( hardwareActive ) 627 camera->setParameters(params.flatten()); 628 629 break; 630 631 case 'J': 632 params.set(CameraParameters::KEY_FLASH_MODE, (cmd+1)); 633 634 if ( hardwareActive ) 635 camera->setParameters(params.flatten()); 636 637 break; 638 639 case 'w': 640 params.set(params.KEY_SCENE_MODE, (cmd + 1)); 641 642 if ( hardwareActive ) 643 camera->setParameters(params.flatten()); 644 645 break; 646 647 case 'B' : 648 params.set(KEY_VNF, (cmd + 1)); 649 650 if ( hardwareActive ) 651 camera->setParameters(params.flatten()); 652 653 654 case 'C' : 655 params.set(KEY_VSTAB, (cmd + 1)); 656 657 if ( hardwareActive ) 658 camera->setParameters(params.flatten()); 659 break; 660 661 case 'D': 662 if ( hardwareActive ) 663 camera->stopRecording(); 664 break; 665 666 case 'E': 667 if(hardwareActive) 668 params.unflatten(camera->getParameters()); 669 printSupportedParams(); 670 break; 671 672 case 'i': 673 iso_mode = atoi(cmd + 1); 674 params.set(KEY_ISO, iso_mode); 675 676 if ( hardwareActive ) 677 camera->setParameters(params.flatten()); 678 679 break; 680 681 case 'h': 682 sharpness = atoi(cmd + 1); 683 params.set(KEY_SHARPNESS, sharpness); 684 685 if ( hardwareActive ) 686 camera->setParameters(params.flatten()); 687 688 break; 689 690 case '@': 691 if ( hardwareActive ) { 692 693 closeCamera(); 694 695 if ( 0 >= openCamera() ) { 696 printf( "Reconnected to CameraService \n"); 697 } 698 } 699 700 break; 701 702 case 'c': 703 contrast = atoi(cmd + 1); 704 params.set(KEY_CONTRAST, contrast); 705 706 if ( hardwareActive ) { 707 camera->setParameters(params.flatten()); 708 } 709 710 break; 711 712 case 'z': 713 case 'Z': 714 715#if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) 716 params.set(CameraParameters::KEY_ZOOM, atoi(cmd + 1)); 717#else 718 719 for(i = 0; i < length_Zoom; i++) 720 { 721 if( strcmp((cmd + 1), zoom[i].zoom_description) == 0) 722 { 723 zoomIDX = i; 724 break; 725 } 726 } 727 728 params.set(CameraParameters::KEY_ZOOM, zoom[zoomIDX].idx); 729#endif 730 731 if ( hardwareActive ) 732 camera->setParameters(params.flatten()); 733 734 break; 735 736 case 'j': 737 params.set(KEY_EXPOSURE, (cmd + 1)); 738 739 if ( hardwareActive ) 740 camera->setParameters(params.flatten()); 741 742 break; 743 744 case 'b': 745 brightness = atoi(cmd + 1); 746 params.set(KEY_BRIGHTNESS, brightness); 747 748 if ( hardwareActive ) 749 camera->setParameters(params.flatten()); 750 751 break; 752 753 case 's': 754 saturation = atoi(cmd + 1); 755 params.set(KEY_SATURATION, saturation); 756 757 if ( hardwareActive ) 758 camera->setParameters(params.flatten()); 759 760 break; 761 762 case 'e': 763 params.set(params.KEY_EFFECT, (cmd + 1)); 764 765 if ( hardwareActive ) 766 camera->setParameters(params.flatten()); 767 768 break; 769 770 case 'r': 771 772 frameR = atoi(cmd + 1); 773 774 775 if (camera_index == 0) { 776 for (i = 0; i < length_fpsConst_Ranges; i++) { 777 if (frameR == fpsConstRanges[i].constFramerate) 778 frameRateIndex = i; 779 780 } 781 } else { 782 for (i = 0; i < length_fpsConst_RangesSec; i++) { 783 if (frameR == fpsConstRangesSec[i].constFramerate) 784 frameRateIndex = i; 785 } 786 } 787 788 789 if (camera_index == 0) 790 params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsConstRanges[frameRateIndex].range); 791 else 792 params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsConstRangesSec[frameRateIndex].range); 793 794 795 if ( hardwareActive && previewRunning ) { 796 camera->stopPreview(); 797 camera->setParameters(params.flatten()); 798 camera->startPreview(); 799 } else if ( hardwareActive ) { 800 camera->setParameters(params.flatten()); 801 } 802 803 break; 804 805 case 'R': 806 for(i = 0; i < length_fps_ranges; i++) 807 { 808 if( strcmp((cmd + 1), fpsRanges[i].rangeDescription) == 0) 809 { 810 fpsRangeIdx = i; 811 printf("Selected Framerate range: %s\n", fpsRanges[i].rangeDescription); 812 if ( hardwareActive ) { 813 params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsRanges[i].range); 814 params.remove(CameraParameters::KEY_PREVIEW_FRAME_RATE); 815 camera->setParameters(params.flatten()); 816 } 817 break; 818 } 819 } 820 break; 821 822 case 'x': 823 params.set(params.KEY_ANTIBANDING, (cmd + 1)); 824 825 if ( hardwareActive ) 826 camera->setParameters(params.flatten()); 827 828 break; 829 830 case 'g': 831 params.set(params.KEY_FOCUS_MODE, (cmd + 1)); 832 833 if ( hardwareActive ) 834 camera->setParameters(params.flatten()); 835 836 break; 837 838 case 'G': 839 840 params.set(CameraParameters::KEY_FOCUS_AREAS, (cmd + 1)); 841 842 if ( hardwareActive ) 843 camera->setParameters(params.flatten()); 844 845 params.remove(CameraParameters::KEY_FOCUS_AREAS); 846 847 case 'f': 848 gettimeofday(&autofocus_start, 0); 849 850 if ( hardwareActive ) 851 camera->autoFocus(); 852 853 break; 854 855 case 'p': 856 gettimeofday(&picture_start, 0); 857 858 if ( hardwareActive ) 859 ret = camera->takePicture(CAMERA_MSG_COMPRESSED_IMAGE|CAMERA_MSG_RAW_IMAGE); 860 861 if ( ret != NO_ERROR ) 862 printf("Error returned while taking a picture"); 863 break; 864 865 case 'd': 866 dly = atoi(cmd + 1); 867 sleep(dly); 868 break; 869 870 case 'q': 871 dump_mem_status(); 872 stopPreview(); 873 874 if ( recordingMode ) { 875 stopRecording(); 876 closeRecorder(); 877 878 recordingMode = false; 879 } 880 goto exit; 881 882 case '\n': 883 printf("Iteration: %d \n", iteration); 884 iteration++; 885 break; 886 887 case '{': 888 if ( atoi(cmd + 1) > 0 ) 889 params.set(KEY_S3D2D_PREVIEW_MODE, "on"); 890 else 891 params.set(KEY_S3D2D_PREVIEW_MODE, "off"); 892 if ( hardwareActive ) 893 camera->setParameters(params.flatten()); 894 break; 895 896 case 'M': 897 params.set(KEY_MEASUREMENT, (cmd + 1)); 898 if ( hardwareActive ) 899 camera->setParameters(params.flatten()); 900 break; 901 case 'm': 902 { 903 params.set(KEY_METERING_MODE, (cmd + 1)); 904 if ( hardwareActive ) 905 { 906 camera->setParameters(params.flatten()); 907 } 908 break; 909 } 910 case '<': 911 { 912 char coord_str[8]; 913 latitude += degree_by_step; 914 if (latitude > 90.0) 915 { 916 latitude -= 180.0; 917 } 918 snprintf(coord_str, 7, "%.7lf", latitude); 919 params.set(params.KEY_GPS_LATITUDE, coord_str); 920 if ( hardwareActive ) 921 { 922 camera->setParameters(params.flatten()); 923 } 924 break; 925 } 926 927 case '=': 928 { 929 char coord_str[8]; 930 longitude += degree_by_step; 931 if (longitude > 180.0) 932 { 933 longitude -= 360.0; 934 } 935 snprintf(coord_str, 7, "%.7lf", longitude); 936 params.set(params.KEY_GPS_LONGITUDE, coord_str); 937 if ( hardwareActive ) 938 { 939 camera->setParameters(params.flatten()); 940 } 941 break; 942 } 943 944 case '>': 945 { 946 char coord_str[8]; 947 altitude += 12345.67890123456789; 948 if (altitude > 100000.0) 949 { 950 altitude -= 200000.0; 951 } 952 snprintf(coord_str, 7, "%.7lf", altitude); 953 params.set(params.KEY_GPS_ALTITUDE, coord_str); 954 if ( hardwareActive ) 955 { 956 camera->setParameters(params.flatten()); 957 } 958 break; 959 } 960 961 case 'X': 962 { 963 char rem_str[50]; 964 printf("Deleting images from %s \n", dir_path); 965 if(!sprintf(rem_str,"rm %s/*.jpg",dir_path)) 966 printf("Sprintf Error"); 967 if(system(rem_str)) 968 printf("Images were not deleted\n"); 969 break; 970 } 971 972 case '_': 973 { 974 AutoConvergenceModeIDX = atoi(cmd + 1); 975 if ( AutoConvergenceModeIDX < 0 || AutoConvergenceModeIDX > 4 ) 976 AutoConvergenceModeIDX = 0; 977 params.set(KEY_AUTOCONVERGENCE, autoconvergencemode[AutoConvergenceModeIDX]); 978 if ( AutoConvergenceModeIDX != 4 ) 979 params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceDefaultValueIDX]); 980 if ( hardwareActive ) 981 camera->setParameters(params.flatten()); 982 break; 983 } 984 985 case '^': 986 { 987 char strtmpval[7]; 988 if ( strcmp (autoconvergencemode[AutoConvergenceModeIDX], AUTOCONVERGENCE_MODE_MANUAL) == 0) { 989 sprintf(strtmpval,"%d", atoi(cmd + 1)); 990 params.set(KEY_MANUALCONVERGENCE_VALUES, strtmpval); 991 if ( hardwareActive ) 992 camera->setParameters(params.flatten()); 993 } 994 break; 995 } 996 997 default: 998 printf("Unrecognized command!\n"); 999 break; 1000 } 1001 1002 cmd = strtok_r(NULL, DELIMITER, &ctx); 1003 } 1004 1005exit: 1006 if (stopScript == true) 1007 { 1008 return -1; 1009 } 1010 else 1011 { 1012 return 0; 1013 } 1014} 1015 1016 1017char * get_cycle_cmd(const char *aSrc) { 1018 unsigned ind = 0; 1019 char *cycle_cmd = new char[256]; 1020 1021 while ((*aSrc != '+') && (*aSrc != '\0')) { 1022 cycle_cmd[ind++] = *aSrc++; 1023 } 1024 cycle_cmd[ind] = '\0'; 1025 1026 return cycle_cmd; 1027} 1028 1029status_t dump_mem_status() { 1030 system(MEDIASERVER_DUMP); 1031 return system(MEMORY_DUMP); 1032} 1033 1034char *load_script(char *config) { 1035 FILE *infile; 1036 size_t fileSize; 1037 char *script; 1038 size_t nRead = 0; 1039 char dir_name[40]; 1040 size_t count; 1041 char rCount [5]; 1042 1043 count = 0; 1044 1045 infile = fopen(config, "r"); 1046 1047 strcpy(script_name,config); 1048 1049 // remove just the '.txt' part of the config 1050 while((config[count] != '.') && (count < sizeof(dir_name)/sizeof(dir_name[0]))) 1051 count++; 1052 1053 printf("\n SCRIPT : <%s> is currently being executed \n",script_name); 1054 if(strncpy(dir_name,config,count) == NULL) 1055 printf("Strcpy error"); 1056 1057 dir_name[count]=NULL; 1058 1059 if(strcat(dir_path,dir_name) == NULL) 1060 printf("Strcat error"); 1061 1062 if(restartCount) 1063 { 1064 sprintf(rCount,"_%d",restartCount); 1065 if(strcat(dir_path, rCount) == NULL) 1066 printf("Strcat error RestartCount"); 1067 } 1068 1069 printf("\n COMPLETE FOLDER PATH : %s \n",dir_path); 1070 if(mkdir(dir_path,0777) == -1) { 1071 printf("\n Directory %s was not created \n",dir_path); 1072 } else { 1073 printf("\n Directory %s was created \n",dir_path); 1074 } 1075 printf("\n DIRECTORY CREATED FOR TEST RESULT IMAGES IN MMC CARD : %s \n",dir_name); 1076 1077 if( (NULL == infile)){ 1078 printf("Error while opening script file %s!\n", config); 1079 return NULL; 1080 } 1081 1082 fseek(infile, 0, SEEK_END); 1083 fileSize = ftell(infile); 1084 fseek(infile, 0, SEEK_SET); 1085 1086 script = (char *) malloc(fileSize); 1087 1088 if ( NULL == script ) { 1089 printf("Unable to allocate buffer for the script\n"); 1090 1091 return NULL; 1092 } 1093 1094 if ((nRead = fread(script, 1, fileSize, infile)) != fileSize) { 1095 printf("Error while reading script file!\n"); 1096 1097 free(script); 1098 fclose(infile); 1099 return NULL; 1100 } 1101 1102 fclose(infile); 1103 1104 return script; 1105} 1106 1107int start_logging(char *config, int &pid) { 1108 char dir_name[40]; 1109 size_t count = 0; 1110 int status = 0; 1111 1112 // remove just the '.txt' part of the config 1113 while((config[count] != '.') && (count < sizeof(dir_name)/sizeof(dir_name[0]))) 1114 count++; 1115 1116 if(strncpy(dir_name,config,count) == NULL) 1117 printf("Strcpy error"); 1118 1119 dir_name[count]=NULL; 1120 1121 pid = fork(); 1122 if (pid == 0) 1123 { 1124 char *command_list[] = {"sh", "-c", NULL, NULL}; 1125 char log_cmd[120]; 1126 // child process to run logging 1127 1128 // set group id of this process to itself 1129 // we will use this group id to kill the 1130 // application logging 1131 setpgid(getpid(), getpid()); 1132 1133 /* Start logcat */ 1134 if(!sprintf(log_cmd,"logcat > /sdcard/%s/log.txt &",dir_name)) 1135 printf(" Sprintf Error"); 1136 1137 /* Start Syslink Trace */ 1138 if(bLogSysLinkTrace) { 1139 if(!sprintf(log_cmd,"%s /system/bin/syslink_trace_daemon.out -l /sdcard/%s/syslink_trace.txt -f &",log_cmd, dir_name)) 1140 printf(" Sprintf Error"); 1141 } 1142 1143 command_list[2] = (char *)log_cmd; 1144 execvp("/system/bin/sh", command_list); 1145 } if(pid < 0) 1146 { 1147 printf("failed to fork logcat\n"); 1148 return -1; 1149 } 1150 1151 //wait for logging to start 1152 if(waitpid(pid, &status, 0) != pid) 1153 { 1154 printf("waitpid failed in log fork\n"); 1155 return -1; 1156 }else 1157 printf("logging started... status=%d\n", status); 1158 1159 return 0; 1160} 1161 1162int stop_logging(int &pid) 1163{ 1164 if(pid > 0) 1165 { 1166 if(killpg(pid, SIGKILL)) 1167 { 1168 printf("Exit command failed"); 1169 return -1; 1170 } else { 1171 printf("\nlogging for script %s is complete\n logcat saved @ location: %s\n",script_name,dir_path); 1172 if (bLogSysLinkTrace) 1173 printf(" syslink_trace is saved @ location: %s\n\n",dir_path); 1174 } 1175 } 1176 return 0; 1177} 1178 1179int execute_error_script(char *script) { 1180 char *cmd, *ctx; 1181 char id; 1182 status_t stat = NO_ERROR; 1183 1184 LOG_FUNCTION_NAME; 1185 1186 cmd = strtok_r((char *) script, DELIMITER, &ctx); 1187 1188 while ( NULL != cmd ) { 1189 id = cmd[0]; 1190 1191 switch (id) { 1192 1193 case '0': { 1194 bufferStarvationTest = 1; 1195 params.set(KEY_BUFF_STARV, bufferStarvationTest); //enable buffer starvation 1196 1197 if ( !recordingMode ) { 1198 1199 recordingMode = true; 1200 1201 if ( startPreview() < 0 ) { 1202 printf("Error while starting preview\n"); 1203 1204 return -1; 1205 } 1206 1207 if ( openRecorder() < 0 ) { 1208 printf("Error while openning video recorder\n"); 1209 1210 return -1; 1211 } 1212 1213 if ( configureRecorder() < 0 ) { 1214 printf("Error while configuring video recorder\n"); 1215 1216 return -1; 1217 } 1218 1219 if ( startRecording() < 0 ) { 1220 printf("Error while starting video recording\n"); 1221 1222 return -1; 1223 } 1224 1225 } 1226 1227 usleep(1000000);//1s 1228 1229 stopPreview(); 1230 1231 if ( recordingMode ) { 1232 stopRecording(); 1233 closeRecorder(); 1234 1235 recordingMode = false; 1236 } 1237 1238 break; 1239 } 1240 1241 case '1': { 1242 int* tMemoryEater = new int[999999999]; 1243 1244 if (!tMemoryEater) { 1245 printf("Not enough memory\n"); 1246 return -1; 1247 } else { 1248 delete tMemoryEater; 1249 } 1250 1251 break; 1252 } 1253 1254 case '2': { 1255 //camera = Camera::connect(); 1256 1257 if ( NULL == camera.get() ) { 1258 printf("Unable to connect to CameraService\n"); 1259 return -1; 1260 } 1261 1262 break; 1263 } 1264 1265 case '3': { 1266 int err = 0; 1267 1268 err = open("/dev/video5", O_RDWR); 1269 1270 if (err < 0) { 1271 printf("Could not open the camera device5: %d\n", err ); 1272 return err; 1273 } 1274 1275 if ( startPreview() < 0 ) { 1276 printf("Error while starting preview\n"); 1277 return -1; 1278 } 1279 1280 usleep(1000000);//1s 1281 1282 stopPreview(); 1283 1284 close(err); 1285 break; 1286 } 1287 1288 case '4': { 1289 1290 if ( hardwareActive ) { 1291 1292 params.setPictureFormat("invalid-format"); 1293 params.setPreviewFormat("invalid-format"); 1294 1295 stat = camera->setParameters(params.flatten()); 1296 1297 if ( NO_ERROR != stat ) { 1298 printf("Test passed!\n"); 1299 } else { 1300 printf("Test failed!\n"); 1301 } 1302 1303 initDefaults(); 1304 } 1305 1306 break; 1307 } 1308 1309 case '5': { 1310 1311 if ( hardwareActive ) { 1312 1313 params.setPictureSize(-1, -1); 1314 params.setPreviewSize(-1, -1); 1315 1316 stat = camera->setParameters(params.flatten()); 1317 1318 if ( NO_ERROR != stat ) { 1319 printf("Test passed!\n"); 1320 } else { 1321 printf("Test failed!\n"); 1322 } 1323 1324 initDefaults(); 1325 } 1326 1327 break; 1328 } 1329 1330 case '6': { 1331 1332 if ( hardwareActive ) { 1333 1334 params.setPreviewFrameRate(-1); 1335 1336 stat = camera->setParameters(params.flatten()); 1337 1338 if ( NO_ERROR != stat ) { 1339 printf("Test passed!\n"); 1340 } else { 1341 printf("Test failed!\n"); 1342 } 1343 1344 initDefaults(); 1345 } 1346 1347 1348 break; 1349 } 1350 1351 case 'q': { 1352 goto exit; 1353 1354 break; 1355 } 1356 1357 default: { 1358 printf("Unrecognized command!\n"); 1359 1360 break; 1361 } 1362 } 1363 1364 cmd = strtok_r(NULL, DELIMITER, &ctx); 1365 } 1366 1367exit: 1368 1369 return 0; 1370} 1371 1372 1373 1374