camera_test_script.cpp revision fd2c5e05707c33c8672f0e95f26837b4053eb74b
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#include <camera/ShotParameters.h>
20
21#include <sys/wait.h>
22
23#include "camera_test.h"
24#include "camera_test_surfacetexture.h"
25#ifdef ANDROID_API_JB_OR_LATER
26#include "camera_test_bufferqueue.h"
27#endif
28
29using namespace android;
30
31extern bool stopScript;
32extern bool hardwareActive;
33extern sp<Camera> camera;
34extern sp<BufferSourceThread> bufferSourceOutputThread;
35extern sp<BufferSourceInput> bufferSourceInput;
36extern CameraParameters params;
37extern ShotParameters shotParams;
38extern bool shotConfigFlush;
39extern bool recordingMode;
40extern int camera_index;
41extern int rotation;
42extern int previewRotation;
43extern const param_Array captureSize[];
44extern const param_Array VcaptureSize[];
45extern const outformat outputFormat[];
46extern const video_Codecs videoCodecs[];
47extern const audio_Codecs audioCodecs[];
48extern const V_bitRate VbitRate[];
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 int numAntibanding;
78extern int numEffects;
79extern int numawb;
80extern int numExposureMode;
81extern int numscene;
82extern int numisoMode;
83extern int numflash;
84extern int numcaptureSize;
85extern int numVcaptureSize;
86extern int numpreviewSize;
87extern int numthumbnailSize;
88extern int numfocus;
89extern int numpreviewFormat;
90extern int numpictureFormat;
91extern int nummodevalues;
92extern int numLay;
93extern int numCLay;
94extern int constCnt;
95extern int rangeCnt;
96extern int * constFramerate;
97extern int frameRateIDX;
98extern int fpsRangeIdx;
99extern int stereoLayoutIDX;
100extern int stereoCapLayoutIDX;
101extern int expBracketIdx;
102int resol_index = 0;
103int a = 0;
104extern char * vstabstr;
105extern char * vnfstr;
106extern char * zoomstr;
107extern char * smoothzoomstr;
108extern char * videosnapshotstr;
109extern char ** antiband;
110extern char **effectss;
111extern bool firstTime;
112extern char **exposureMode;
113extern char **awb;
114extern char **scene;
115extern char ** isoMode;
116extern char ** modevalues;
117extern char **focus;
118extern char **flash;
119extern char **previewFormatArray;
120extern char **pictureFormatArray;
121extern char ** fps_const_str;
122extern char ** fps_range_str;
123extern char ** rangeDescription;
124extern param_Array ** capture_Array;
125extern param_Array ** Vcapture_Array;
126extern param_Array ** preview_Array;
127extern param_Array ** thumbnail_Array;
128extern timeval autofocus_start, picture_start;
129extern const char *cameras[];
130extern double latitude;
131extern double degree_by_step;
132extern double longitude;
133extern double altitude;
134extern char output_dir_path[];
135extern char images_dir_path[];
136extern int AutoConvergenceModeIDX;
137extern const char *autoconvergencemode[];
138extern int numCamera;
139extern bool stereoMode;
140extern char script_name[];
141extern int bufferStarvationTest;
142extern size_t length_previewSize;
143extern size_t length_thumbnailSize;
144extern size_t lenght_Vcapture_size;
145extern size_t length_outformat;
146extern size_t length_capture_Size;
147extern size_t length_video_Codecs;
148extern size_t length_audio_Codecs;
149extern size_t length_V_bitRate;
150extern size_t length_Zoom;
151extern size_t length_fps_ranges;
152extern size_t length_fpsConst_Ranges;
153extern size_t length_fpsConst_RangesSec;
154extern int platformID;
155extern char **stereoLayout;
156extern char **stereoCapLayout;
157extern void getSizeParametersFromCapabilities();
158extern int exposure_mode;
159int manE = 0;
160extern int manualExp ;
161extern int manualExpMin ;
162extern int manualExpMax ;
163int manG = 0;
164extern int manualGain ;
165extern int manualGainMin ;
166extern int manualGainMax ;
167int manC = 0;
168extern int manualConv ;
169extern int manualConvMin ;
170extern int manualConvMax ;
171extern bool faceDetectToggle;
172extern unsigned int burstCount;
173
174void trim_script_cmd(char *cmd) {
175    char *nl, *cr;
176
177    // first remove all carriage return symbols
178    while ( NULL != (cr = strchr(cmd, '\r'))) {
179        for (char *c = cr; '\0' != *c; c++) {
180            *c = *(c+1);
181        }
182    }
183
184    // then remove all single line feed symbols
185    while ( NULL != (nl = strchr(cmd, '\n'))) {
186        if (*nl == *(nl+1)) {
187            // two or more concatenated newlines:
188            // end of script found
189            break;
190        }
191        // clip the newline
192        for (char *c = nl; '\0' != *c; c++) {
193            *c = *(c+1);
194        }
195    }
196}
197
198int execute_functional_script(char *script) {
199    char *cmd, *ctx, *cycle_cmd, *temp_cmd;
200    char id;
201    unsigned int i;
202    int dly;
203    int cycleCounter = 1;
204    int tLen = 0;
205    unsigned int iteration = 0;
206    bool zoomtoggle = false;
207    bool smoothzoomtoggle = false;
208    status_t ret = NO_ERROR;
209    //int frameR = 20;
210    int frameRConst = 0;
211    int frameRRange = 0;
212    struct CameraInfo cameraInfo;
213
214    LOG_FUNCTION_NAME;
215
216    dump_mem_status();
217
218    cmd = strtok_r((char *) script, DELIMITER, &ctx);
219
220    while ( NULL != cmd && (stopScript == false)) {
221        trim_script_cmd(cmd);
222        id = cmd[0];
223        printf("Full Command: %s \n", cmd);
224        printf("Command: %c \n", cmd[0]);
225
226        switch (id) {
227
228            // Case for Suspend-Resume Feature
229            case '!': {
230                // STEP 1: Mount Debugfs
231                system("mkdir /debug");
232                system("mount -t debugfs debugfs /debug");
233
234                // STEP 2: Set up wake up Timer - wake up happens after 5 seconds
235                system("echo 10 > /debug/pm_debug/wakeup_timer_seconds");
236
237                // STEP 3: Make system ready for Suspend
238                system("echo camerahal_test > /sys/power/wake_unlock");
239                // Release wake lock held by test app
240                printf(" Wake lock released ");
241                system("cat /sys/power/wake_lock");
242                system("sendevent /dev/input/event0 1 60 1");
243                system("sendevent /dev/input/event0 1 60 0");
244                // Simulate F2 key press to make display OFF
245                printf(" F2 event simulation complete ");
246
247                //STEP 4: Wait for system Resume and then simuate F1 key
248                sleep(50);//50s  // This delay is not related to suspend resume timer
249                printf(" After 30 seconds of sleep");
250                system("sendevent /dev/input/event0 1 59 0");
251                system("sendevent /dev/input/event0 1 59 1");
252                // Simulate F1 key press to make display ON
253                system("echo camerahal_test > /sys/power/wake_lock");
254                // Acquire wake lock for test app
255
256                break;
257            }
258
259            case '[':
260                if ( hardwareActive )
261                    {
262
263                    camera->setParameters(params.flatten());
264
265                    printf("starting camera preview..");
266                    status_t ret = camera->startPreview();
267                    if(ret !=NO_ERROR)
268                        {
269                        printf("startPreview failed %d..", ret);
270                        }
271                    }
272                break;
273            case '+': {
274                cycleCounter = atoi(cmd + 1);
275                cycle_cmd = get_cycle_cmd(ctx);
276                tLen = strlen(cycle_cmd);
277                temp_cmd = new char[tLen+1];
278
279                for (int ind = 0; ind < cycleCounter; ind++) {
280                    strcpy(temp_cmd, cycle_cmd);
281                    if ( execute_functional_script(temp_cmd) != 0 )
282                      return -1;
283                    temp_cmd[0] = '\0';
284
285                    //patch for image capture
286                    //[
287                    if (ind < cycleCounter - 1) {
288                        if (hardwareActive == false) {
289                            if ( openCamera() < 0 ) {
290                                printf("Camera initialization failed\n");
291
292                                return -1;
293                            }
294
295                            initDefaults();
296                        }
297                    }
298
299                    //]
300                }
301
302                ctx += tLen + 1;
303
304                if (temp_cmd) {
305                    delete temp_cmd;
306                    temp_cmd = NULL;
307                }
308
309                if (cycle_cmd) {
310                    delete cycle_cmd;
311                    cycle_cmd = NULL;
312                }
313
314                break;
315            }
316
317            case '0':
318            {
319                initDefaults();
320                break;
321            }
322
323            case '1':
324
325                if ( startPreview() < 0 ) {
326                    printf("Error while starting preview\n");
327
328                    return -1;
329                }
330
331                break;
332
333            case '2':
334                if ( recordingMode ) {
335                    stopRecording();
336                    stopPreview();
337                    closeRecorder();
338                    camera->disconnect();
339                    camera.clear();
340                    camera = Camera::connect(camera_index);
341                      if ( NULL == camera.get() ) {
342                          sleep(1);
343                          camera = Camera::connect(camera_index);
344                          if ( NULL == camera.get() ) {
345                              return -1;
346                          }
347                      }
348                      camera->setListener(new CameraHandler());
349                      camera->setParameters(params.flatten());
350                      recordingMode = false;
351                } else {
352                    stopPreview();
353                }
354                if (bufferSourceOutputThread.get()) {
355                    bufferSourceOutputThread->requestExit();
356                    bufferSourceOutputThread.clear();
357                }
358
359                break;
360
361            case '3':
362                rotation = atoi(cmd + 1);
363                params.set(CameraParameters::KEY_ROTATION, rotation);
364
365                if ( hardwareActive )
366                    camera->setParameters(params.flatten());
367
368                break;
369
370            case 'V':
371                previewRotation = atoi(cmd + 1);
372                params.set(KEY_SENSOR_ORIENTATION, previewRotation);
373
374                if ( hardwareActive )
375                    camera->setParameters(params.flatten());
376
377                break;
378
379            case '4':
380                printf("Setting resolution...");
381
382                a = checkSupportedParamScriptResol(preview_Array, numpreviewSize, cmd, &resol_index);
383                if (a > -1) {
384                    params.setPreviewSize(preview_Array[resol_index]->width, preview_Array[resol_index]->height);
385                    previewSizeIDX = resol_index;
386                } else {
387                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
388                }
389                if ( hardwareActive && previewRunning ) {
390                    camera->stopPreview();
391                    camera->setParameters(params.flatten());
392                    camera->startPreview();
393                } else if ( hardwareActive ) {
394                    camera->setParameters(params.flatten());
395                }
396                break;
397
398            case '5':
399                if( strcmp((cmd + 1), "MAX_CAPTURE_SIZE") == 0) {
400                    resol_index = 0;
401                    for (int i=0; i<numcaptureSize; i++) {
402                        if ((capture_Array[resol_index]->width * capture_Array[resol_index]->height) < (capture_Array[i]->width * capture_Array[i]->height)) {
403                            resol_index = i;
404                        }
405                    }
406                    if ((0 < capture_Array[resol_index]->width) && (0 < capture_Array[resol_index]->height)) {
407                        params.setPictureSize(capture_Array[resol_index]->width, capture_Array[resol_index]->height);
408                        captureSizeIDX = resol_index;
409                        printf("Capture Size set: %dx%d\n", capture_Array[resol_index]->width, capture_Array[resol_index]->height);
410                    } else {
411                        printf("\nCapture size is 0!\n");
412                    }
413                } else {
414                    a = checkSupportedParamScriptResol(capture_Array, numcaptureSize, cmd, &resol_index);
415                    if (camera_index != 2) {
416                        if (a > -1) {
417                            params.setPictureSize(capture_Array[resol_index]->width, capture_Array[resol_index]->height);
418                            captureSizeIDX = resol_index;
419                        } else {
420                            printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
421                        }
422                    } else {
423                        int widthC, heightC;
424                        char *resC = NULL;
425                        resC = strtok(cmd + 1, "x");
426                        widthC = atoi(resC);
427                        resC = strtok(NULL, "x");
428                        heightC = atoi(resC);
429                        params.setPictureSize(widthC,heightC);
430                    a = checkSupportedParamScriptResol(capture_Array, numcaptureSize,
431                                                       widthC, heightC, &resol_index);
432                    if (a > -1) captureSizeIDX = resol_index;
433                    }
434
435                    if ( hardwareActive ) {
436                        camera->setParameters(params.flatten());
437                    }
438                }
439                break;
440
441            case '6':
442
443                if ( !recordingMode ) {
444
445                    recordingMode = true;
446
447                    if ( startPreview() < 0 ) {
448                        printf("Error while starting preview\n");
449
450                        return -1;
451                    }
452
453                    if ( openRecorder() < 0 ) {
454                        printf("Error while openning video recorder\n");
455
456                        return -1;
457                    }
458
459                    if ( configureRecorder() < 0 ) {
460                        printf("Error while configuring video recorder\n");
461
462                        return -1;
463                    }
464
465                    if ( startRecording() < 0 ) {
466                        printf("Error while starting video recording\n");
467
468                        return -1;
469                    }
470
471                }
472
473                break;
474
475            case '7':
476                compensation = atof(cmd + 1);
477                params.set(KEY_COMPENSATION, (int) (compensation * 10));
478
479                if ( hardwareActive )
480                    camera->setParameters(params.flatten());
481
482                break;
483
484            case '8':
485
486                a = checkSupportedParamScript(awb, numawb, cmd);
487                if (a > -1) {
488                    params.set(params.KEY_WHITE_BALANCE, (cmd + 1));
489                } else {
490                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
491                }
492
493                if ( hardwareActive )
494                    camera->setParameters(params.flatten());
495
496                break;
497
498            case '9':
499                for(i = 0; i < length_video_Codecs; i++)
500                {
501                    if( strcmp((cmd + 1), videoCodecs[i].desc) == 0)
502                    {
503                        videoCodecIDX = i;
504                        printf("Video Codec Selected: %s\n",
505                                videoCodecs[i].desc);
506                        break;
507                    }
508                }
509                break;
510
511            case 'v':
512                for(i = 0; i < length_outformat; i++)
513
514                {
515                    if( strcmp((cmd + 1), outputFormat[i].desc) == 0)
516                    {
517                        outputFormatIDX = i;
518                        printf("Video Codec Selected: %s\n",
519                                videoCodecs[i].desc);
520                        break;
521                    }
522                }
523            break;
524
525            case '~':
526
527                a = checkSupportedParamScript(previewFormatArray, numpreviewFormat, cmd);
528                if (a > -1) {
529                    params.setPreviewFormat(cmd + 1);
530                } else {
531                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
532                }
533
534                if ( hardwareActive )
535                    camera->setParameters(params.flatten());
536
537                break;
538
539            case '$':
540
541                a = checkSupportedParamScript(pictureFormatArray, numpictureFormat, cmd);
542                if (a > -1) {
543                    params.setPictureFormat(cmd + 1);
544                } else {
545                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
546                }
547
548                if ( hardwareActive )
549                    camera->setParameters(params.flatten());
550
551                break;
552            case '-':
553                for(i = 0; i < length_audio_Codecs; i++)
554                {
555                    if( strcmp((cmd + 1), audioCodecs[i].desc) == 0)
556                    {
557                        audioCodecIDX = i;
558                        printf("Selected Audio: %s\n", audioCodecs[i].desc);
559                        break;
560                    }
561                }
562                break;
563
564            case 'A':
565                camera_index=atoi(cmd+1);
566                camera_index %= numCamera;
567
568                printf("%s selected.\n", cameras[camera_index]);
569                firstTime = true;
570
571                if ( hardwareActive ) {
572                    stopPreview();
573                    closeCamera();
574                    openCamera();
575                } else {
576                    closeCamera();
577                    openCamera();
578                }
579                break;
580
581            case 'a':
582                char * temp_str;
583
584                temp_str = strtok(cmd+1,"!");
585                printf("Latitude %s \n",temp_str);
586                params.set(params.KEY_GPS_LATITUDE, temp_str);
587                temp_str=strtok(NULL,"!");
588                printf("Longitude %s \n",temp_str);
589                params.set(params.KEY_GPS_LONGITUDE, temp_str);
590                temp_str=strtok(NULL,"!");
591                printf("Altitude %s \n",temp_str);
592                params.set(params.KEY_GPS_ALTITUDE, temp_str);
593
594                if ( hardwareActive )
595                    camera->setParameters(params.flatten());
596                break;
597
598            case 'l':
599                a = checkSupportedParamScriptResol(Vcapture_Array, numVcaptureSize, cmd, &resol_index);
600                if (a > -1) {
601                    VcaptureSizeIDX = resol_index;
602                } else {
603                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
604                }
605                break;
606
607            case 'L':
608                if(stereoMode)
609                {
610                    a = checkSupportedParamScriptLayout(stereoLayout, numLay, cmd, &stereoLayoutIDX);
611                    if (a > -1) {
612                        params.set(KEY_S3D_PRV_FRAME_LAYOUT, cmd + 1);
613                    } else {
614                        printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
615                    }
616
617
618                    getSizeParametersFromCapabilities();
619                    if (hardwareActive && previewRunning) {
620                        stopPreview();
621                        camera->setParameters(params.flatten());
622                        startPreview();
623                    } else if (hardwareActive) {
624                        camera->setParameters(params.flatten());
625                    }
626                }
627                break;
628
629
630            case '.':
631                if(stereoMode)
632                {
633                    a = checkSupportedParamScriptLayout(stereoCapLayout, numCLay, cmd, &stereoCapLayoutIDX);
634                    if (a > -1) {
635                        params.set(KEY_S3D_CAP_FRAME_LAYOUT_VALUES, cmd + 1);
636                    } else {
637                        printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
638                    }
639
640
641                    getSizeParametersFromCapabilities();
642                    if (hardwareActive && previewRunning) {
643                        stopPreview();
644                        camera->setParameters(params.flatten());
645                        startPreview();
646                    } else if (hardwareActive) {
647                        camera->setParameters(params.flatten());
648                    }
649                }
650                break;
651
652            case ']':
653                for(i = 0; i < length_V_bitRate; i++)
654                {
655                    if( strcmp((cmd + 1), VbitRate[i].desc) == 0)
656                    {
657                        VbitRateIDX = i;
658                        printf("Video Bit Rate: %s\n", VbitRate[i].desc);
659                        break;
660                    }
661                }
662                break;
663            case ':':
664
665                a = checkSupportedParamScriptResol(thumbnail_Array, numthumbnailSize, cmd, &resol_index);
666                if (a > -1) {
667                    params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, thumbnail_Array[resol_index]->width);
668                    params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT,thumbnail_Array[resol_index]->height);
669                    thumbSizeIDX = resol_index;
670                } else {
671                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
672                }
673
674                if ( hardwareActive ) {
675                    camera->setParameters(params.flatten());
676                }
677
678
679                break;
680
681            case '\'':
682                thumbQuality = atoi(cmd + 1);
683
684                params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, thumbQuality);
685                if ( hardwareActive )
686                    camera->setParameters(params.flatten());
687                break;
688
689            case '*':
690                if ( hardwareActive )
691                    camera->startRecording();
692                break;
693
694            case 't':
695                params.setPreviewFormat((cmd + 1));
696                if ( hardwareActive )
697                    camera->setParameters(params.flatten());
698                break;
699
700            case 'o':
701                jpegQuality = atoi(cmd + 1);
702                params.set(CameraParameters::KEY_JPEG_QUALITY, jpegQuality);
703
704                if ( hardwareActive )
705                    camera->setParameters(params.flatten());
706
707                break;
708
709
710            case '&':
711                printf("Enabling Preview Callback");
712                dump_preview = 1;
713                camera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_ENABLE_MASK);
714                break;
715
716
717            case 'k':
718                ippIDX_old = atoi(cmd + 1);
719                params.set(KEY_IPP, atoi(cmd + 1));
720                if ( hardwareActive )
721                    camera->setParameters(params.flatten());
722
723                break;
724
725            case 'K':
726                params.set(KEY_GBCE, (cmd+1));
727                if ( hardwareActive )
728                    camera->setParameters(params.flatten());
729
730                break;
731
732            case 'F':
733                if ( hardwareActive ) {
734                    camera->sendCommand(CAMERA_CMD_START_FACE_DETECTION, 0, 0);
735                    faceDetectToggle = true;
736                }
737
738                break;
739
740            case 'I':
741                params.set(KEY_AF_TIMEOUT, (cmd + 1));
742
743                if ( hardwareActive )
744                    camera->setParameters(params.flatten());
745
746                break;
747
748            case 'T':
749
750                if ( hardwareActive ) {
751                    camera->sendCommand(CAMERA_CMD_STOP_FACE_DETECTION, 0, 0);
752                    faceDetectToggle = false;
753                }
754
755                break;
756
757            case 'O':
758                params.set(KEY_GLBCE, (cmd+1));
759                if ( hardwareActive )
760                    camera->setParameters(params.flatten());
761
762                break;
763
764            case 'u':
765                // HQ should always be in ldc-nsf
766                // if not HQ, then return the ipp to its previous state
767                if ( !strcmp((cmd + 1), "high-quality") ) {
768                    ippIDX_old = ippIDX;
769                    ippIDX = 3;
770                    params.set(KEY_IPP, ipp_mode[ippIDX]);
771                    params.set(CameraParameters::KEY_RECORDING_HINT, CameraParameters::FALSE);
772                    previewRotation = 0;
773                    params.set(KEY_SENSOR_ORIENTATION, previewRotation);
774                } else if ( !strcmp((cmd + 1), "video-mode") ) {
775                    params.set(CameraParameters::KEY_RECORDING_HINT, CameraParameters::TRUE);
776                    camera->getCameraInfo(camera_index, &cameraInfo);
777                    previewRotation = ((360-cameraInfo.orientation)%360);
778                    if (previewRotation >= 0 || previewRotation <=360) {
779                        params.set(KEY_SENSOR_ORIENTATION, previewRotation);
780                    }
781                    printf("previewRotation: %d\n", previewRotation);
782                } else {
783                    ippIDX = ippIDX_old;
784                    params.set(CameraParameters::KEY_RECORDING_HINT, CameraParameters::FALSE);
785                    previewRotation = 0;
786                    params.set(KEY_SENSOR_ORIENTATION, previewRotation);
787                }
788                a = checkSupportedParamScript(modevalues, nummodevalues, cmd);
789                if (a > -1) {
790                    params.set(KEY_MODE, (cmd + 1));
791                } else {
792                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
793                }
794
795                if ( hardwareActive ) {
796                    if (previewRunning) {
797                        stopPreview();
798                    }
799                    camera->setParameters(params.flatten());
800                    // Get parameters from capabilities for the new capture mode
801                    params = camera->getParameters();
802                    getSizeParametersFromCapabilities();
803                    getParametersFromCapabilities();
804                    // Set framerate 30fps and 12MP capture resolution if available for the new capture mode.
805                    // If not available set framerate and capture mode under index 0 from fps_const_str and capture_Array.
806                    frameRateIDX = getDefaultParameter("30000,30000", constCnt, fps_const_str);
807                    captureSizeIDX = getDefaultParameterResol("12MP", numcaptureSize, capture_Array);
808                    params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fps_const_str[frameRateIDX]);
809                    params.setPictureSize(capture_Array[captureSizeIDX]->width, capture_Array[captureSizeIDX]->height);
810                    camera->setParameters(params.flatten());
811                }
812
813                break;
814
815            case 'U':
816
817                params.set(KEY_TEMP_BRACKETING, (cmd + 1));
818
819                if ( hardwareActive )
820                    camera->setParameters(params.flatten());
821
822                break;
823
824            case 'H':
825
826                setDefaultExpGainPreset(shotParams, atoi(cmd + 1));
827                break;
828
829
830            case 'n':
831
832            switch (*(cmd + 1)) {
833                case 0:
834                shotConfigFlush = false;
835                    break;
836                case 1:
837                shotConfigFlush = true;
838                    break;
839                default:
840                printf ("Mangling flush shot config command: \"%s\"\n", (cmd + 1));
841                    break;
842            }
843
844            updateShotConfigFlushParam();
845
846            break;
847
848            case '?':
849
850                setExpGainPreset(shotParams, cmd + 1, true, PARAM_EXP_BRACKET_PARAM_NONE, shotConfigFlush);
851
852                break;
853
854            case 'W':
855
856                tempBracketRange = atoi(cmd + 1);
857                tempBracketRange %= TEMP_BRACKETING_MAX_RANGE;
858                if ( 0 == tempBracketRange ) {
859                    tempBracketRange = 1;
860                }
861
862                params.set(KEY_TEMP_BRACKETING_NEG, tempBracketRange);
863                params.set(KEY_TEMP_BRACKETING_POS, tempBracketRange);
864
865                if ( hardwareActive )
866                    camera->setParameters(params.flatten());
867
868            break;
869
870            case '#':
871
872                params.set(KEY_TI_BURST, atoi(cmd + 1));
873                burstCount = atoi(cmd + 1);
874
875                if ( hardwareActive )
876                    camera->setParameters(params.flatten());
877
878                break;
879
880            case 'J':
881
882                a = checkSupportedParamScript(flash, numflash, cmd);
883                if (a > -1) {
884                    params.set(CameraParameters::KEY_FLASH_MODE, (cmd + 1));
885                } else {
886                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
887                }
888
889                if ( hardwareActive )
890                    camera->setParameters(params.flatten());
891
892                break;
893
894            case 'w':
895
896                a = checkSupportedParamScript(scene, numscene, cmd);
897                if (a > -1) {
898                    params.set(params.KEY_SCENE_MODE, (cmd + 1));
899                } else {
900                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
901                }
902                if ( hardwareActive )
903                    camera->setParameters(params.flatten());
904
905                break;
906
907            case 'B' :
908                if(strcmp(vnfstr, "true") == 0) {
909                    if (strcmp(cmd + 1, "1") == 0) {
910                        trySetVideoNoiseFilter(true);
911                    }
912                    else if (strcmp(cmd + 1, "0") == 0){
913                        trySetVideoNoiseFilter(false);
914                    }
915                } else {
916                    trySetVideoNoiseFilter(false);
917                    printf("\n VNF is not supported \n\n");
918                }
919
920                if ( hardwareActive ) {
921                    camera->setParameters(params.flatten());
922                }
923                break;
924
925
926            case 'C' :
927
928                if (strcmp(vstabstr, "true") == 0) {
929                    if (strcmp(cmd + 1, "1") == 0) {
930                        trySetVideoStabilization(true);
931                    } else if (strcmp(cmd + 1, "0") == 0) {
932                        trySetVideoStabilization(false);
933                    } else {
934                        printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
935                    }
936                } else {
937                    printf("\nNot supported parameter vstab from sensor %d\n\n", camera_index);
938                }
939
940                if ( hardwareActive ) {
941                    camera->setParameters(params.flatten());
942                }
943                break;
944
945            case 'D':
946                if ( hardwareActive )
947                    camera->stopRecording();
948                break;
949
950            case 'E':
951                if(hardwareActive)
952                    params.unflatten(camera->getParameters());
953                printSupportedParams();
954                break;
955
956            case 'i':
957                iso_mode = atoi(cmd + 1);
958                if (iso_mode < numisoMode) {
959                    params.set(KEY_ISO, isoMode[iso_mode]);
960                } else {
961                    printf("\nNot supported parameter %s for iso mode from sensor %d\n\n", cmd + 1, camera_index);
962                }
963
964                if ( hardwareActive )
965                    camera->setParameters(params.flatten());
966
967                break;
968
969            case 'h':
970                sharpness = atoi(cmd + 1);
971                params.set(KEY_SHARPNESS, sharpness);
972
973                if ( hardwareActive )
974                    camera->setParameters(params.flatten());
975
976                break;
977
978            case '@':
979                if ( hardwareActive ) {
980
981                    closeCamera();
982
983                    if ( 0 >= openCamera() ) {
984                        printf( "Reconnected to CameraService \n");
985                    }
986                }
987
988                break;
989
990            case 'c':
991                contrast = atoi(cmd + 1);
992                params.set(KEY_CONTRAST, contrast);
993
994                if ( hardwareActive ) {
995                    camera->setParameters(params.flatten());
996                }
997
998                break;
999
1000            case 'z':
1001                zoomtoggle = false;
1002
1003                if(strcmp(zoomstr, "true") == 0) {
1004                    for(i = 0; i < length_Zoom; i++) {
1005                        if( strcmp((cmd + 1), zoom[i].zoom_description) == 0) {
1006                            zoomIDX = i;
1007                            zoomtoggle = true;
1008                            break;
1009                        }
1010                    }
1011
1012                    if (!zoomtoggle) {
1013                        printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
1014                    }
1015
1016
1017                    params.set(CameraParameters::KEY_ZOOM, zoom[zoomIDX].idx);
1018
1019                    if ( hardwareActive ) {
1020                        camera->setParameters(params.flatten());
1021                    }
1022                }
1023
1024            case 'Z':
1025                smoothzoomtoggle = false;
1026
1027                if(strcmp(smoothzoomstr, "true") == 0) {
1028                    for(i = 0; i < length_Zoom; i++) {
1029                        if( strcmp((cmd + 1), zoom[i].zoom_description) == 0) {
1030                            zoomIDX = i;
1031                            smoothzoomtoggle = true;
1032                            break;
1033                        }
1034                    }
1035
1036                    if (!smoothzoomtoggle) {
1037                        printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
1038                    }
1039
1040                    if ( hardwareActive ) {
1041                        camera->sendCommand(CAMERA_CMD_START_SMOOTH_ZOOM, zoom[zoomIDX].idx, 0);
1042                    }
1043                }
1044                break;
1045
1046            case 'j':
1047
1048                a = checkSupportedParamScript(exposureMode, numExposureMode, cmd);
1049                if (a > -1) {
1050                    params.set(KEY_EXPOSURE, (cmd + 1));
1051                } else {
1052                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
1053                }
1054
1055                if ( hardwareActive )
1056                    camera->setParameters(params.flatten());
1057
1058                break;
1059
1060            case 'b':
1061                brightness = atoi(cmd + 1);
1062                params.set(KEY_BRIGHTNESS, brightness);
1063
1064                if ( hardwareActive )
1065                    camera->setParameters(params.flatten());
1066
1067                break;
1068
1069            case 's':
1070                saturation = atoi(cmd + 1);
1071                params.set(KEY_SATURATION, saturation);
1072
1073                if ( hardwareActive )
1074                    camera->setParameters(params.flatten());
1075
1076                break;
1077
1078            case 'e':
1079                a = checkSupportedParamScript(effectss, numEffects, cmd);
1080                if (a > -1) {
1081                    params.set(params.KEY_EFFECT, (cmd + 1));
1082                } else {
1083                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
1084                }
1085
1086                if ( hardwareActive )
1087                    camera->setParameters(params.flatten());
1088
1089                break;
1090
1091            case 'r':
1092                if (strcmp((cmd + 1), "MAX_FRAMERATE") == 0) {
1093                    frameRConst = 0;
1094                    for (int i=0; i<constCnt; i++) {
1095                        if (constFramerate[frameRConst] < constFramerate[i]) {
1096                            frameRConst = i;
1097                        }
1098                    }
1099                    if (0 < constFramerate[frameRConst]) {
1100                        params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fps_const_str[frameRConst]);
1101                        frameRateIDX = frameRConst;
1102                        printf("Framerate set: %d fps\n", constFramerate[frameRConst]);
1103                    } else {
1104                        printf("\nFramerate is 0!\n");
1105                    }
1106                } else {
1107                    a = checkSupportedParamScriptfpsConst(constFramerate, constCnt, cmd, &frameRConst);
1108                    if (a > -1) {
1109                        params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fps_const_str[frameRConst]);
1110                        frameRateIDX = frameRConst;
1111                    } else {
1112                        printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
1113                    }
1114                }
1115                if ( hardwareActive && previewRunning ) {
1116                    camera->stopPreview();
1117                    camera->setParameters(params.flatten());
1118                    camera->startPreview();
1119                } else if ( hardwareActive ) {
1120                    camera->setParameters(params.flatten());
1121                }
1122                break;
1123
1124            case 'R':
1125                a = checkSupportedParamScriptfpsRange(rangeDescription, rangeCnt, cmd, &frameRRange);
1126                if (a > -1) {
1127                    params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fps_range_str[frameRRange]);
1128                    fpsRangeIdx = frameRRange;
1129                } else {
1130                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
1131                }
1132                break;
1133
1134            case 'x':
1135                a = checkSupportedParamScript(antiband, numAntibanding, cmd);
1136                if (a > -1) {
1137                params.set(params.KEY_ANTIBANDING, (cmd + 1));
1138                } else {
1139                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
1140                }
1141
1142                if ( hardwareActive )
1143                    camera->setParameters(params.flatten());
1144                break;
1145
1146            case 'g':
1147                a = checkSupportedParamScript(focus, numfocus, cmd);
1148                if (a > -1) {
1149                    params.set(params.KEY_FOCUS_MODE, (cmd + 1));
1150                } else {
1151                    printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index);
1152                }
1153
1154                if ( hardwareActive )
1155                    camera->setParameters(params.flatten());
1156                break;
1157
1158            case 'G':
1159
1160                params.set(CameraParameters::KEY_FOCUS_AREAS, (cmd + 1));
1161
1162                if ( hardwareActive )
1163                    camera->setParameters(params.flatten());
1164
1165                break;
1166
1167            case 'y':
1168
1169                params.set(CameraParameters::KEY_METERING_AREAS, (cmd + 1));
1170
1171                if ( hardwareActive ) {
1172                    camera->setParameters(params.flatten());
1173                }
1174
1175                break;
1176
1177            case 'f':
1178                gettimeofday(&autofocus_start, 0);
1179
1180                if ( hardwareActive )
1181                    camera->autoFocus();
1182
1183                break;
1184
1185            case 'p':
1186            {
1187                 int msgType = 0;
1188                 const char *format = params.getPictureFormat();
1189
1190                if((NULL != format) && isRawPixelFormat(format)) {
1191                    createBufferOutputSource();
1192                    if (bufferSourceOutputThread.get()) {
1193                        bufferSourceOutputThread->setBuffer();
1194                    }
1195                } else if(strcmp(modevalues[capture_mode], "video-mode") == 0) {
1196                    msgType = CAMERA_MSG_COMPRESSED_IMAGE |
1197                              CAMERA_MSG_RAW_IMAGE;
1198#ifdef OMAP_ENHANCEMENT_BURST_CAPTURE
1199                    msgType |= CAMERA_MSG_RAW_BURST;
1200#endif
1201                } else {
1202                    msgType = CAMERA_MSG_POSTVIEW_FRAME |
1203                              CAMERA_MSG_RAW_IMAGE_NOTIFY |
1204                              CAMERA_MSG_COMPRESSED_IMAGE |
1205                              CAMERA_MSG_SHUTTER;
1206#ifdef OMAP_ENHANCEMENT_BURST_CAPTURE
1207                    msgType |= CAMERA_MSG_RAW_BURST;
1208#endif
1209                }
1210
1211                if((0 == strcmp(modevalues[capture_mode], "video-mode")) &&
1212                   (0 != strcmp(videosnapshotstr, "true"))) {
1213                    printf("Video Snapshot is not supported\n");
1214                } else {
1215                    gettimeofday(&picture_start, 0);
1216                    if ( hardwareActive ) {
1217                        ret = camera->setParameters(params.flatten());
1218                        if ( ret != NO_ERROR ) {
1219                            printf("Error returned while setting parameters");
1220                            break;
1221                        }
1222                        ret = camera->takePictureWithParameters(msgType, shotParams.flatten());
1223                        if ( ret != NO_ERROR ) {
1224                            printf("Error returned while taking a picture");
1225                            break;
1226                        }
1227                    }
1228                }
1229                break;
1230            }
1231
1232            case 'S':
1233            {
1234                createBufferOutputSource();
1235                if (bufferSourceOutputThread.get()) {
1236                    if (bufferSourceOutputThread->toggleStreamCapture(expBracketIdx)) {
1237                        expBracketIdx = BRACKETING_IDX_STREAM;
1238                        setSingleExpGainPreset(shotParams, expBracketIdx, 0, 0);
1239                        // Queue more frames initially
1240                        shotParams.set(ShotParameters::KEY_BURST, BRACKETING_STREAM_BUFFERS);
1241                    } else {
1242                        expBracketIdx = BRACKETING_IDX_DEFAULT;
1243                        setDefaultExpGainPreset(shotParams, expBracketIdx);
1244                    }
1245                }
1246                break;
1247            }
1248
1249            case 'P':
1250            {
1251                int msgType = CAMERA_MSG_COMPRESSED_IMAGE;
1252                gettimeofday(&picture_start, 0);
1253                if (!bufferSourceInput.get()) {
1254#ifdef ANDROID_API_JB_OR_LATER
1255                    bufferSourceInput = new BQ_BufferSourceInput(1234, camera);
1256#else
1257                    bufferSourceInput = new ST_BufferSourceInput(1234, camera);
1258#endif
1259                    bufferSourceInput->init();
1260                }
1261
1262                if (bufferSourceOutputThread.get() &&
1263                    bufferSourceOutputThread->hasBuffer())
1264                {
1265                    if (hardwareActive) camera->setParameters(params.flatten());
1266
1267                    if (bufferSourceInput.get()) {
1268                        buffer_info_t info = bufferSourceOutputThread->popBuffer();
1269                        bufferSourceInput->setInput(info, params.getPictureFormat());
1270                        if (hardwareActive) camera->reprocess(msgType, String8());
1271                    }
1272                }
1273                break;
1274            }
1275
1276            case 'd':
1277                dly = atoi(cmd + 1);
1278                sleep(dly);
1279                break;
1280
1281            case 'q':
1282                dump_mem_status();
1283                stopPreview();
1284
1285                if ( recordingMode ) {
1286                    stopRecording();
1287                    closeRecorder();
1288
1289                    recordingMode = false;
1290                }
1291                goto exit;
1292
1293            case '\n':
1294                printf("Iteration: %d \n", iteration);
1295                iteration++;
1296                break;
1297
1298            case '{':
1299                if ( atoi(cmd + 1) > 0 )
1300                    params.set(KEY_S3D2D_PREVIEW_MODE, "on");
1301                else
1302                    params.set(KEY_S3D2D_PREVIEW_MODE, "off");
1303                if ( hardwareActive )
1304                    camera->setParameters(params.flatten());
1305                break;
1306
1307            case 'M':
1308                params.set(KEY_MEASUREMENT, (cmd + 1));
1309                if ( hardwareActive )
1310                    camera->setParameters(params.flatten());
1311                break;
1312            case 'm':
1313            {
1314                params.set(KEY_METERING_MODE, (cmd + 1));
1315                if ( hardwareActive )
1316                {
1317                    camera->setParameters(params.flatten());
1318                }
1319                break;
1320            }
1321            case '<':
1322            {
1323                char coord_str[8];
1324                latitude += degree_by_step;
1325                if (latitude > 90.0)
1326                {
1327                    latitude -= 180.0;
1328                }
1329                snprintf(coord_str, 7, "%.7lf", latitude);
1330                params.set(params.KEY_GPS_LATITUDE, coord_str);
1331                if ( hardwareActive )
1332                {
1333                    camera->setParameters(params.flatten());
1334                }
1335                break;
1336            }
1337
1338            case '=':
1339            {
1340                char coord_str[8];
1341                longitude += degree_by_step;
1342                if (longitude > 180.0)
1343                {
1344                    longitude -= 360.0;
1345                }
1346                snprintf(coord_str, 7, "%.7lf", longitude);
1347                params.set(params.KEY_GPS_LONGITUDE, coord_str);
1348                if ( hardwareActive )
1349                {
1350                    camera->setParameters(params.flatten());
1351                }
1352                break;
1353            }
1354
1355            case '>':
1356            {
1357                char coord_str[8];
1358                altitude += 12345.67890123456789;
1359                if (altitude > 100000.0)
1360                {
1361                    altitude -= 200000.0;
1362                }
1363                snprintf(coord_str, 7, "%.7lf", altitude);
1364                params.set(params.KEY_GPS_ALTITUDE, coord_str);
1365                if ( hardwareActive )
1366                {
1367                    camera->setParameters(params.flatten());
1368                }
1369                break;
1370            }
1371
1372            case 'X':
1373            {
1374                char rem_str[384];
1375                printf("Deleting images from %s \n", images_dir_path);
1376                if (!sprintf(rem_str, "rm %s/*.jpg", images_dir_path)) {
1377                    printf("Sprintf Error");
1378                }
1379                if (system(rem_str)) {
1380                    printf("Images were not deleted\n");
1381                }
1382                break;
1383            }
1384
1385            case '_':
1386            {
1387                AutoConvergenceModeIDX = atoi(cmd + 1);
1388                if ( AutoConvergenceModeIDX < 0 || AutoConvergenceModeIDX > 4 )
1389                    AutoConvergenceModeIDX = 0;
1390                params.set(KEY_AUTOCONVERGENCE, autoconvergencemode[AutoConvergenceModeIDX]);
1391                if (AutoConvergenceModeIDX != 4) {
1392                    params.set(KEY_MANUAL_CONVERGENCE, manualConv);
1393                }
1394                if (hardwareActive) {
1395                    camera->setParameters(params.flatten());
1396                }
1397                break;
1398            }
1399
1400            case '^':
1401                if (strcmp(autoconvergencemode[AutoConvergenceModeIDX], "manual") == 0) {
1402                    manC = atoi(cmd + 1);
1403                    if(manC >= manualConvMin  &&  manC <= manualConvMax)
1404                    {
1405                        params.set(KEY_MANUAL_CONVERGENCE, manC);
1406                    }
1407                    else if(manC < manualConvMin)
1408                    {
1409                        printf(" wrong parameter for manual convergence \n");
1410                        params.set(KEY_MANUAL_CONVERGENCE, manualConvMin);
1411                    }
1412                    else
1413                    {
1414                        printf(" wrong parameter for manual convergence \n");
1415                        params.set(KEY_MANUAL_CONVERGENCE, manualConvMax);
1416                    }
1417                    if ( hardwareActive )
1418                        camera->setParameters(params.flatten());
1419                }
1420                break;
1421
1422
1423            case 'Q':
1424                if ( strcmp (exposureMode[exposure_mode], "manual") == 0) {
1425                    manE = atoi(cmd + 1);
1426                    if(manE >= manualExpMin  &&  manE <= manualExpMax)
1427                    {
1428                        params.set(KEY_MANUAL_EXPOSURE, manE);
1429                        params.set(KEY_MANUAL_EXPOSURE_RIGHT, manE);
1430                    }
1431                    else if(manE < manualExpMin)
1432                    {
1433                        printf(" wrong parameter for manual exposure \n");
1434                        params.set(KEY_MANUAL_EXPOSURE, manualExpMin);
1435                        params.set(KEY_MANUAL_EXPOSURE_RIGHT, manualExpMin);
1436                    }
1437                    else
1438                    {
1439                        printf(" wrong parameter for manual exposure \n");
1440                        params.set(KEY_MANUAL_EXPOSURE, manualExpMax);
1441                        params.set(KEY_MANUAL_EXPOSURE_RIGHT, manualExpMax);
1442                    }
1443
1444                    if ( hardwareActive )
1445                    camera->setParameters(params.flatten());
1446                }
1447                break;
1448
1449            case ',':
1450                if ( strcmp (exposureMode[exposure_mode], "manual") == 0) {
1451                    manG = atoi(cmd + 1);
1452                    if(manG >= manualGainMin  &&  manG <= manualGainMax)
1453                    {
1454                        params.set(KEY_MANUAL_GAIN_ISO, manG);
1455                        params.set(KEY_MANUAL_GAIN_ISO_RIGHT, manG);
1456                    }
1457                    else if(manG < manualGainMin)
1458                    {
1459                        printf(" wrong parameter for manual gain \n");
1460                        params.set(KEY_MANUAL_GAIN_ISO, manualGainMin);
1461                        params.set(KEY_MANUAL_GAIN_ISO_RIGHT, manualGainMin);
1462                    }
1463                    else
1464                    {
1465                        printf(" wrong parameter for manual gain \n");
1466                        params.set(KEY_MANUAL_GAIN_ISO, manualGainMax);
1467                        params.set(KEY_MANUAL_GAIN_ISO_RIGHT, manualGainMax);
1468                    }
1469
1470                    if ( hardwareActive )
1471                    camera->setParameters(params.flatten());
1472                }
1473                break;
1474
1475            default:
1476                printf("Unrecognized command!\n");
1477                break;
1478        }
1479
1480        cmd = strtok_r(NULL, DELIMITER, &ctx);
1481    }
1482
1483exit:
1484    if (stopScript == true)
1485      {
1486        return -1;
1487      }
1488    else
1489      {
1490        return 0;
1491      }
1492}
1493
1494
1495int checkSupportedParamScript(char **array, int size, char *param) {
1496    for (int i=0; i<size; i++) {
1497        if (strcmp((param + 1), array[i]) == 0) {
1498            return 0;
1499        }
1500    }
1501    return -1;
1502}
1503
1504int checkSupportedParamScriptLayout(char **array, int size, char *param, int *index) {
1505    for (int i=0; i<size; i++) {
1506        if (strcmp((param + 1), array[i]) == 0) {
1507            *index = i;
1508            return 0;
1509        }
1510    }
1511    return -1;
1512}
1513
1514int checkSupportedParamScriptResol(param_Array **array, int size, char *param, int *num) {
1515    for (int i=0; i<size; i++) {
1516        if (strcmp((param + 1), array[i]->name) == 0) {
1517            *num = i;
1518            return 0;
1519        }
1520    }
1521    return -1;
1522}
1523
1524int checkSupportedParamScriptResol(param_Array **array, int size,
1525                                   int width, int height, int *num) {
1526    for (int i=0; i<size; i++) {
1527        if ((width == array[i]->width) && (height == array[i]->height)) {
1528            *num = i;
1529            return 0;
1530        }
1531    }
1532    return -1;
1533}
1534
1535int checkSupportedParamScriptfpsConst(int *array, int size, char *param, int *num) {
1536    for (int i=0; i<size; i++) {
1537        if (atoi(param + 1) == array[i]) {
1538            *num = i;
1539            return 0;
1540        }
1541    }
1542    return -1;
1543}
1544
1545int checkSupportedParamScriptfpsRange(char **array, int size, char *param, int *num) {
1546    for (int i=0; i<size; i++) {
1547        if (strcmp(param + 1, array[i]) == 0) {
1548            *num = i;
1549            return 0;
1550        }
1551    }
1552    return -1;
1553}
1554
1555char * get_cycle_cmd(const char *aSrc) {
1556    unsigned ind = 0;
1557    char *cycle_cmd = new char[256];
1558
1559    while ((*aSrc != '+') && (*aSrc != '\0')) {
1560        cycle_cmd[ind++] = *aSrc++;
1561    }
1562    cycle_cmd[ind] = '\0';
1563
1564    return cycle_cmd;
1565}
1566
1567status_t dump_mem_status() {
1568  system(MEDIASERVER_DUMP);
1569  return system(MEMORY_DUMP);
1570}
1571
1572char *load_script(const char *config) {
1573    FILE *infile;
1574    size_t fileSize;
1575    char *script;
1576    size_t nRead = 0;
1577
1578    infile = fopen(config, "r");
1579
1580    strcpy(script_name,config);
1581
1582    printf("\n SCRIPT : <%s> is currently being executed \n", script_name);
1583
1584    printf("\n DIRECTORY CREATED FOR TEST RESULT IMAGES IN MMC CARD : %s \n", output_dir_path);
1585
1586    if( (NULL == infile)){
1587        printf("Error while opening script file %s!\n", config);
1588        return NULL;
1589    }
1590
1591    fseek(infile, 0, SEEK_END);
1592    fileSize = ftell(infile);
1593    fseek(infile, 0, SEEK_SET);
1594
1595    script = (char *) malloc(fileSize + 1);
1596
1597    if ( NULL == script ) {
1598        printf("Unable to allocate buffer for the script\n");
1599
1600        return NULL;
1601    }
1602
1603    memset(script, 0, fileSize + 1);
1604
1605    if ((nRead = fread(script, 1, fileSize, infile)) != fileSize) {
1606        printf("Error while reading script file!\n");
1607
1608        free(script);
1609        fclose(infile);
1610        return NULL;
1611    }
1612
1613    fclose(infile);
1614
1615    return script;
1616}
1617
1618int start_logging(int flags, int &pid) {
1619    int status = 0;
1620
1621    if (flags == 0) {
1622        pid = -1;
1623        return 0;
1624    }
1625
1626    pid = fork();
1627    if (pid == 0)
1628    {
1629        char *command_list[] = {"sh", "-c", NULL, NULL};
1630        char log_cmd[1024];
1631        // child process to run logging
1632
1633        // set group id of this process to itself
1634        // we will use this group id to kill the
1635        // application logging
1636        setpgid(getpid(), getpid());
1637
1638        /* Start logcat */
1639        if (flags & LOGGING_LOGCAT) {
1640            if (!sprintf(log_cmd,"logcat > %s/log.txt &", output_dir_path)) {
1641                printf(" Sprintf Error");
1642            }
1643        }
1644
1645        /* Start Syslink Trace */
1646        if (flags & LOGGING_SYSLINK) {
1647            if (!sprintf(log_cmd,"%s /system/bin/syslink_trace_daemon.out -l %s/syslink_trace.txt -f &", log_cmd, output_dir_path)) {
1648                printf(" Sprintf Error");
1649            }
1650        }
1651
1652        command_list[2] = (char *)log_cmd;
1653        execvp("/system/bin/sh", command_list);
1654    } if(pid < 0)
1655    {
1656        printf("failed to fork logcat\n");
1657        return -1;
1658    }
1659
1660    //wait for logging to start
1661    if(waitpid(pid, &status, 0) != pid)
1662    {
1663        printf("waitpid failed in log fork\n");
1664        return -1;
1665    }else
1666        printf("logging started... status=%d\n", status);
1667
1668    return 0;
1669}
1670
1671int stop_logging(int flags, int &pid)
1672{
1673    if (pid > 0) {
1674        if (killpg(pid, SIGKILL)) {
1675            printf("Exit command failed");
1676            return -1;
1677        } else {
1678            printf("\nlogging for script %s is complete\n", script_name);
1679
1680            if (flags & LOGGING_LOGCAT) {
1681                printf("   logcat saved @ location: %s\n", output_dir_path);
1682            }
1683
1684            if (flags & LOGGING_SYSLINK) {
1685                printf("   syslink_trace is saved @ location: %s\n\n", output_dir_path);
1686            }
1687        }
1688    }
1689    return 0;
1690}
1691
1692int execute_error_script(char *script) {
1693    char *cmd, *ctx;
1694    char id;
1695    status_t stat = NO_ERROR;
1696
1697    LOG_FUNCTION_NAME;
1698
1699    cmd = strtok_r((char *) script, DELIMITER, &ctx);
1700
1701    while ( NULL != cmd ) {
1702        id = cmd[0];
1703
1704        switch (id) {
1705
1706            case '0': {
1707                bufferStarvationTest = 1;
1708                params.set(KEY_BUFF_STARV, bufferStarvationTest); //enable buffer starvation
1709
1710                if ( !recordingMode ) {
1711
1712                    recordingMode = true;
1713
1714                    if ( startPreview() < 0 ) {
1715                        printf("Error while starting preview\n");
1716
1717                        return -1;
1718                    }
1719
1720                    if ( openRecorder() < 0 ) {
1721                        printf("Error while openning video recorder\n");
1722
1723                        return -1;
1724                    }
1725
1726                    if ( configureRecorder() < 0 ) {
1727                        printf("Error while configuring video recorder\n");
1728
1729                        return -1;
1730                    }
1731
1732                    if ( startRecording() < 0 ) {
1733                        printf("Error while starting video recording\n");
1734
1735                        return -1;
1736                    }
1737
1738                }
1739
1740                usleep(1000000);//1s
1741
1742                stopPreview();
1743
1744                if ( recordingMode ) {
1745                    stopRecording();
1746                    closeRecorder();
1747
1748                    recordingMode = false;
1749                }
1750
1751                break;
1752            }
1753
1754            case '1': {
1755                int* tMemoryEater = new int[999999999];
1756
1757                if (!tMemoryEater) {
1758                    printf("Not enough memory\n");
1759                    return -1;
1760                } else {
1761                    delete tMemoryEater;
1762                }
1763
1764                break;
1765            }
1766
1767            case '2': {
1768                //camera = Camera::connect();
1769
1770                if ( NULL == camera.get() ) {
1771                    printf("Unable to connect to CameraService\n");
1772                    return -1;
1773                }
1774
1775                break;
1776            }
1777
1778            case '3': {
1779                int err = 0;
1780
1781                err = open("/dev/video5", O_RDWR);
1782
1783                if (err < 0) {
1784                    printf("Could not open the camera device5: %d\n",  err );
1785                    return err;
1786                }
1787
1788                if ( startPreview() < 0 ) {
1789                    printf("Error while starting preview\n");
1790                    return -1;
1791                }
1792
1793                usleep(1000000);//1s
1794
1795                stopPreview();
1796
1797                close(err);
1798                break;
1799            }
1800
1801            case '4': {
1802
1803                if ( hardwareActive ) {
1804
1805                    params.setPictureFormat("invalid-format");
1806                    params.setPreviewFormat("invalid-format");
1807
1808                    stat = camera->setParameters(params.flatten());
1809
1810                    if ( NO_ERROR != stat ) {
1811                        printf("Test passed!\n");
1812                    } else {
1813                        printf("Test failed!\n");
1814                    }
1815
1816                    initDefaults();
1817                }
1818
1819                break;
1820            }
1821
1822            case '5': {
1823
1824                if ( hardwareActive ) {
1825
1826                    params.setPictureSize(-1, -1);
1827                    params.setPreviewSize(-1, -1);
1828
1829                    stat = camera->setParameters(params.flatten());
1830
1831                    if ( NO_ERROR != stat ) {
1832                        printf("Test passed!\n");
1833                    } else {
1834                        printf("Test failed!\n");
1835                    }
1836
1837                    initDefaults();
1838                }
1839
1840                break;
1841            }
1842
1843            case '6': {
1844
1845                if ( hardwareActive ) {
1846
1847                    params.setPreviewFrameRate(-1);
1848
1849                    stat = camera->setParameters(params.flatten());
1850
1851                    if ( NO_ERROR != stat ) {
1852                        printf("Test passed!\n");
1853                    } else {
1854                        printf("Test failed!\n");
1855                    }
1856
1857                    initDefaults();
1858                }
1859
1860
1861                break;
1862            }
1863
1864            case 'q': {
1865                goto exit;
1866
1867                break;
1868            }
1869
1870            default: {
1871                printf("Unrecognized command!\n");
1872
1873                break;
1874            }
1875        }
1876
1877        cmd = strtok_r(NULL, DELIMITER, &ctx);
1878    }
1879
1880exit:
1881
1882    return 0;
1883}
1884
1885
1886
1887