| #include <stdlib.h> |
| #include <unistd.h> |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| #include <fcntl.h> |
| #include <time.h> |
| #include <semaphore.h> |
| #include <pthread.h> |
| |
| #include <camera/Camera.h> |
| #include <camera/ICamera.h> |
| #include <media/mediarecorder.h> |
| |
| #include <binder/IPCThreadState.h> |
| #include <binder/ProcessState.h> |
| #include <binder/IServiceManager.h> |
| #include <cutils/properties.h> |
| #include <camera/CameraParameters.h> |
| #include <camera/ShotParameters.h> |
| |
| #include <sys/wait.h> |
| |
| #include "camera_test.h" |
| #include "camera_test_surfacetexture.h" |
| #ifdef ANDROID_API_JB_OR_LATER |
| #include "camera_test_bufferqueue.h" |
| #endif |
| |
| using namespace android; |
| |
| extern bool stopScript; |
| extern bool hardwareActive; |
| extern sp<Camera> camera; |
| extern sp<BufferSourceThread> bufferSourceOutputThread; |
| extern sp<BufferSourceInput> bufferSourceInput; |
| extern CameraParameters params; |
| extern ShotParameters shotParams; |
| extern bool shotConfigFlush; |
| extern bool streamCapture; |
| extern bool recordingMode; |
| extern int camera_index; |
| extern int rotation; |
| extern int previewRotation; |
| extern const param_Array captureSize[]; |
| extern const param_Array VcaptureSize[]; |
| extern const outformat outputFormat[]; |
| extern const video_Codecs videoCodecs[]; |
| extern const audio_Codecs audioCodecs[]; |
| extern const V_bitRate VbitRate[]; |
| extern const Zoom zoom []; |
| extern int previewSizeIDX; |
| extern bool reSizePreview; |
| extern bool previewRunning; |
| extern int captureSizeIDX; |
| extern float compensation; |
| extern int videoCodecIDX; |
| extern int outputFormatIDX; |
| extern int audioCodecIDX; |
| extern int VcaptureSizeIDX; |
| extern int VbitRateIDX; |
| extern int thumbSizeIDX; |
| extern int thumbQuality; |
| extern int jpegQuality; |
| extern int dump_preview; |
| extern int ippIDX_old; |
| extern const char *capture[]; |
| extern int capture_mode; |
| extern int ippIDX; |
| extern const char *ipp_mode[]; |
| extern int tempBracketRange; |
| extern int iso_mode; |
| extern int sharpness; |
| extern int contrast; |
| extern int zoomIDX; |
| extern int brightness; |
| extern int saturation; |
| extern int fpsRangeIdx; |
| extern int numAntibanding; |
| extern int numEffects; |
| extern int numawb; |
| extern int numExposureMode; |
| extern int numscene; |
| extern int numisoMode; |
| extern int numflash; |
| extern int numcaptureSize; |
| extern int numVcaptureSize; |
| extern int numpreviewSize; |
| extern int numthumbnailSize; |
| extern int numfocus; |
| extern int numpreviewFormat; |
| extern int numpictureFormat; |
| extern int nummodevalues; |
| extern int numLay; |
| extern int numCLay; |
| extern int constCnt; |
| extern int rangeCnt; |
| extern int * constFramerate; |
| extern int frameRateIDX; |
| extern int fpsRangeIdx; |
| extern int stereoLayoutIDX; |
| extern int stereoCapLayoutIDX; |
| extern int expBracketIdx; |
| int resol_index = 0; |
| int a = 0; |
| extern char * vstabstr; |
| extern char * vnfstr; |
| extern char * zoomstr; |
| extern char * smoothzoomstr; |
| extern char * videosnapshotstr; |
| extern char ** antiband; |
| extern char **effectss; |
| extern bool firstTime; |
| extern char **exposureMode; |
| extern char **awb; |
| extern char **scene; |
| extern char ** isoMode; |
| extern char ** modevalues; |
| extern char **focus; |
| extern char **flash; |
| extern char **previewFormatArray; |
| extern char **pictureFormatArray; |
| extern char ** fps_const_str; |
| extern char ** fps_range_str; |
| extern char ** rangeDescription; |
| extern param_Array ** capture_Array; |
| extern param_Array ** Vcapture_Array; |
| extern param_Array ** preview_Array; |
| extern param_Array ** thumbnail_Array; |
| extern timeval autofocus_start, picture_start; |
| extern const char *cameras[]; |
| extern double latitude; |
| extern double degree_by_step; |
| extern double longitude; |
| extern double altitude; |
| extern char output_dir_path[]; |
| extern char images_dir_path[]; |
| extern int AutoConvergenceModeIDX; |
| extern const char *autoconvergencemode[]; |
| extern int numCamera; |
| extern bool stereoMode; |
| extern char script_name[]; |
| extern int bufferStarvationTest; |
| extern size_t length_previewSize; |
| extern size_t length_thumbnailSize; |
| extern size_t lenght_Vcapture_size; |
| extern size_t length_outformat; |
| extern size_t length_capture_Size; |
| extern size_t length_video_Codecs; |
| extern size_t length_audio_Codecs; |
| extern size_t length_V_bitRate; |
| extern size_t length_Zoom; |
| extern size_t length_fps_ranges; |
| extern size_t length_fpsConst_Ranges; |
| extern size_t length_fpsConst_RangesSec; |
| extern int platformID; |
| extern char **stereoLayout; |
| extern char **stereoCapLayout; |
| extern void getSizeParametersFromCapabilities(); |
| extern int exposure_mode; |
| int manE = 0; |
| extern int manualExp ; |
| extern int manualExpMin ; |
| extern int manualExpMax ; |
| int manG = 0; |
| extern int manualGain ; |
| extern int manualGainMin ; |
| extern int manualGainMax ; |
| int manC = 0; |
| extern int manualConv ; |
| extern int manualConvMin ; |
| extern int manualConvMax ; |
| extern bool faceDetectToggle; |
| extern unsigned int burstCount; |
| |
| /** Buffer source reset */ |
| extern bool bufferSourceInputReset; |
| extern bool bufferSourceOutputReset; |
| |
| void trim_script_cmd(char *cmd) { |
| char *nl, *cr; |
| |
| // first remove all carriage return symbols |
| while ( NULL != (cr = strchr(cmd, '\r'))) { |
| for (char *c = cr; '\0' != *c; c++) { |
| *c = *(c+1); |
| } |
| } |
| |
| // then remove all single line feed symbols |
| while ( NULL != (nl = strchr(cmd, '\n'))) { |
| if (*nl == *(nl+1)) { |
| // two or more concatenated newlines: |
| // end of script found |
| break; |
| } |
| // clip the newline |
| for (char *c = nl; '\0' != *c; c++) { |
| *c = *(c+1); |
| } |
| } |
| } |
| |
| int execute_functional_script(char *script) { |
| char *cmd, *ctx, *cycle_cmd, *temp_cmd; |
| char id; |
| unsigned int i; |
| int dly; |
| int cycleCounter = 1; |
| int tLen = 0; |
| unsigned int iteration = 0; |
| bool zoomtoggle = false; |
| bool smoothzoomtoggle = false; |
| status_t ret = NO_ERROR; |
| //int frameR = 20; |
| int frameRConst = 0; |
| int frameRRange = 0; |
| struct CameraInfo cameraInfo; |
| bool queueEmpty = true; |
| |
| LOG_FUNCTION_NAME; |
| |
| dump_mem_status(); |
| |
| cmd = strtok_r((char *) script, DELIMITER, &ctx); |
| |
| while ( NULL != cmd && (stopScript == false)) { |
| trim_script_cmd(cmd); |
| id = cmd[0]; |
| printf("Full Command: %s \n", cmd); |
| printf("Command: %c \n", cmd[0]); |
| |
| switch (id) { |
| |
| // Case for Suspend-Resume Feature |
| case '!': { |
| // STEP 1: Mount Debugfs |
| system("mkdir /debug"); |
| system("mount -t debugfs debugfs /debug"); |
| |
| // STEP 2: Set up wake up Timer - wake up happens after 5 seconds |
| system("echo 10 > /debug/pm_debug/wakeup_timer_seconds"); |
| |
| // STEP 3: Make system ready for Suspend |
| system("echo camerahal_test > /sys/power/wake_unlock"); |
| // Release wake lock held by test app |
| printf(" Wake lock released "); |
| system("cat /sys/power/wake_lock"); |
| system("sendevent /dev/input/event0 1 60 1"); |
| system("sendevent /dev/input/event0 1 60 0"); |
| // Simulate F2 key press to make display OFF |
| printf(" F2 event simulation complete "); |
| |
| //STEP 4: Wait for system Resume and then simuate F1 key |
| sleep(50);//50s // This delay is not related to suspend resume timer |
| printf(" After 30 seconds of sleep"); |
| system("sendevent /dev/input/event0 1 59 0"); |
| system("sendevent /dev/input/event0 1 59 1"); |
| // Simulate F1 key press to make display ON |
| system("echo camerahal_test > /sys/power/wake_lock"); |
| // Acquire wake lock for test app |
| |
| break; |
| } |
| |
| case '[': |
| if ( hardwareActive ) |
| { |
| |
| camera->setParameters(params.flatten()); |
| |
| printf("starting camera preview.."); |
| status_t ret = camera->startPreview(); |
| if(ret !=NO_ERROR) |
| { |
| printf("startPreview failed %d..", ret); |
| } |
| } |
| break; |
| case '+': { |
| cycleCounter = atoi(cmd + 1); |
| cycle_cmd = get_cycle_cmd(ctx); |
| tLen = strlen(cycle_cmd); |
| temp_cmd = new char[tLen+1]; |
| |
| for (int ind = 0; ind < cycleCounter; ind++) { |
| strcpy(temp_cmd, cycle_cmd); |
| if ( execute_functional_script(temp_cmd) != 0 ) |
| return -1; |
| temp_cmd[0] = '\0'; |
| |
| //patch for image capture |
| //[ |
| if (ind < cycleCounter - 1) { |
| if (hardwareActive == false) { |
| if ( openCamera() < 0 ) { |
| printf("Camera initialization failed\n"); |
| |
| return -1; |
| } |
| |
| initDefaults(); |
| } |
| } |
| |
| //] |
| } |
| |
| ctx += tLen + 1; |
| |
| if (temp_cmd) { |
| delete temp_cmd; |
| temp_cmd = NULL; |
| } |
| |
| if (cycle_cmd) { |
| delete cycle_cmd; |
| cycle_cmd = NULL; |
| } |
| |
| break; |
| } |
| |
| case '0': |
| { |
| initDefaults(); |
| break; |
| } |
| |
| case '1': |
| |
| if ( startPreview() < 0 ) { |
| printf("Error while starting preview\n"); |
| |
| return -1; |
| } |
| |
| break; |
| |
| case '2': |
| if ( recordingMode ) { |
| stopRecording(); |
| stopPreview(); |
| closeRecorder(); |
| camera->disconnect(); |
| camera.clear(); |
| camera = Camera::connect(camera_index); |
| if ( NULL == camera.get() ) { |
| sleep(1); |
| camera = Camera::connect(camera_index); |
| if ( NULL == camera.get() ) { |
| return -1; |
| } |
| } |
| camera->setListener(new CameraHandler()); |
| camera->setParameters(params.flatten()); |
| recordingMode = false; |
| } else { |
| stopPreview(); |
| } |
| |
| break; |
| |
| case '3': |
| rotation = atoi(cmd + 1); |
| params.set(CameraParameters::KEY_ROTATION, rotation); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'V': |
| previewRotation = atoi(cmd + 1); |
| params.set(KEY_SENSOR_ORIENTATION, previewRotation); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case '4': |
| printf("Setting resolution..."); |
| |
| a = checkSupportedParamScriptResol(preview_Array, numpreviewSize, cmd, &resol_index); |
| if (a > -1) { |
| params.setPreviewSize(preview_Array[resol_index]->width, preview_Array[resol_index]->height); |
| previewSizeIDX = resol_index; |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| if ( hardwareActive && previewRunning ) { |
| camera->stopPreview(); |
| camera->setParameters(params.flatten()); |
| camera->startPreview(); |
| } else if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| |
| case '5': |
| if( strcmp((cmd + 1), "MAX_CAPTURE_SIZE") == 0) { |
| resol_index = 0; |
| for (int i=0; i<numcaptureSize; i++) { |
| if ((capture_Array[resol_index]->width * capture_Array[resol_index]->height) < (capture_Array[i]->width * capture_Array[i]->height)) { |
| resol_index = i; |
| } |
| } |
| if ((0 < capture_Array[resol_index]->width) && (0 < capture_Array[resol_index]->height)) { |
| params.setPictureSize(capture_Array[resol_index]->width, capture_Array[resol_index]->height); |
| captureSizeIDX = resol_index; |
| printf("Capture Size set: %dx%d\n", capture_Array[resol_index]->width, capture_Array[resol_index]->height); |
| } else { |
| printf("\nCapture size is 0!\n"); |
| } |
| } else { |
| a = checkSupportedParamScriptResol(capture_Array, numcaptureSize, cmd, &resol_index); |
| if (camera_index != 2) { |
| if (a > -1) { |
| params.setPictureSize(capture_Array[resol_index]->width, capture_Array[resol_index]->height); |
| captureSizeIDX = resol_index; |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| } else { |
| int widthC, heightC; |
| char *resC = NULL; |
| resC = strtok(cmd + 1, "x"); |
| widthC = atoi(resC); |
| resC = strtok(NULL, "x"); |
| heightC = atoi(resC); |
| params.setPictureSize(widthC,heightC); |
| a = checkSupportedParamScriptResol(capture_Array, numcaptureSize, |
| widthC, heightC, &resol_index); |
| if (a > -1) captureSizeIDX = resol_index; |
| } |
| |
| if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| } |
| |
| requestBufferSourceReset(); |
| |
| break; |
| |
| case '6': |
| |
| if ( !recordingMode ) { |
| |
| recordingMode = true; |
| |
| if ( startPreview() < 0 ) { |
| printf("Error while starting preview\n"); |
| |
| return -1; |
| } |
| |
| if ( openRecorder() < 0 ) { |
| printf("Error while openning video recorder\n"); |
| |
| return -1; |
| } |
| |
| if ( configureRecorder() < 0 ) { |
| printf("Error while configuring video recorder\n"); |
| |
| return -1; |
| } |
| |
| if ( startRecording() < 0 ) { |
| printf("Error while starting video recording\n"); |
| |
| return -1; |
| } |
| |
| } |
| |
| break; |
| |
| case '7': |
| compensation = atof(cmd + 1); |
| params.set(KEY_COMPENSATION, (int) (compensation * 10)); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case '8': |
| |
| a = checkSupportedParamScript(awb, numawb, cmd); |
| if (a > -1) { |
| params.set(params.KEY_WHITE_BALANCE, (cmd + 1)); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case '9': |
| for(i = 0; i < length_video_Codecs; i++) |
| { |
| if( strcmp((cmd + 1), videoCodecs[i].desc) == 0) |
| { |
| videoCodecIDX = i; |
| printf("Video Codec Selected: %s\n", |
| videoCodecs[i].desc); |
| break; |
| } |
| } |
| break; |
| |
| case 'v': |
| for(i = 0; i < length_outformat; i++) |
| |
| { |
| if( strcmp((cmd + 1), outputFormat[i].desc) == 0) |
| { |
| outputFormatIDX = i; |
| printf("Video Codec Selected: %s\n", |
| videoCodecs[i].desc); |
| break; |
| } |
| } |
| break; |
| |
| case '~': |
| |
| a = checkSupportedParamScript(previewFormatArray, numpreviewFormat, cmd); |
| if (a > -1) { |
| params.setPreviewFormat(cmd + 1); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case '$': |
| |
| a = checkSupportedParamScript(pictureFormatArray, numpictureFormat, cmd); |
| if (a > -1) { |
| params.setPictureFormat(cmd + 1); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| queueEmpty = true; |
| if ( bufferSourceOutputThread.get() ) { |
| if ( 0 < bufferSourceOutputThread->hasBuffer() ) { |
| queueEmpty = false; |
| } |
| } |
| if ( hardwareActive && queueEmpty ) { |
| camera->setParameters(params.flatten()); |
| } |
| |
| break; |
| case '-': |
| for(i = 0; i < length_audio_Codecs; i++) |
| { |
| if( strcmp((cmd + 1), audioCodecs[i].desc) == 0) |
| { |
| audioCodecIDX = i; |
| printf("Selected Audio: %s\n", audioCodecs[i].desc); |
| break; |
| } |
| } |
| break; |
| |
| case 'A': |
| camera_index=atoi(cmd+1); |
| camera_index %= numCamera; |
| |
| printf("%s selected.\n", cameras[camera_index]); |
| firstTime = true; |
| |
| if ( hardwareActive ) { |
| stopPreview(); |
| closeCamera(); |
| openCamera(); |
| } else { |
| closeCamera(); |
| openCamera(); |
| } |
| break; |
| |
| case 'a': |
| char * temp_str; |
| |
| temp_str = strtok(cmd+1,"!"); |
| printf("Latitude %s \n",temp_str); |
| params.set(params.KEY_GPS_LATITUDE, temp_str); |
| temp_str=strtok(NULL,"!"); |
| printf("Longitude %s \n",temp_str); |
| params.set(params.KEY_GPS_LONGITUDE, temp_str); |
| temp_str=strtok(NULL,"!"); |
| printf("Altitude %s \n",temp_str); |
| params.set(params.KEY_GPS_ALTITUDE, temp_str); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'l': |
| a = checkSupportedParamScriptResol(Vcapture_Array, numVcaptureSize, cmd, &resol_index); |
| if (a > -1) { |
| VcaptureSizeIDX = resol_index; |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| break; |
| |
| case 'L': |
| if(stereoMode) |
| { |
| a = checkSupportedParamScriptLayout(stereoLayout, numLay, cmd, &stereoLayoutIDX); |
| if (a > -1) { |
| params.set(KEY_S3D_PRV_FRAME_LAYOUT, cmd + 1); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| |
| getSizeParametersFromCapabilities(); |
| if (hardwareActive && previewRunning) { |
| stopPreview(); |
| camera->setParameters(params.flatten()); |
| startPreview(); |
| } else if (hardwareActive) { |
| camera->setParameters(params.flatten()); |
| } |
| } |
| break; |
| |
| |
| case '.': |
| if(stereoMode) |
| { |
| a = checkSupportedParamScriptLayout(stereoCapLayout, numCLay, cmd, &stereoCapLayoutIDX); |
| if (a > -1) { |
| params.set(KEY_S3D_CAP_FRAME_LAYOUT_VALUES, cmd + 1); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| |
| getSizeParametersFromCapabilities(); |
| if (hardwareActive && previewRunning) { |
| stopPreview(); |
| camera->setParameters(params.flatten()); |
| startPreview(); |
| } else if (hardwareActive) { |
| camera->setParameters(params.flatten()); |
| } |
| } |
| break; |
| |
| case ']': |
| for(i = 0; i < length_V_bitRate; i++) |
| { |
| if( strcmp((cmd + 1), VbitRate[i].desc) == 0) |
| { |
| VbitRateIDX = i; |
| printf("Video Bit Rate: %s\n", VbitRate[i].desc); |
| break; |
| } |
| } |
| break; |
| case ':': |
| |
| a = checkSupportedParamScriptResol(thumbnail_Array, numthumbnailSize, cmd, &resol_index); |
| if (a > -1) { |
| params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, thumbnail_Array[resol_index]->width); |
| params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT,thumbnail_Array[resol_index]->height); |
| thumbSizeIDX = resol_index; |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| |
| |
| break; |
| |
| case '\'': |
| thumbQuality = atoi(cmd + 1); |
| |
| params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, thumbQuality); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case '*': |
| if ( hardwareActive ) |
| camera->startRecording(); |
| break; |
| |
| case 't': |
| params.setPreviewFormat((cmd + 1)); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'o': |
| jpegQuality = atoi(cmd + 1); |
| params.set(CameraParameters::KEY_JPEG_QUALITY, jpegQuality); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| |
| case '&': |
| printf("Enabling Preview Callback"); |
| dump_preview = 1; |
| camera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_ENABLE_MASK); |
| break; |
| |
| |
| case 'k': |
| ippIDX_old = atoi(cmd + 1); |
| params.set(KEY_IPP, atoi(cmd + 1)); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| requestBufferSourceReset(); |
| |
| break; |
| |
| case 'K': |
| params.set(KEY_GBCE, (cmd+1)); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'F': |
| if ( hardwareActive ) { |
| camera->sendCommand(CAMERA_CMD_START_FACE_DETECTION, 0, 0); |
| faceDetectToggle = true; |
| } |
| |
| break; |
| |
| case 'I': |
| params.set(KEY_AF_TIMEOUT, (cmd + 1)); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'T': |
| |
| if ( hardwareActive ) { |
| camera->sendCommand(CAMERA_CMD_STOP_FACE_DETECTION, 0, 0); |
| faceDetectToggle = false; |
| } |
| |
| break; |
| |
| case 'O': |
| params.set(KEY_GLBCE, (cmd+1)); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'u': |
| // HQ should always be in ldc-nsf |
| // if not HQ, then return the ipp to its previous state |
| if ( !strcmp((cmd + 1), "high-quality") ) { |
| ippIDX_old = ippIDX; |
| ippIDX = 3; |
| params.set(KEY_IPP, ipp_mode[ippIDX]); |
| params.set(CameraParameters::KEY_RECORDING_HINT, CameraParameters::FALSE); |
| previewRotation = 0; |
| params.set(KEY_SENSOR_ORIENTATION, previewRotation); |
| } else if ( !strcmp((cmd + 1), "video-mode") ) { |
| params.set(CameraParameters::KEY_RECORDING_HINT, CameraParameters::TRUE); |
| camera->getCameraInfo(camera_index, &cameraInfo); |
| previewRotation = ((360-cameraInfo.orientation)%360); |
| if (previewRotation >= 0 || previewRotation <=360) { |
| params.set(KEY_SENSOR_ORIENTATION, previewRotation); |
| } |
| printf("previewRotation: %d\n", previewRotation); |
| } else { |
| ippIDX = ippIDX_old; |
| params.set(CameraParameters::KEY_RECORDING_HINT, CameraParameters::FALSE); |
| previewRotation = 0; |
| params.set(KEY_SENSOR_ORIENTATION, previewRotation); |
| } |
| a = checkSupportedParamScript(modevalues, nummodevalues, cmd); |
| if (a > -1) { |
| params.set(KEY_MODE, (cmd + 1)); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| if ( hardwareActive ) { |
| if (previewRunning) { |
| stopPreview(); |
| } |
| camera->setParameters(params.flatten()); |
| // Get parameters from capabilities for the new capture mode |
| params = camera->getParameters(); |
| getSizeParametersFromCapabilities(); |
| getParametersFromCapabilities(); |
| // Set framerate 30fps and 12MP capture resolution if available for the new capture mode. |
| // If not available set framerate and capture mode under index 0 from fps_const_str and capture_Array. |
| frameRateIDX = getDefaultParameter("30000,30000", constCnt, fps_const_str); |
| captureSizeIDX = getDefaultParameterResol("12MP", numcaptureSize, capture_Array); |
| params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fps_const_str[frameRateIDX]); |
| params.setPictureSize(capture_Array[captureSizeIDX]->width, capture_Array[captureSizeIDX]->height); |
| camera->setParameters(params.flatten()); |
| } |
| |
| requestBufferSourceReset(); |
| |
| break; |
| |
| case 'U': |
| |
| params.set(KEY_TEMP_BRACKETING, (cmd + 1)); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'H': |
| |
| setDefaultExpGainPreset(shotParams, atoi(cmd + 1)); |
| break; |
| |
| |
| case 'n': |
| |
| switch (*(cmd + 1)) { |
| case 0: |
| shotConfigFlush = false; |
| break; |
| case 1: |
| shotConfigFlush = true; |
| break; |
| default: |
| printf ("Mangling flush shot config command: \"%s\"\n", (cmd + 1)); |
| break; |
| } |
| |
| updateShotConfigFlushParam(); |
| |
| break; |
| |
| case '?': |
| |
| setExpGainPreset(shotParams, cmd + 1, true, PARAM_EXP_BRACKET_PARAM_NONE, shotConfigFlush); |
| |
| break; |
| |
| case 'W': |
| |
| tempBracketRange = atoi(cmd + 1); |
| tempBracketRange %= TEMP_BRACKETING_MAX_RANGE; |
| if ( 0 == tempBracketRange ) { |
| tempBracketRange = 1; |
| } |
| |
| params.set(KEY_TEMP_BRACKETING_NEG, tempBracketRange); |
| params.set(KEY_TEMP_BRACKETING_POS, tempBracketRange); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case '#': |
| |
| params.set(KEY_TI_BURST, atoi(cmd + 1)); |
| burstCount = atoi(cmd + 1); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'J': |
| |
| a = checkSupportedParamScript(flash, numflash, cmd); |
| if (a > -1) { |
| params.set(CameraParameters::KEY_FLASH_MODE, (cmd + 1)); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'w': |
| |
| a = checkSupportedParamScript(scene, numscene, cmd); |
| if (a > -1) { |
| params.set(params.KEY_SCENE_MODE, (cmd + 1)); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'B' : |
| if(strcmp(vnfstr, "true") == 0) { |
| if (strcmp(cmd + 1, "1") == 0) { |
| trySetVideoNoiseFilter(true); |
| } |
| else if (strcmp(cmd + 1, "0") == 0){ |
| trySetVideoNoiseFilter(false); |
| } |
| } else { |
| trySetVideoNoiseFilter(false); |
| printf("\n VNF is not supported \n\n"); |
| } |
| |
| if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| |
| |
| case 'C' : |
| |
| if (strcmp(vstabstr, "true") == 0) { |
| if (strcmp(cmd + 1, "1") == 0) { |
| trySetVideoStabilization(true); |
| } else if (strcmp(cmd + 1, "0") == 0) { |
| trySetVideoStabilization(false); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| } else { |
| printf("\nNot supported parameter vstab from sensor %d\n\n", camera_index); |
| } |
| |
| if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| |
| case 'D': |
| if ( hardwareActive ) |
| camera->stopRecording(); |
| break; |
| |
| case 'E': |
| if(hardwareActive) |
| params.unflatten(camera->getParameters()); |
| printSupportedParams(); |
| break; |
| |
| case 'i': |
| iso_mode = atoi(cmd + 1); |
| if (iso_mode < numisoMode) { |
| params.set(KEY_ISO, isoMode[iso_mode]); |
| } else { |
| printf("\nNot supported parameter %s for iso mode from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'h': |
| sharpness = atoi(cmd + 1); |
| params.set(KEY_SHARPNESS, sharpness); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case '@': |
| if ( hardwareActive ) { |
| |
| closeCamera(); |
| |
| if ( 0 >= openCamera() ) { |
| printf( "Reconnected to CameraService \n"); |
| } |
| } |
| |
| break; |
| |
| case 'c': |
| contrast = atoi(cmd + 1); |
| params.set(KEY_CONTRAST, contrast); |
| |
| if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| |
| break; |
| |
| case 'z': |
| zoomtoggle = false; |
| |
| if(strcmp(zoomstr, "true") == 0) { |
| for(i = 0; i < length_Zoom; i++) { |
| if( strcmp((cmd + 1), zoom[i].zoom_description) == 0) { |
| zoomIDX = i; |
| zoomtoggle = true; |
| break; |
| } |
| } |
| |
| if (!zoomtoggle) { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| |
| params.set(CameraParameters::KEY_ZOOM, zoom[zoomIDX].idx); |
| |
| if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| } |
| |
| case 'Z': |
| smoothzoomtoggle = false; |
| |
| if(strcmp(smoothzoomstr, "true") == 0) { |
| for(i = 0; i < length_Zoom; i++) { |
| if( strcmp((cmd + 1), zoom[i].zoom_description) == 0) { |
| zoomIDX = i; |
| smoothzoomtoggle = true; |
| break; |
| } |
| } |
| |
| if (!smoothzoomtoggle) { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| if ( hardwareActive ) { |
| camera->sendCommand(CAMERA_CMD_START_SMOOTH_ZOOM, zoom[zoomIDX].idx, 0); |
| } |
| } |
| break; |
| |
| case 'j': |
| |
| a = checkSupportedParamScript(exposureMode, numExposureMode, cmd); |
| if (a > -1) { |
| params.set(KEY_EXPOSURE, (cmd + 1)); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'b': |
| brightness = atoi(cmd + 1); |
| params.set(KEY_BRIGHTNESS, brightness); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 's': |
| saturation = atoi(cmd + 1); |
| params.set(KEY_SATURATION, saturation); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'e': |
| a = checkSupportedParamScript(effectss, numEffects, cmd); |
| if (a > -1) { |
| params.set(params.KEY_EFFECT, (cmd + 1)); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'r': |
| if (strcmp((cmd + 1), "MAX_FRAMERATE") == 0) { |
| frameRConst = 0; |
| for (int i=0; i<constCnt; i++) { |
| if (constFramerate[frameRConst] < constFramerate[i]) { |
| frameRConst = i; |
| } |
| } |
| if (0 < constFramerate[frameRConst]) { |
| params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fps_const_str[frameRConst]); |
| frameRateIDX = frameRConst; |
| printf("Framerate set: %d fps\n", constFramerate[frameRConst]); |
| } else { |
| printf("\nFramerate is 0!\n"); |
| } |
| } else { |
| a = checkSupportedParamScriptfpsConst(constFramerate, constCnt, cmd, &frameRConst); |
| if (a > -1) { |
| params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fps_const_str[frameRConst]); |
| frameRateIDX = frameRConst; |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| } |
| if ( hardwareActive && previewRunning ) { |
| camera->stopPreview(); |
| camera->setParameters(params.flatten()); |
| camera->startPreview(); |
| } else if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| |
| case 'R': |
| a = checkSupportedParamScriptfpsRange(rangeDescription, rangeCnt, cmd, &frameRRange); |
| if (a > -1) { |
| params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fps_range_str[frameRRange]); |
| fpsRangeIdx = frameRRange; |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| break; |
| |
| case 'x': |
| a = checkSupportedParamScript(antiband, numAntibanding, cmd); |
| if (a > -1) { |
| params.set(params.KEY_ANTIBANDING, (cmd + 1)); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'g': |
| a = checkSupportedParamScript(focus, numfocus, cmd); |
| if (a > -1) { |
| params.set(params.KEY_FOCUS_MODE, (cmd + 1)); |
| } else { |
| printf("\nNot supported parameter %s from sensor %d\n\n", cmd + 1, camera_index); |
| } |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'G': |
| |
| params.set(CameraParameters::KEY_FOCUS_AREAS, (cmd + 1)); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'y': |
| |
| params.set(CameraParameters::KEY_METERING_AREAS, (cmd + 1)); |
| |
| if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| |
| break; |
| |
| case 'f': |
| gettimeofday(&autofocus_start, 0); |
| |
| if ( hardwareActive ) |
| camera->autoFocus(); |
| |
| break; |
| |
| case 'p': |
| { |
| int msgType = 0; |
| const char *format = params.getPictureFormat(); |
| |
| if((0 == strcmp(modevalues[capture_mode], "video-mode")) && |
| (0 != strcmp(videosnapshotstr, "true"))) { |
| printf("Video Snapshot is not supported\n"); |
| } else if ( hardwareActive ) { |
| if((NULL != format) && isRawPixelFormat(format)) { |
| createBufferOutputSource(); |
| if (bufferSourceOutputThread.get()) { |
| bufferSourceOutputThread->setBuffer(shotParams); |
| bufferSourceOutputThread->setStreamCapture(streamCapture, expBracketIdx); |
| } |
| } else if(strcmp(modevalues[capture_mode], "video-mode") == 0) { |
| msgType = CAMERA_MSG_COMPRESSED_IMAGE | |
| CAMERA_MSG_RAW_IMAGE; |
| #ifdef OMAP_ENHANCEMENT_BURST_CAPTURE |
| msgType |= CAMERA_MSG_RAW_BURST; |
| #endif |
| } else { |
| msgType = CAMERA_MSG_POSTVIEW_FRAME | |
| CAMERA_MSG_RAW_IMAGE_NOTIFY | |
| CAMERA_MSG_COMPRESSED_IMAGE | |
| CAMERA_MSG_SHUTTER; |
| #ifdef OMAP_ENHANCEMENT_BURST_CAPTURE |
| msgType |= CAMERA_MSG_RAW_BURST; |
| #endif |
| } |
| |
| gettimeofday(&picture_start, 0); |
| ret = camera->setParameters(params.flatten()); |
| if ( ret != NO_ERROR ) { |
| printf("Error returned while setting parameters"); |
| break; |
| } |
| ret = camera->takePictureWithParameters(msgType, shotParams.flatten()); |
| if ( ret != NO_ERROR ) { |
| printf("Error returned while taking a picture"); |
| break; |
| } |
| } |
| break; |
| } |
| |
| case 'S': |
| { |
| if (streamCapture) { |
| streamCapture = false; |
| expBracketIdx = BRACKETING_IDX_DEFAULT; |
| setDefaultExpGainPreset(shotParams, expBracketIdx); |
| // Stop streaming |
| if (bufferSourceOutputThread.get()) { |
| bufferSourceOutputThread->setStreamCapture(streamCapture, expBracketIdx); |
| } |
| } else { |
| streamCapture = true; |
| expBracketIdx = BRACKETING_IDX_STREAM; |
| setSingleExpGainPreset(shotParams, expBracketIdx, 0, 0); |
| // Queue more frames initially |
| shotParams.set(ShotParameters::KEY_BURST, BRACKETING_STREAM_BUFFERS); |
| } |
| break; |
| } |
| |
| case 'P': |
| { |
| int msgType = CAMERA_MSG_COMPRESSED_IMAGE; |
| ShotParameters reprocParams; |
| |
| gettimeofday(&picture_start, 0); |
| |
| createBufferInputSource(); |
| |
| if (bufferSourceOutputThread.get() && |
| bufferSourceOutputThread->hasBuffer()) |
| { |
| bufferSourceOutputThread->setStreamCapture(false, expBracketIdx); |
| if (hardwareActive) camera->setParameters(params.flatten()); |
| |
| if (bufferSourceInput.get()) { |
| buffer_info_t info = bufferSourceOutputThread->popBuffer(); |
| bufferSourceInput->setInput(info, params.getPictureFormat(), reprocParams); |
| if (hardwareActive) camera->reprocess(msgType, String8()); |
| } |
| } |
| break; |
| } |
| |
| case 'd': |
| dly = atoi(cmd + 1); |
| sleep(dly); |
| break; |
| |
| case 'q': |
| dump_mem_status(); |
| stopPreview(); |
| |
| if ( recordingMode ) { |
| stopRecording(); |
| closeRecorder(); |
| |
| recordingMode = false; |
| } |
| goto exit; |
| |
| case '\n': |
| printf("Iteration: %d \n", iteration); |
| iteration++; |
| break; |
| |
| case '{': |
| if ( atoi(cmd + 1) > 0 ) |
| params.set(KEY_S3D2D_PREVIEW_MODE, "on"); |
| else |
| params.set(KEY_S3D2D_PREVIEW_MODE, "off"); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'M': |
| params.set(KEY_MEASUREMENT, (cmd + 1)); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| case 'm': |
| { |
| params.set(KEY_METERING_MODE, (cmd + 1)); |
| if ( hardwareActive ) |
| { |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| } |
| case '<': |
| { |
| char coord_str[8]; |
| latitude += degree_by_step; |
| if (latitude > 90.0) |
| { |
| latitude -= 180.0; |
| } |
| snprintf(coord_str, 7, "%.7lf", latitude); |
| params.set(params.KEY_GPS_LATITUDE, coord_str); |
| if ( hardwareActive ) |
| { |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| } |
| |
| case '=': |
| { |
| char coord_str[8]; |
| longitude += degree_by_step; |
| if (longitude > 180.0) |
| { |
| longitude -= 360.0; |
| } |
| snprintf(coord_str, 7, "%.7lf", longitude); |
| params.set(params.KEY_GPS_LONGITUDE, coord_str); |
| if ( hardwareActive ) |
| { |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| } |
| |
| case '>': |
| { |
| char coord_str[8]; |
| altitude += 12345.67890123456789; |
| if (altitude > 100000.0) |
| { |
| altitude -= 200000.0; |
| } |
| snprintf(coord_str, 7, "%.7lf", altitude); |
| params.set(params.KEY_GPS_ALTITUDE, coord_str); |
| if ( hardwareActive ) |
| { |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| } |
| |
| case 'X': |
| { |
| char rem_str[384]; |
| printf("Deleting images from %s \n", images_dir_path); |
| if (!sprintf(rem_str, "rm %s/*.jpg", images_dir_path)) { |
| printf("Sprintf Error"); |
| } |
| if (system(rem_str)) { |
| printf("Images were not deleted\n"); |
| } |
| break; |
| } |
| |
| case '_': |
| { |
| AutoConvergenceModeIDX = atoi(cmd + 1); |
| if ( AutoConvergenceModeIDX < 0 || AutoConvergenceModeIDX > 4 ) |
| AutoConvergenceModeIDX = 0; |
| params.set(KEY_AUTOCONVERGENCE, autoconvergencemode[AutoConvergenceModeIDX]); |
| if (AutoConvergenceModeIDX != 4) { |
| params.set(KEY_MANUAL_CONVERGENCE, manualConv); |
| } |
| if (hardwareActive) { |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| } |
| |
| case '^': |
| if (strcmp(autoconvergencemode[AutoConvergenceModeIDX], "manual") == 0) { |
| manC = atoi(cmd + 1); |
| if(manC >= manualConvMin && manC <= manualConvMax) |
| { |
| params.set(KEY_MANUAL_CONVERGENCE, manC); |
| } |
| else if(manC < manualConvMin) |
| { |
| printf(" wrong parameter for manual convergence \n"); |
| params.set(KEY_MANUAL_CONVERGENCE, manualConvMin); |
| } |
| else |
| { |
| printf(" wrong parameter for manual convergence \n"); |
| params.set(KEY_MANUAL_CONVERGENCE, manualConvMax); |
| } |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| |
| |
| case 'Q': |
| if ( strcmp (exposureMode[exposure_mode], "manual") == 0) { |
| manE = atoi(cmd + 1); |
| if(manE >= manualExpMin && manE <= manualExpMax) |
| { |
| params.set(KEY_MANUAL_EXPOSURE, manE); |
| params.set(KEY_MANUAL_EXPOSURE_RIGHT, manE); |
| } |
| else if(manE < manualExpMin) |
| { |
| printf(" wrong parameter for manual exposure \n"); |
| params.set(KEY_MANUAL_EXPOSURE, manualExpMin); |
| params.set(KEY_MANUAL_EXPOSURE_RIGHT, manualExpMin); |
| } |
| else |
| { |
| printf(" wrong parameter for manual exposure \n"); |
| params.set(KEY_MANUAL_EXPOSURE, manualExpMax); |
| params.set(KEY_MANUAL_EXPOSURE_RIGHT, manualExpMax); |
| } |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| |
| case ',': |
| if ( strcmp (exposureMode[exposure_mode], "manual") == 0) { |
| manG = atoi(cmd + 1); |
| if(manG >= manualGainMin && manG <= manualGainMax) |
| { |
| params.set(KEY_MANUAL_GAIN_ISO, manG); |
| params.set(KEY_MANUAL_GAIN_ISO_RIGHT, manG); |
| } |
| else if(manG < manualGainMin) |
| { |
| printf(" wrong parameter for manual gain \n"); |
| params.set(KEY_MANUAL_GAIN_ISO, manualGainMin); |
| params.set(KEY_MANUAL_GAIN_ISO_RIGHT, manualGainMin); |
| } |
| else |
| { |
| printf(" wrong parameter for manual gain \n"); |
| params.set(KEY_MANUAL_GAIN_ISO, manualGainMax); |
| params.set(KEY_MANUAL_GAIN_ISO_RIGHT, manualGainMax); |
| } |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| |
| default: |
| printf("Unrecognized command!\n"); |
| break; |
| } |
| |
| cmd = strtok_r(NULL, DELIMITER, &ctx); |
| } |
| |
| exit: |
| if (stopScript == true) |
| { |
| return -1; |
| } |
| else |
| { |
| return 0; |
| } |
| } |
| |
| |
| int checkSupportedParamScript(char **array, int size, char *param) { |
| for (int i=0; i<size; i++) { |
| if (strcmp((param + 1), array[i]) == 0) { |
| return 0; |
| } |
| } |
| return -1; |
| } |
| |
| int checkSupportedParamScriptLayout(char **array, int size, char *param, int *index) { |
| for (int i=0; i<size; i++) { |
| if (strcmp((param + 1), array[i]) == 0) { |
| *index = i; |
| return 0; |
| } |
| } |
| return -1; |
| } |
| |
| int checkSupportedParamScriptResol(param_Array **array, int size, char *param, int *num) { |
| for (int i=0; i<size; i++) { |
| if (strcmp((param + 1), array[i]->name) == 0) { |
| *num = i; |
| return 0; |
| } |
| } |
| return -1; |
| } |
| |
| int checkSupportedParamScriptResol(param_Array **array, int size, |
| int width, int height, int *num) { |
| for (int i=0; i<size; i++) { |
| if ((width == array[i]->width) && (height == array[i]->height)) { |
| *num = i; |
| return 0; |
| } |
| } |
| return -1; |
| } |
| |
| int checkSupportedParamScriptfpsConst(int *array, int size, char *param, int *num) { |
| for (int i=0; i<size; i++) { |
| if (atoi(param + 1) == array[i]) { |
| *num = i; |
| return 0; |
| } |
| } |
| return -1; |
| } |
| |
| int checkSupportedParamScriptfpsRange(char **array, int size, char *param, int *num) { |
| for (int i=0; i<size; i++) { |
| if (strcmp(param + 1, array[i]) == 0) { |
| *num = i; |
| return 0; |
| } |
| } |
| return -1; |
| } |
| |
| char * get_cycle_cmd(const char *aSrc) { |
| unsigned ind = 0; |
| char *cycle_cmd = new char[256]; |
| |
| while ((*aSrc != '+') && (*aSrc != '\0')) { |
| cycle_cmd[ind++] = *aSrc++; |
| } |
| cycle_cmd[ind] = '\0'; |
| |
| return cycle_cmd; |
| } |
| |
| status_t dump_mem_status() { |
| system(MEDIASERVER_DUMP); |
| return system(MEMORY_DUMP); |
| } |
| |
| char *load_script(const char *config) { |
| FILE *infile; |
| size_t fileSize; |
| char *script; |
| size_t nRead = 0; |
| |
| infile = fopen(config, "r"); |
| |
| strcpy(script_name,config); |
| |
| printf("\n SCRIPT : <%s> is currently being executed \n", script_name); |
| |
| printf("\n DIRECTORY CREATED FOR TEST RESULT IMAGES IN MMC CARD : %s \n", output_dir_path); |
| |
| if( (NULL == infile)){ |
| printf("Error while opening script file %s!\n", config); |
| return NULL; |
| } |
| |
| fseek(infile, 0, SEEK_END); |
| fileSize = ftell(infile); |
| fseek(infile, 0, SEEK_SET); |
| |
| script = (char *) malloc(fileSize + 1); |
| |
| if ( NULL == script ) { |
| printf("Unable to allocate buffer for the script\n"); |
| |
| return NULL; |
| } |
| |
| memset(script, 0, fileSize + 1); |
| |
| if ((nRead = fread(script, 1, fileSize, infile)) != fileSize) { |
| printf("Error while reading script file!\n"); |
| |
| free(script); |
| fclose(infile); |
| return NULL; |
| } |
| |
| fclose(infile); |
| |
| return script; |
| } |
| |
| int start_logging(int flags, int &pid) { |
| int status = 0; |
| |
| if (flags == 0) { |
| pid = -1; |
| return 0; |
| } |
| |
| pid = fork(); |
| if (pid == 0) |
| { |
| char *command_list[] = {"sh", "-c", NULL, NULL}; |
| char log_cmd[1024]; |
| // child process to run logging |
| |
| // set group id of this process to itself |
| // we will use this group id to kill the |
| // application logging |
| setpgid(getpid(), getpid()); |
| |
| /* Start logcat */ |
| if (flags & LOGGING_LOGCAT) { |
| if (!sprintf(log_cmd,"logcat > %s/log.txt &", output_dir_path)) { |
| printf(" Sprintf Error"); |
| } |
| } |
| |
| /* Start Syslink Trace */ |
| if (flags & LOGGING_SYSLINK) { |
| if (!sprintf(log_cmd,"%s /system/bin/syslink_trace_daemon.out -l %s/syslink_trace.txt -f &", log_cmd, output_dir_path)) { |
| printf(" Sprintf Error"); |
| } |
| } |
| |
| command_list[2] = (char *)log_cmd; |
| execvp("/system/bin/sh", command_list); |
| } if(pid < 0) |
| { |
| printf("failed to fork logcat\n"); |
| return -1; |
| } |
| |
| //wait for logging to start |
| if(waitpid(pid, &status, 0) != pid) |
| { |
| printf("waitpid failed in log fork\n"); |
| return -1; |
| }else |
| printf("logging started... status=%d\n", status); |
| |
| return 0; |
| } |
| |
| int stop_logging(int flags, int &pid) |
| { |
| if (pid > 0) { |
| if (killpg(pid, SIGKILL)) { |
| printf("Exit command failed"); |
| return -1; |
| } else { |
| printf("\nlogging for script %s is complete\n", script_name); |
| |
| if (flags & LOGGING_LOGCAT) { |
| printf(" logcat saved @ location: %s\n", output_dir_path); |
| } |
| |
| if (flags & LOGGING_SYSLINK) { |
| printf(" syslink_trace is saved @ location: %s\n\n", output_dir_path); |
| } |
| } |
| } |
| return 0; |
| } |
| |
| int execute_error_script(char *script) { |
| char *cmd, *ctx; |
| char id; |
| status_t stat = NO_ERROR; |
| |
| LOG_FUNCTION_NAME; |
| |
| cmd = strtok_r((char *) script, DELIMITER, &ctx); |
| |
| while ( NULL != cmd ) { |
| id = cmd[0]; |
| |
| switch (id) { |
| |
| case '0': { |
| bufferStarvationTest = 1; |
| params.set(KEY_BUFF_STARV, bufferStarvationTest); //enable buffer starvation |
| |
| if ( !recordingMode ) { |
| |
| recordingMode = true; |
| |
| if ( startPreview() < 0 ) { |
| printf("Error while starting preview\n"); |
| |
| return -1; |
| } |
| |
| if ( openRecorder() < 0 ) { |
| printf("Error while openning video recorder\n"); |
| |
| return -1; |
| } |
| |
| if ( configureRecorder() < 0 ) { |
| printf("Error while configuring video recorder\n"); |
| |
| return -1; |
| } |
| |
| if ( startRecording() < 0 ) { |
| printf("Error while starting video recording\n"); |
| |
| return -1; |
| } |
| |
| } |
| |
| usleep(1000000);//1s |
| |
| stopPreview(); |
| |
| if ( recordingMode ) { |
| stopRecording(); |
| closeRecorder(); |
| |
| recordingMode = false; |
| } |
| |
| break; |
| } |
| |
| case '1': { |
| int* tMemoryEater = new int[999999999]; |
| |
| if (!tMemoryEater) { |
| printf("Not enough memory\n"); |
| return -1; |
| } else { |
| delete tMemoryEater; |
| } |
| |
| break; |
| } |
| |
| case '2': { |
| //camera = Camera::connect(); |
| |
| if ( NULL == camera.get() ) { |
| printf("Unable to connect to CameraService\n"); |
| return -1; |
| } |
| |
| break; |
| } |
| |
| case '3': { |
| int err = 0; |
| |
| err = open("/dev/video5", O_RDWR); |
| |
| if (err < 0) { |
| printf("Could not open the camera device5: %d\n", err ); |
| return err; |
| } |
| |
| if ( startPreview() < 0 ) { |
| printf("Error while starting preview\n"); |
| return -1; |
| } |
| |
| usleep(1000000);//1s |
| |
| stopPreview(); |
| |
| close(err); |
| break; |
| } |
| |
| case '4': { |
| |
| if ( hardwareActive ) { |
| |
| params.setPictureFormat("invalid-format"); |
| params.setPreviewFormat("invalid-format"); |
| |
| stat = camera->setParameters(params.flatten()); |
| |
| if ( NO_ERROR != stat ) { |
| printf("Test passed!\n"); |
| } else { |
| printf("Test failed!\n"); |
| } |
| |
| initDefaults(); |
| } |
| |
| break; |
| } |
| |
| case '5': { |
| |
| if ( hardwareActive ) { |
| |
| params.setPictureSize(-1, -1); |
| params.setPreviewSize(-1, -1); |
| |
| stat = camera->setParameters(params.flatten()); |
| |
| if ( NO_ERROR != stat ) { |
| printf("Test passed!\n"); |
| } else { |
| printf("Test failed!\n"); |
| } |
| |
| initDefaults(); |
| } |
| |
| break; |
| } |
| |
| case '6': { |
| |
| if ( hardwareActive ) { |
| |
| params.setPreviewFrameRate(-1); |
| |
| stat = camera->setParameters(params.flatten()); |
| |
| if ( NO_ERROR != stat ) { |
| printf("Test passed!\n"); |
| } else { |
| printf("Test failed!\n"); |
| } |
| |
| initDefaults(); |
| } |
| |
| |
| break; |
| } |
| |
| case 'q': { |
| goto exit; |
| |
| break; |
| } |
| |
| default: { |
| printf("Unrecognized command!\n"); |
| |
| break; |
| } |
| } |
| |
| cmd = strtok_r(NULL, DELIMITER, &ctx); |
| } |
| |
| exit: |
| |
| return 0; |
| } |
| |
| |
| |