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