| #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 <gui/Surface.h> |
| #include <gui/SurfaceComposerClient.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 <system/audio.h> |
| #include <system/camera.h> |
| |
| #include <cutils/memory.h> |
| #include <utils/Log.h> |
| |
| #include <sys/wait.h> |
| |
| #include "camera_test.h" |
| |
| using namespace android; |
| |
| int camera_index = 0; |
| int print_menu; |
| sp<Camera> camera; |
| sp<MediaRecorder> recorder; |
| sp<SurfaceComposerClient> client; |
| sp<SurfaceControl> surfaceControl; |
| sp<Surface> previewSurface; |
| CameraParameters params; |
| float compensation = 0.0; |
| double latitude = 0.0; |
| double longitude = 0.0; |
| double degree_by_step = 17.5609756;//..0975609756097; |
| double altitude = 0.0; |
| int awb_mode = 0; |
| int effects_mode = 0; |
| int scene_mode = 0; |
| int caf_mode = 0; |
| int vnf_mode = 0; |
| int vstab_mode = 0; |
| |
| int tempBracketRange = 1; |
| int tempBracketIdx = 0; |
| int measurementIdx = 0; |
| int expBracketIdx = 0; |
| int AutoConvergenceModeIDX = 0; |
| int ManualConvergenceValuesIDX = 0; |
| int ManualConvergenceDefaultValueIDX = 2; |
| int gbceIDX = 0; |
| int glbceIDX = 0; |
| int rotation = 0; |
| bool reSizePreview = true; |
| bool hardwareActive = false; |
| bool recordingMode = false; |
| bool previewRunning = false; |
| int saturation = 0; |
| int zoomIDX = 0; |
| int videoCodecIDX = 0; |
| int audioCodecIDX = 0; |
| int outputFormatIDX = 0; |
| int contrast = 0; |
| int brightness = 0; |
| unsigned int burst = 0; |
| int sharpness = 0; |
| int iso_mode = 0; |
| int capture_mode = 0; |
| int exposure_mode = 0; |
| int ippIDX = 0; |
| int ippIDX_old = 0; |
| int previewFormat = 0; |
| int jpegQuality = 85; |
| int thumbQuality = 85; |
| int flashIdx = 0; |
| int fpsRangeIdx = 0; |
| timeval autofocus_start, picture_start; |
| char script_name[80]; |
| int prevcnt = 0; |
| int videoFd = -1; |
| int elockidx = 0; |
| int wblockidx = 0; |
| |
| |
| char dir_path[80] = SDCARD_PATH; |
| |
| const char *cameras[] = {"Primary Camera", "Secondary Camera 1", "Stereo Camera", "USB Camera", "Fake Camera"}; |
| const char *measurement[] = {"disable", "enable"}; |
| const char *expBracketing[] = {"disable", "enable"}; |
| const char *expBracketingRange[] = {"", "-30,0,30,0,-30"}; |
| const char *tempBracketing[] = {"disable", "enable"}; |
| const char *faceDetection[] = {"disable", "enable"}; |
| const char *lock[] = {"false", "true"}; |
| |
| #if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) |
| const char *ipp_mode[] = { "off", "Chroma Suppression", "Edge Enhancement" }; |
| #else |
| const char *ipp_mode[] = { "off", "ldc", "nsf", "ldc-nsf" }; |
| #endif |
| |
| const char *iso [] = { "auto", "100", "200", "400", "800", "1200", "1600"}; |
| |
| const char *effects [] = { |
| #if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) |
| "none", |
| "mono", |
| "negative", |
| "solarize", |
| "sepia", |
| "whiteboard", |
| "blackboard", |
| "cool", |
| "emboss" |
| #else |
| "none", |
| "mono", |
| "negative", |
| "solarize", |
| "sepia", |
| "vivid", |
| "whiteboard", |
| "blackboard", |
| "cool", |
| "emboss", |
| "blackwhite", |
| "aqua", |
| "posterize" |
| #endif |
| }; |
| |
| const char CameraParameters::FLASH_MODE_OFF[] = "off"; |
| const char CameraParameters::FLASH_MODE_AUTO[] = "auto"; |
| const char CameraParameters::FLASH_MODE_ON[] = "on"; |
| const char CameraParameters::FLASH_MODE_RED_EYE[] = "red-eye"; |
| const char CameraParameters::FLASH_MODE_TORCH[] = "torch"; |
| |
| const char *flashModes[] = { |
| "off", |
| "auto", |
| "on", |
| "red-eye", |
| "torch", |
| "fill-in", |
| }; |
| |
| const char *caf [] = { "Off", "On" }; |
| const char *vnf [] = { "Off", "On" }; |
| const char *vstab [] = { "Off", "On" }; |
| |
| |
| const char *scene [] = { |
| #if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) |
| "auto", |
| "portrait", |
| "landscape", |
| "night", |
| "night-portrait", |
| "fireworks", |
| "snow", |
| "action", |
| #else |
| "auto", |
| "portrait", |
| "landscape", |
| "night", |
| "night-portrait", |
| "night-indoor", |
| "fireworks", |
| "sport", |
| "cine", |
| "beach", |
| "snow", |
| "mood", |
| "closeup", |
| "underwater", |
| "document", |
| "barcode", |
| "oldfilm", |
| "candlelight", |
| "party", |
| "steadyphoto", |
| "sunset", |
| "action", |
| "theatre" |
| #endif |
| }; |
| const char *strawb_mode[] = { |
| "auto", |
| "incandescent", |
| "fluorescent", |
| "daylight", |
| "horizon", |
| "shadow", |
| "tungsten", |
| "shade", |
| "twilight", |
| "warm-fluorescent", |
| "facepriority", |
| "sunset" |
| }; |
| |
| size_t length_cam = ARRAY_SIZE(cameras); |
| |
| |
| preview_size previewSize [] = { |
| { 0, 0, "NULL"}, |
| { 128, 96, "SQCIF" }, |
| { 176, 144, "QCIF" }, |
| { 352, 288, "CIF" }, |
| { 320, 240, "QVGA" }, |
| { 352, 288, "CIF" }, |
| { 640, 480, "VGA" }, |
| { 720, 480, "NTSC" }, |
| { 720, 576, "PAL" }, |
| { 800, 480, "WVGA" }, |
| { 848, 480, "WVGA2"}, |
| { 864, 480, "WVGA3"}, |
| { 992, 560, "WVGA4"}, |
| { 1280, 720, "HD" }, |
| { 1920, 1080, "FULLHD"}, |
| }; |
| |
| size_t length_previewSize = ARRAY_SIZE(previewSize); |
| |
| Vcapture_size VcaptureSize [] = { |
| { 128, 96, "SQCIF" }, |
| { 176, 144, "QCIF" }, |
| { 352, 288, "CIF" }, |
| { 320, 240, "QVGA" }, |
| { 640, 480, "VGA" }, |
| { 704, 480, "TVNTSC" }, |
| { 704, 576, "TVPAL" }, |
| { 720, 480, "D1NTSC" }, |
| { 720, 576, "D1PAL" }, |
| { 800, 480, "WVGA" }, |
| #if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) |
| { 848, 480, "WVGA2"}, |
| { 864, 480, "WVGA3"}, |
| { 992, 560, "WVGA4"}, |
| #endif |
| { 1280, 720, "HD" }, |
| { 1920, 1080, "FULLHD"}, |
| }; |
| |
| size_t lenght_Vcapture_size = ARRAY_SIZE(VcaptureSize); |
| |
| capture_Size captureSize[] = { |
| { 320, 240, "QVGA" }, |
| { 640, 480, "VGA" }, |
| { 800, 600, "SVGA" }, |
| { 1152, 864, "1MP" }, |
| { 1280, 1024, "1.3MP" }, |
| { 1600, 1200, "2MP" }, |
| { 2048, 1536, "3MP" }, |
| { 2592, 1944, "5MP" }, |
| { 2608, 1960, "5MP" }, |
| { 3264, 2448, "8MP" }, |
| { 3648, 2736, "10MP"}, |
| { 4032, 3024, "12MP"}, |
| }; |
| |
| size_t length_capture_Size = ARRAY_SIZE(captureSize); |
| |
| |
| outformat outputFormat[] = { |
| { OUTPUT_FORMAT_THREE_GPP, "3gp" }, |
| { OUTPUT_FORMAT_MPEG_4, "mp4" }, |
| }; |
| |
| size_t length_outformat = ARRAY_SIZE(outputFormat); |
| |
| video_Codecs videoCodecs[] = { |
| { VIDEO_ENCODER_H263, "H263" }, |
| { VIDEO_ENCODER_H264, "H264" }, |
| { VIDEO_ENCODER_MPEG_4_SP, "MPEG4"} |
| }; |
| |
| size_t length_video_Codecs = ARRAY_SIZE(videoCodecs); |
| |
| audio_Codecs audioCodecs[] = { |
| { AUDIO_ENCODER_AMR_NB, "AMR_NB" }, |
| { AUDIO_ENCODER_AMR_WB, "AMR_WB" }, |
| { AUDIO_ENCODER_AAC, "AAC" }, |
| { AUDIO_ENCODER_AAC_PLUS, "AAC+" }, |
| { AUDIO_ENCODER_EAAC_PLUS, "EAAC+" }, |
| { AUDIO_ENCODER_LIST_END, "disabled"}, |
| }; |
| |
| size_t length_audio_Codecs = ARRAY_SIZE(audioCodecs); |
| |
| V_bitRate VbitRate[] = { |
| { 64000, "64K" }, |
| { 128000, "128K" }, |
| { 192000, "192K" }, |
| { 240000, "240K" }, |
| { 320000, "320K" }, |
| { 360000, "360K" }, |
| { 384000, "384K" }, |
| { 420000, "420K" }, |
| { 768000, "768K" }, |
| { 1000000, "1M" }, |
| { 1500000, "1.5M" }, |
| { 2000000, "2M" }, |
| { 4000000, "4M" }, |
| { 6000000, "6M" }, |
| { 8000000, "8M" }, |
| { 10000000, "10M" }, |
| }; |
| |
| size_t length_V_bitRate = ARRAY_SIZE(VbitRate); |
| |
| Zoom zoom[] = { |
| { 0, "1x" }, |
| { 12, "1.5x"}, |
| { 20, "2x" }, |
| { 27, "2.5x"}, |
| { 32, "3x" }, |
| { 36, "3.5x"}, |
| { 40, "4x" }, |
| { 60, "8x" }, |
| }; |
| |
| size_t length_Zoom = ARRAY_SIZE(zoom); |
| |
| fps_ranges fpsRanges[] = { |
| { "5000,30000", "[5:30]" }, |
| { "5000,10000", "[5:10]" }, |
| { "5000,15000", "[5:15]" }, |
| { "5000,20000", "[5:20]" }, |
| }; |
| |
| size_t length_fps_ranges = ARRAY_SIZE(fpsRanges); |
| |
| fpsConst_Ranges fpsConstRanges[] = { |
| { "5000,5000", "[5:5]", 5 }, |
| { "10000,10000", "[10:10]", 10 }, |
| { "15000,15000", "[15:15]", 15 }, |
| { "20000,20000", "[20:20]", 20 }, |
| { "25000,25000", "[25:25]", 25 }, |
| { "30000,30000", "[30:30]", 30 }, |
| }; |
| |
| size_t length_fpsConst_Ranges = ARRAY_SIZE(fpsConstRanges); |
| |
| fpsConst_RangesSec fpsConstRangesSec[] = { |
| { "5000,5000", "[5:5]", 5 }, |
| { "10000,10000", "[10:10]", 10 }, |
| { "15000,15000", "[15:15]", 15 }, |
| { "20000,20000", "[20:20]", 20 }, |
| { "25000,25000", "[25:25]", 25 }, |
| { "27000,27000", "[27:27]", 27 }, |
| }; |
| |
| size_t length_fpsConst_RangesSec = ARRAY_SIZE(fpsConstRangesSec); |
| |
| const char *antibanding[] = { |
| "off", |
| "auto", |
| "50hz", |
| "60hz", |
| }; |
| int antibanding_mode = 0; |
| const char *focus[] = { |
| "auto", |
| "infinity", |
| "macro", |
| "continuous-video", |
| "extended", |
| "portrait", |
| }; |
| int focus_mode = 0; |
| pixel_format pixelformat[] = { |
| { HAL_PIXEL_FORMAT_YCbCr_422_I, CameraParameters::PIXEL_FORMAT_YUV422I }, |
| { HAL_PIXEL_FORMAT_YCrCb_420_SP, CameraParameters::PIXEL_FORMAT_YUV420SP }, |
| { HAL_PIXEL_FORMAT_RGB_565, CameraParameters::PIXEL_FORMAT_RGB565 }, |
| { -1, CameraParameters::PIXEL_FORMAT_JPEG }, |
| { -1, "raw" }, |
| }; |
| |
| const char *codingformat[] = {"yuv422i-yuyv", "yuv420sp", "rgb565", "jpeg", "raw", "jps", "mpo", "raw+jpeg", "raw+mpo"}; |
| const char *gbce[] = {"disable", "enable"}; |
| int pictureFormat = 3; // jpeg |
| const char *exposure[] = {"auto", "macro", "portrait", "landscape", "sports", "night", "night-portrait", "backlighting", "manual"}; |
| const char *capture[] = { "high-performance", "high-quality", "video-mode" }; |
| const char *autoconvergencemode[] = { "mode-disable", "mode-frame", "mode-center", "mode-fft", "mode-manual" }; |
| const char *manualconvergencevalues[] = { "-100", "-50", "-30", "-25", "0", "25", "50", "100" }; |
| |
| const struct { |
| int fps; |
| } frameRate[] = { |
| {0}, |
| {5}, |
| {10}, |
| {15}, |
| {20}, |
| {25}, |
| {30} |
| }; |
| |
| int thumbSizeIDX = 3; |
| int previewSizeIDX = ARRAY_SIZE(previewSize) - 1; |
| int captureSizeIDX = ARRAY_SIZE(captureSize) - 1; |
| int frameRateIDX = ARRAY_SIZE(fpsConstRanges) - 1; |
| int frameRateIDXSec = ARRAY_SIZE(fpsConstRangesSec) - 1; |
| int VcaptureSizeIDX = ARRAY_SIZE(VcaptureSize) - 1; |
| int VbitRateIDX = ARRAY_SIZE(VbitRate) - 1; |
| |
| static unsigned int recording_counter = 1; |
| |
| int dump_preview = 0; |
| int bufferStarvationTest = 0; |
| bool showfps = false; |
| |
| const char *metering[] = { |
| "center", |
| "average", |
| }; |
| int meter_mode = 0; |
| bool bLogSysLinkTrace = true; |
| bool stressTest = false; |
| bool stopScript = false; |
| int restartCount = 0; |
| |
| /** Calculate delay from a reference time */ |
| unsigned long long timeval_delay(const timeval *ref) { |
| unsigned long long st, end, delay; |
| timeval current_time; |
| |
| gettimeofday(¤t_time, 0); |
| |
| st = ref->tv_sec * 1000000 + ref->tv_usec; |
| end = current_time.tv_sec * 1000000 + current_time.tv_usec; |
| delay = end - st; |
| |
| return delay; |
| } |
| |
| /** Callback for takePicture() */ |
| void my_raw_callback(const sp<IMemory>& mem) { |
| |
| static int counter = 1; |
| unsigned char *buff = NULL; |
| int size; |
| int fd = -1; |
| char fn[256]; |
| |
| LOG_FUNCTION_NAME; |
| |
| if (mem == NULL) |
| goto out; |
| |
| //Start preview after capture. |
| camera->startPreview(); |
| |
| fn[0] = 0; |
| sprintf(fn, "/sdcard/img%03d.raw", counter); |
| fd = open(fn, O_CREAT | O_WRONLY | O_TRUNC, 0777); |
| |
| if (fd < 0) |
| goto out; |
| |
| size = mem->size(); |
| |
| if (size <= 0) |
| goto out; |
| |
| buff = (unsigned char *)mem->pointer(); |
| |
| if (!buff) |
| goto out; |
| |
| if (size != write(fd, buff, size)) |
| printf("Bad Write int a %s error (%d)%s\n", fn, errno, strerror(errno)); |
| |
| counter++; |
| printf("%s: buffer=%08X, size=%d stored at %s\n", |
| __FUNCTION__, (int)buff, size, fn); |
| |
| out: |
| |
| if (fd >= 0) |
| close(fd); |
| |
| LOG_FUNCTION_NAME_EXIT; |
| } |
| |
| void saveFile(const sp<IMemory>& mem) { |
| static int counter = 1; |
| unsigned char *buff = NULL; |
| int size; |
| int fd = -1; |
| char fn[256]; |
| |
| LOG_FUNCTION_NAME; |
| |
| if (mem == NULL) |
| goto out; |
| |
| fn[0] = 0; |
| sprintf(fn, "/sdcard/preview%03d.yuv", counter); |
| fd = open(fn, O_CREAT | O_WRONLY | O_TRUNC, 0777); |
| if(fd < 0) { |
| ALOGE("Unable to open file %s: %s", fn, strerror(fd)); |
| goto out; |
| } |
| |
| size = mem->size(); |
| if (size <= 0) { |
| ALOGE("IMemory object is of zero size"); |
| goto out; |
| } |
| |
| buff = (unsigned char *)mem->pointer(); |
| if (!buff) { |
| ALOGE("Buffer pointer is invalid"); |
| goto out; |
| } |
| |
| if (size != write(fd, buff, size)) |
| printf("Bad Write int a %s error (%d)%s\n", fn, errno, strerror(errno)); |
| |
| counter++; |
| printf("%s: buffer=%08X, size=%d\n", |
| __FUNCTION__, (int)buff, size); |
| |
| out: |
| |
| if (fd >= 0) |
| close(fd); |
| |
| LOG_FUNCTION_NAME_EXIT; |
| } |
| |
| |
| void debugShowFPS() |
| { |
| static int mFrameCount = 0; |
| static int mLastFrameCount = 0; |
| static nsecs_t mLastFpsTime = 0; |
| static float mFps = 0; |
| mFrameCount++; |
| if ( ( mFrameCount % 30 ) == 0 ) { |
| nsecs_t now = systemTime(); |
| nsecs_t diff = now - mLastFpsTime; |
| mFps = ((mFrameCount - mLastFrameCount) * float(s2ns(1))) / diff; |
| mLastFpsTime = now; |
| mLastFrameCount = mFrameCount; |
| printf("####### [%d] Frames, %f FPS", mFrameCount, mFps); |
| } |
| } |
| |
| /** Callback for startPreview() */ |
| void my_preview_callback(const sp<IMemory>& mem) { |
| |
| printf("PREVIEW Callback 0x%x", ( unsigned int ) mem->pointer()); |
| if (dump_preview) { |
| |
| if(prevcnt==50) |
| saveFile(mem); |
| |
| prevcnt++; |
| |
| uint8_t *ptr = (uint8_t*) mem->pointer(); |
| |
| printf("PRV_CB: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x", ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5], ptr[6], ptr[7], ptr[8], ptr[9]); |
| |
| } |
| |
| debugShowFPS(); |
| } |
| |
| /** Callback for takePicture() */ |
| void my_jpeg_callback(const sp<IMemory>& mem) { |
| static int counter = 1; |
| unsigned char *buff = NULL; |
| int size; |
| int fd = -1; |
| char fn[256]; |
| |
| LOG_FUNCTION_NAME; |
| |
| //Start preview after capture. |
| camera->startPreview(); |
| |
| if (mem == NULL) |
| goto out; |
| |
| fn[0] = 0; |
| sprintf(fn, "%s/img%03d.jpg", dir_path,counter); |
| fd = open(fn, O_CREAT | O_WRONLY | O_TRUNC, 0777); |
| |
| if(fd < 0) { |
| ALOGE("Unable to open file %s: %s", fn, strerror(fd)); |
| goto out; |
| } |
| |
| size = mem->size(); |
| if (size <= 0) { |
| ALOGE("IMemory object is of zero size"); |
| goto out; |
| } |
| |
| buff = (unsigned char *)mem->pointer(); |
| if (!buff) { |
| ALOGE("Buffer pointer is invalid"); |
| goto out; |
| } |
| |
| if (size != write(fd, buff, size)) |
| printf("Bad Write int a %s error (%d)%s\n", fn, errno, strerror(errno)); |
| |
| counter++; |
| printf("%s: buffer=%08X, size=%d stored at %s\n", |
| __FUNCTION__, (int)buff, size, fn); |
| |
| out: |
| |
| if (fd >= 0) |
| close(fd); |
| |
| LOG_FUNCTION_NAME_EXIT; |
| } |
| |
| void my_face_callback(camera_frame_metadata_t *metadata) { |
| int idx; |
| |
| if ( NULL == metadata ) { |
| return; |
| } |
| |
| for ( idx = 0 ; idx < metadata->number_of_faces ; idx++ ) { |
| printf("Face %d at %d,%d %d,%d \n", |
| idx, |
| metadata->faces[idx].rect[0], |
| metadata->faces[idx].rect[1], |
| metadata->faces[idx].rect[2], |
| metadata->faces[idx].rect[3]); |
| } |
| |
| } |
| |
| void CameraHandler::notify(int32_t msgType, int32_t ext1, int32_t ext2) { |
| |
| printf("Notify cb: %d %d %d\n", msgType, ext1, ext2); |
| |
| if ( msgType & CAMERA_MSG_FOCUS ) |
| printf("AutoFocus %s in %llu us\n", (ext1) ? "OK" : "FAIL", timeval_delay(&autofocus_start)); |
| |
| if ( msgType & CAMERA_MSG_SHUTTER ) |
| printf("Shutter done in %llu us\n", timeval_delay(&picture_start)); |
| |
| if ( msgType & CAMERA_MSG_ERROR && (ext1 == 1)) |
| { |
| printf("Camera Test CAMERA_MSG_ERROR.....\n"); |
| if (stressTest) |
| { |
| printf("Camera Test Notified of Error Restarting.....\n"); |
| stopScript = true; |
| } |
| else |
| { |
| printf("Camera Test Notified of Error Stopping.....\n"); |
| stopScript =false; |
| stopPreview(); |
| |
| if (recordingMode) |
| { |
| stopRecording(); |
| closeRecorder(); |
| recordingMode = false; |
| } |
| } |
| } |
| } |
| |
| void CameraHandler::postData(int32_t msgType, |
| const sp<IMemory>& dataPtr, |
| camera_frame_metadata_t *metadata) { |
| printf("Data cb: %d\n", msgType); |
| |
| if ( msgType & CAMERA_MSG_PREVIEW_FRAME ) |
| my_preview_callback(dataPtr); |
| |
| if ( msgType & CAMERA_MSG_RAW_IMAGE ) { |
| printf("RAW done in %llu us\n", timeval_delay(&picture_start)); |
| my_raw_callback(dataPtr); |
| } |
| |
| if (msgType & CAMERA_MSG_POSTVIEW_FRAME) { |
| printf("Postview frame %llu us\n", timeval_delay(&picture_start)); |
| } |
| |
| if (msgType & CAMERA_MSG_COMPRESSED_IMAGE ) { |
| printf("JPEG done in %llu us\n", timeval_delay(&picture_start)); |
| my_jpeg_callback(dataPtr); |
| } |
| |
| if ( ( msgType & CAMERA_MSG_PREVIEW_METADATA ) && |
| ( NULL != metadata ) ) { |
| printf("Face detected %d \n", metadata->number_of_faces); |
| my_face_callback(metadata); |
| } |
| } |
| |
| void CameraHandler::postDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr) |
| |
| { |
| printf("Recording cb: %d %lld %p\n", msgType, timestamp, dataPtr.get()); |
| |
| static uint32_t count = 0; |
| |
| //if(count==100) |
| //saveFile(dataPtr); |
| |
| count++; |
| |
| uint8_t *ptr = (uint8_t*) dataPtr->pointer(); |
| |
| printf("VID_CB: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x", ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5], ptr[6], ptr[7], ptr[8], ptr[9]); |
| |
| camera->releaseRecordingFrame(dataPtr); |
| } |
| |
| int createPreviewSurface(unsigned int width, unsigned int height, int32_t pixFormat) { |
| unsigned int previewWidth, previewHeight; |
| |
| if ( MAX_PREVIEW_SURFACE_WIDTH < width ) { |
| previewWidth = MAX_PREVIEW_SURFACE_WIDTH; |
| } else { |
| previewWidth = width; |
| } |
| |
| if ( MAX_PREVIEW_SURFACE_HEIGHT < height ) { |
| previewHeight = MAX_PREVIEW_SURFACE_HEIGHT; |
| } else { |
| previewHeight = height; |
| } |
| |
| client = new SurfaceComposerClient(); |
| |
| if ( NULL == client.get() ) { |
| printf("Unable to establish connection to Surface Composer \n"); |
| |
| return -1; |
| } |
| |
| surfaceControl = client->createSurface(0, |
| previewWidth, |
| previewHeight, |
| pixFormat); |
| |
| previewSurface = surfaceControl->getSurface(); |
| |
| client->openGlobalTransaction(); |
| surfaceControl->setLayer(0x7fffffff); |
| surfaceControl->setPosition(0, 0); |
| surfaceControl->setSize(previewWidth, previewHeight); |
| surfaceControl->show(); |
| client->closeGlobalTransaction(); |
| |
| return 0; |
| } |
| |
| void printSupportedParams() |
| { |
| printf("\n\r\tSupported Cameras: %s", params.get("camera-indexes")); |
| printf("\n\r\tSupported Picture Sizes: %s", params.get(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES)); |
| printf("\n\r\tSupported Picture Formats: %s", params.get(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS)); |
| printf("\n\r\tSupported Preview Sizes: %s", params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES)); |
| printf("\n\r\tSupported Preview Formats: %s", params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS)); |
| printf("\n\r\tSupported Preview Frame Rates: %s", params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES)); |
| printf("\n\r\tSupported Thumbnail Sizes: %s", params.get(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES)); |
| printf("\n\r\tSupported Whitebalance Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE)); |
| printf("\n\r\tSupported Effects: %s", params.get(CameraParameters::KEY_SUPPORTED_EFFECTS)); |
| printf("\n\r\tSupported Scene Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_SCENE_MODES)); |
| printf("\n\r\tSupported Focus Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_FOCUS_MODES)); |
| printf("\n\r\tSupported Antibanding Options: %s", params.get(CameraParameters::KEY_SUPPORTED_ANTIBANDING)); |
| printf("\n\r\tSupported Flash Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_FLASH_MODES)); |
| printf("\n\r\tSupported Focus Areas: %d", params.getInt(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS)); |
| |
| if ( NULL != params.get(CameraParameters::KEY_FOCUS_DISTANCES) ) { |
| printf("\n\r\tFocus Distances: %s \n", params.get(CameraParameters::KEY_FOCUS_DISTANCES)); |
| } |
| |
| return; |
| } |
| |
| |
| int destroyPreviewSurface() { |
| |
| if ( NULL != previewSurface.get() ) { |
| previewSurface.clear(); |
| } |
| |
| if ( NULL != surfaceControl.get() ) { |
| surfaceControl->clear(); |
| surfaceControl.clear(); |
| } |
| |
| if ( NULL != client.get() ) { |
| client->dispose(); |
| client.clear(); |
| } |
| |
| return 0; |
| } |
| |
| int openRecorder() { |
| recorder = new MediaRecorder(); |
| |
| if ( NULL == recorder.get() ) { |
| printf("Error while creating MediaRecorder\n"); |
| |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int closeRecorder() { |
| if ( NULL == recorder.get() ) { |
| printf("invalid recorder reference\n"); |
| |
| return -1; |
| } |
| |
| if ( recorder->init() < 0 ) { |
| printf("recorder failed to initialize\n"); |
| |
| return -1; |
| } |
| |
| if ( recorder->close() < 0 ) { |
| printf("recorder failed to close\n"); |
| |
| return -1; |
| } |
| |
| if ( recorder->release() < 0 ) { |
| printf("error while releasing recorder\n"); |
| |
| return -1; |
| } |
| |
| recorder.clear(); |
| |
| return 0; |
| } |
| |
| int configureRecorder() { |
| |
| char videoFile[256],vbit_string[50]; |
| videoFd = -1; |
| |
| if ( ( NULL == recorder.get() ) || ( NULL == camera.get() ) ) { |
| printf("invalid recorder and/or camera references\n"); |
| |
| return -1; |
| } |
| |
| camera->unlock(); |
| |
| sprintf(vbit_string,"video-param-encoding-bitrate=%u", VbitRate[VbitRateIDX].bit_rate); |
| String8 bit_rate(vbit_string); |
| if ( recorder->setParameters(bit_rate) < 0 ) { |
| printf("error while configuring bit rate\n"); |
| |
| return -1; |
| } |
| |
| if ( recorder->setCamera(camera->remote(), camera->getRecordingProxy()) < 0 ) { |
| printf("error while setting the camera\n"); |
| |
| return -1; |
| } |
| |
| if ( recorder->setVideoSource(VIDEO_SOURCE_CAMERA) < 0 ) { |
| printf("error while configuring camera video source\n"); |
| |
| return -1; |
| } |
| |
| |
| if ( AUDIO_ENCODER_LIST_END != audioCodecs[audioCodecIDX].type ) { |
| if ( recorder->setAudioSource(AUDIO_SOURCE_DEFAULT) < 0 ) { |
| printf("error while configuring camera audio source\n"); |
| |
| return -1; |
| } |
| } |
| |
| if ( recorder->setOutputFormat(outputFormat[outputFormatIDX].type) < 0 ) { |
| printf("error while configuring output format\n"); |
| |
| return -1; |
| } |
| |
| if(mkdir("/mnt/sdcard/videos",0777) == -1) |
| printf("\n Directory --videos-- was not created \n"); |
| sprintf(videoFile, "/mnt/sdcard/videos/video%d.%s", recording_counter,outputFormat[outputFormatIDX].desc); |
| |
| videoFd = open(videoFile, O_CREAT | O_RDWR); |
| |
| if(videoFd < 0){ |
| printf("Error while creating video filename\n"); |
| |
| return -1; |
| } |
| |
| if ( recorder->setOutputFile(videoFd, 0, 0) < 0 ) { |
| printf("error while configuring video filename\n"); |
| |
| return -1; |
| } |
| |
| recording_counter++; |
| |
| if (camera_index == 0) { |
| if ( recorder->setVideoFrameRate(fpsConstRanges[frameRateIDX].constFramerate) < 0 ) { |
| printf("error while configuring video framerate\n"); |
| return -1; |
| } |
| } |
| else { |
| if ( recorder->setVideoFrameRate(fpsConstRangesSec[frameRateIDXSec].constFramerate) < 0 ) { |
| printf("error while configuring video framerate\n"); |
| return -1; |
| } |
| } |
| |
| if ( recorder->setVideoSize(VcaptureSize[VcaptureSizeIDX].width, VcaptureSize[VcaptureSizeIDX].height) < 0 ) { |
| printf("error while configuring video size\n"); |
| |
| return -1; |
| } |
| |
| if ( recorder->setVideoEncoder(videoCodecs[videoCodecIDX].type) < 0 ) { |
| printf("error while configuring video codec\n"); |
| |
| return -1; |
| } |
| |
| if ( AUDIO_ENCODER_LIST_END != audioCodecs[audioCodecIDX].type ) { |
| if ( recorder->setAudioEncoder(audioCodecs[audioCodecIDX].type) < 0 ) { |
| printf("error while configuring audio codec\n"); |
| |
| return -1; |
| } |
| } |
| |
| if ( recorder->setPreviewSurface( surfaceControl->getSurface() ) < 0 ) { |
| printf("error while configuring preview surface\n"); |
| |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int startRecording() { |
| if ( ( NULL == recorder.get() ) || ( NULL == camera.get() ) ) { |
| printf("invalid recorder and/or camera references\n"); |
| |
| return -1; |
| } |
| |
| camera->unlock(); |
| |
| if ( recorder->prepare() < 0 ) { |
| printf("recorder prepare failed\n"); |
| |
| return -1; |
| } |
| |
| if ( recorder->start() < 0 ) { |
| printf("recorder start failed\n"); |
| |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int stopRecording() { |
| if ( NULL == recorder.get() ) { |
| printf("invalid recorder reference\n"); |
| |
| return -1; |
| } |
| |
| if ( recorder->stop() < 0 ) { |
| printf("recorder failed to stop\n"); |
| |
| return -1; |
| } |
| |
| if ( 0 < videoFd ) { |
| close(videoFd); |
| } |
| |
| return 0; |
| } |
| |
| int openCamera() { |
| printf("openCamera(camera_index=%d)\n", camera_index); |
| camera = Camera::connect(camera_index); |
| |
| if ( NULL == camera.get() ) { |
| printf("Unable to connect to CameraService\n"); |
| printf("Retrying... \n"); |
| sleep(1); |
| camera = Camera::connect(camera_index); |
| |
| if ( NULL == camera.get() ) { |
| printf("Giving up!! \n"); |
| return -1; |
| } |
| } |
| |
| params = camera->getParameters(); |
| camera->setParameters(params.flatten()); |
| |
| camera->setListener(new CameraHandler()); |
| |
| hardwareActive = true; |
| |
| return 0; |
| } |
| |
| int closeCamera() { |
| if ( NULL == camera.get() ) { |
| printf("invalid camera reference\n"); |
| |
| return -1; |
| } |
| |
| camera->disconnect(); |
| camera.clear(); |
| |
| hardwareActive = false; |
| |
| return 0; |
| } |
| |
| int startPreview() { |
| int previewWidth, previewHeight; |
| if (reSizePreview) { |
| |
| if(recordingMode) |
| { |
| previewWidth = VcaptureSize[VcaptureSizeIDX].width; |
| previewHeight = VcaptureSize[VcaptureSizeIDX].height; |
| }else |
| { |
| previewWidth = previewSize[previewSizeIDX].width; |
| previewHeight = previewSize[previewSizeIDX].height; |
| } |
| |
| if ( createPreviewSurface(previewWidth, |
| previewHeight, |
| pixelformat[previewFormat].pixelFormatDesc) < 0 ) { |
| printf("Error while creating preview surface\n"); |
| return -1; |
| } |
| |
| if ( !hardwareActive ) { |
| openCamera(); |
| } |
| |
| params.setPreviewSize(previewWidth, previewHeight); |
| params.setPictureSize(captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height); |
| |
| camera->setParameters(params.flatten()); |
| camera->setPreviewDisplay(previewSurface); |
| |
| if(!hardwareActive) prevcnt = 0; |
| |
| camera->startPreview(); |
| |
| previewRunning = true; |
| reSizePreview = false; |
| |
| } |
| |
| return 0; |
| } |
| |
| void stopPreview() { |
| if ( hardwareActive ) { |
| camera->stopPreview(); |
| |
| destroyPreviewSurface(); |
| |
| previewRunning = false; |
| reSizePreview = true; |
| closeCamera(); |
| } |
| } |
| |
| void initDefaults() { |
| camera_index = 0; |
| antibanding_mode = 0; |
| focus_mode = 0; |
| fpsRangeIdx = 0; |
| previewSizeIDX = 1; /* Default resolution set to WVGA */ |
| captureSizeIDX = 3; /* Default capture resolution is 8MP */ |
| frameRateIDX = ARRAY_SIZE(fpsConstRanges) - 1; /* Default frame rate is 30 FPS */ |
| #if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) |
| VcaptureSizeIDX = ARRAY_SIZE(VcaptureSize) - 6;/* Default video record is WVGA */ |
| #else |
| VcaptureSizeIDX = ARRAY_SIZE(VcaptureSize) - 2;/* Default video record is WVGA */ |
| #endif |
| VbitRateIDX = ARRAY_SIZE(VbitRate) - 4; /*Default video bit rate is 4M */ |
| thumbSizeIDX = 0; |
| compensation = 0.0; |
| awb_mode = 0; |
| effects_mode = 0; |
| scene_mode = 0; |
| caf_mode = 0; |
| vnf_mode = 0; |
| vstab_mode = 0; |
| expBracketIdx = 0; |
| flashIdx = 0; |
| rotation = 0; |
| zoomIDX = 0; |
| videoCodecIDX = 0; |
| gbceIDX = 0; |
| glbceIDX = 0; |
| #ifdef TARGET_OMAP4 |
| ///Temporary fix until OMAP3 and OMAP4 3A values are synced |
| contrast = 90; |
| brightness = 50; |
| sharpness = 0; |
| saturation = 50; |
| #else |
| contrast = 100; |
| brightness = 100; |
| sharpness = 0; |
| saturation = 100; |
| #endif |
| iso_mode = 0; |
| capture_mode = 0; |
| exposure_mode = 0; |
| ippIDX = 0;//set the ipp to ldc-nsf as the capture mode is set to HQ by default |
| ippIDX_old = ippIDX; |
| jpegQuality = 85; |
| bufferStarvationTest = 0; |
| meter_mode = 0; |
| previewFormat = 1; |
| pictureFormat = 3; // jpeg |
| params.setPreviewSize(previewSize[previewSizeIDX].width, previewSize[previewSizeIDX].height); |
| params.setPictureSize(captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height); |
| params.set(CameraParameters::KEY_ROTATION, rotation); |
| params.set(KEY_COMPENSATION, (int) (compensation * 10)); |
| params.set(params.KEY_WHITE_BALANCE, strawb_mode[awb_mode]); |
| params.set(KEY_MODE, (capture[capture_mode])); |
| params.set(params.KEY_SCENE_MODE, scene[scene_mode]); |
| params.set(KEY_CAF, caf_mode); |
| params.set(KEY_ISO, iso_mode); |
| params.set(KEY_GBCE, gbce[gbceIDX]); |
| params.set(KEY_GLBCE, gbce[glbceIDX]); |
| params.set(KEY_SHARPNESS, sharpness); |
| params.set(KEY_CONTRAST, contrast); |
| params.set(CameraParameters::KEY_ZOOM, zoom[zoomIDX].idx); |
| params.set(KEY_EXPOSURE, exposure[exposure_mode]); |
| params.set(KEY_BRIGHTNESS, brightness); |
| params.set(KEY_SATURATION, saturation); |
| params.set(params.KEY_EFFECT, effects[effects_mode]); |
| params.setPreviewFrameRate(frameRate[ARRAY_SIZE(frameRate) - 1].fps); |
| params.set(params.KEY_ANTIBANDING, antibanding[antibanding_mode]); |
| params.set(params.KEY_FOCUS_MODE, focus[focus_mode]); |
| params.set(KEY_IPP, ipp_mode[ippIDX]); |
| params.set(CameraParameters::KEY_JPEG_QUALITY, jpegQuality); |
| params.setPreviewFormat(pixelformat[previewFormat].pixformat); |
| params.setPictureFormat(codingformat[pictureFormat]); |
| params.set(KEY_BUFF_STARV, bufferStarvationTest); //enable buffer starvation |
| params.set(KEY_METERING_MODE, metering[meter_mode]); |
| params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, previewSize[thumbSizeIDX].width); |
| params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, previewSize[thumbSizeIDX].height); |
| ManualConvergenceValuesIDX = ManualConvergenceDefaultValueIDX; |
| params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceValuesIDX]); |
| params.set(KEY_S3D2D_PREVIEW_MODE, "off"); |
| params.set(KEY_STEREO_CAMERA, "false"); |
| params.set(KEY_EXIF_MODEL, MODEL); |
| params.set(KEY_EXIF_MAKE, MAKE); |
| } |
| |
| int menu_gps() { |
| char ch; |
| char coord_str[100]; |
| |
| if (print_menu) { |
| printf("\n\n== GPS MENU ============================\n\n"); |
| printf(" e. Latitude: %.7lf\n", latitude); |
| printf(" d. Longitude: %.7lf\n", longitude); |
| printf(" c. Altitude: %.7lf\n", altitude); |
| printf("\n"); |
| printf(" q. Return to main menu\n"); |
| printf("\n"); |
| printf(" Choice: "); |
| } |
| |
| ch = getchar(); |
| printf("%c", ch); |
| |
| print_menu = 1; |
| |
| switch (ch) { |
| |
| case 'e': |
| 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 'd': |
| 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 'c': |
| altitude += 12345.67890123456789; |
| |
| if (altitude > 100000.0) { |
| altitude -= 200000.0; |
| } |
| |
| snprintf(coord_str, 100, "%.20lf", altitude); |
| params.set(params.KEY_GPS_ALTITUDE, coord_str); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'Q': |
| case 'q': |
| return -1; |
| |
| default: |
| print_menu = 0; |
| break; |
| } |
| |
| return 0; |
| } |
| |
| int functional_menu() { |
| char ch; |
| |
| if (print_menu) { |
| |
| printf("\n\n=========== FUNCTIONAL TEST MENU ===================\n\n"); |
| |
| printf(" \n\nSTART / STOP / GENERAL SERVICES \n"); |
| printf(" -----------------------------\n"); |
| printf(" A Select Camera %s\n", cameras[camera_index]); |
| printf(" [. Resume Preview after capture\n"); |
| printf(" 0. Reset to defaults\n"); |
| printf(" q. Quit\n"); |
| printf(" @. Disconnect and Reconnect to CameraService \n"); |
| printf(" /. Enable/Disable showfps: %s\n", ((showfps)? "Enabled":"Disabled")); |
| printf(" a. GEO tagging settings menu\n"); |
| printf(" E. Camera Capability Dump"); |
| |
| |
| printf(" \n\n PREVIEW SUB MENU \n"); |
| printf(" -----------------------------\n"); |
| printf(" 1. Start Preview\n"); |
| printf(" 2. Stop Preview\n"); |
| printf(" ~. Preview format %s\n", pixelformat[previewFormat].pixformat); |
| #if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) |
| printf(" 4. Preview size: %4d x %4d - %s\n",previewSize[previewSizeIDX].width, previewSize[previewSizeIDX].height, previewSize[previewSizeIDX].desc); |
| #else |
| printf(" 4. Preview size: %4d x %4d - %s\n",previewSize[previewSizeIDX].width, camera_index == 2 ? previewSize[previewSizeIDX].height*2 : previewSize[previewSizeIDX].height, previewSize[previewSizeIDX].desc); |
| #endif |
| printf(" R. Preview framerate range: %s\n", fpsRanges[fpsRangeIdx].rangeDescription); |
| printf(" &. Dump a preview frame\n"); |
| printf(" _. Auto Convergence mode: %s\n", autoconvergencemode[AutoConvergenceModeIDX]); |
| printf(" ^. Manual Convergence Value: %s\n", manualconvergencevalues[ManualConvergenceValuesIDX]); |
| printf(" {. 2D Preview in 3D Stereo Mode: %s\n", params.get(KEY_S3D2D_PREVIEW_MODE)); |
| |
| printf(" \n\n IMAGE CAPTURE SUB MENU \n"); |
| printf(" -----------------------------\n"); |
| printf(" p. Take picture/Full Press\n"); |
| printf(" H. Exposure Bracketing: %s\n", expBracketing[expBracketIdx]); |
| printf(" U. Temporal Bracketing: %s\n", tempBracketing[tempBracketIdx]); |
| printf(" W. Temporal Bracketing Range: [-%d;+%d]\n", tempBracketRange, tempBracketRange); |
| printf(" $. Picture Format: %s\n", codingformat[pictureFormat]); |
| printf(" 3. Picture Rotation: %3d degree\n", rotation ); |
| printf(" 5. Picture size: %4d x %4d - %s\n",captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height, captureSize[captureSizeIDX].name); |
| printf(" i. ISO mode: %s\n", iso[iso_mode]); |
| printf(" u. Capture Mode: %s\n", capture[capture_mode]); |
| printf(" k. IPP Mode: %s\n", ipp_mode[ippIDX]); |
| printf(" K. GBCE: %s\n", gbce[gbceIDX]); |
| printf(" O. GLBCE %s\n", gbce[glbceIDX]); |
| printf(" o. Jpeg Quality: %d\n", jpegQuality); |
| printf(" #. Burst Images: %3d\n", burst); |
| printf(" :. Thumbnail Size: %4d x %4d - %s\n",previewSize[thumbSizeIDX].width, previewSize[thumbSizeIDX].height, previewSize[thumbSizeIDX].desc); |
| printf(" ': Thumbnail Quality %d\n", thumbQuality); |
| |
| printf(" \n\n VIDEO CAPTURE SUB MENU \n"); |
| printf(" -----------------------------\n"); |
| |
| printf(" 6. Start Video Recording\n"); |
| printf(" 2. Stop Recording\n"); |
| printf(" l. Video Capture resolution: %4d x %4d - %s\n",VcaptureSize[VcaptureSizeIDX].width,VcaptureSize[VcaptureSizeIDX].height, VcaptureSize[VcaptureSizeIDX].desc); |
| printf(" ]. Video Bit rate : %s\n", VbitRate[VbitRateIDX].desc); |
| printf(" 9. Video Codec: %s\n", videoCodecs[videoCodecIDX].desc); |
| printf(" D. Audio Codec: %s\n", audioCodecs[audioCodecIDX].desc); |
| printf(" v. Output Format: %s\n", outputFormat[outputFormatIDX].desc); |
| |
| if (camera_index == 1) { |
| printf(" r. Framerate: %d\n", fpsConstRangesSec[frameRateIDXSec].constFramerate); |
| } |
| else { |
| printf(" r. Framerate: %d\n", fpsConstRanges[frameRateIDX].constFramerate); |
| } |
| printf(" *. Start Video Recording dump ( 1 raw frame ) \n"); |
| printf(" B VNF %s \n", vnf[vnf_mode]); |
| printf(" C VSTAB %s", vstab[vstab_mode]); |
| |
| printf(" \n\n 3A SETTING SUB MENU \n"); |
| printf(" -----------------------------\n"); |
| |
| printf(" M. Measurement Data: %s\n", measurement[measurementIdx]); |
| printf(" F. Start face detection \n"); |
| printf(" T. Stop face detection \n"); |
| printf(" G. Touch/Focus area AF\n"); |
| printf(" f. Auto Focus/Half Press\n"); |
| printf(" J.Flash: %s\n", flashModes[flashIdx]); |
| printf(" 7. EV offset: %4.1f\n", compensation); |
| printf(" 8. AWB mode: %s\n", strawb_mode[awb_mode]); |
| printf(" z. Zoom %s\n", zoom[zoomIDX].zoom_description); |
| printf(" j. Exposure %s\n", exposure[exposure_mode]); |
| printf(" e. Effect: %s\n", effects[effects_mode]); |
| printf(" w. Scene: %s\n", scene[scene_mode]); |
| printf(" s. Saturation: %d\n", saturation); |
| printf(" c. Contrast: %d\n", contrast); |
| printf(" h. Sharpness: %d\n", sharpness); |
| printf(" b. Brightness: %d\n", brightness); |
| printf(" x. Antibanding: %s\n", antibanding[antibanding_mode]); |
| printf(" g. Focus mode: %s\n", focus[focus_mode]); |
| printf(" m. Metering mode: %s\n" , metering[meter_mode]); |
| printf(" <. Exposure Lock: %s\n", lock[elockidx]); |
| printf(" >. WhiteBalance Lock: %s\n",lock[wblockidx]); |
| printf("\n"); |
| printf(" Choice: "); |
| } |
| |
| ch = getchar(); |
| printf("%c", ch); |
| |
| print_menu = 1; |
| |
| switch (ch) { |
| |
| case '_': |
| AutoConvergenceModeIDX++; |
| AutoConvergenceModeIDX %= ARRAY_SIZE(autoconvergencemode); |
| params.set(KEY_AUTOCONVERGENCE, autoconvergencemode[AutoConvergenceModeIDX]); |
| if ( strcmp (autoconvergencemode[AutoConvergenceModeIDX], AUTOCONVERGENCE_MODE_MANUAL) == 0) { |
| params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceValuesIDX]); |
| } |
| else { |
| params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceDefaultValueIDX]); |
| ManualConvergenceValuesIDX = ManualConvergenceDefaultValueIDX; |
| } |
| camera->setParameters(params.flatten()); |
| |
| break; |
| case '^': |
| if ( strcmp (autoconvergencemode[AutoConvergenceModeIDX], AUTOCONVERGENCE_MODE_MANUAL) == 0) { |
| ManualConvergenceValuesIDX++; |
| ManualConvergenceValuesIDX %= ARRAY_SIZE(manualconvergencevalues); |
| params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceValuesIDX]); |
| camera->setParameters(params.flatten()); |
| } |
| break; |
| case 'A': |
| camera_index++; |
| camera_index %= ARRAY_SIZE(cameras); |
| if ( camera_index == 2) { |
| params.set(KEY_STEREO_CAMERA, "true"); |
| } else { |
| params.set(KEY_STEREO_CAMERA, "false"); |
| } |
| closeCamera(); |
| |
| openCamera(); |
| |
| if (camera_index == 0) { |
| params.setPreviewFrameRate(30); |
| } else { |
| params.setPreviewFrameRate(27); |
| } |
| |
| |
| break; |
| case '[': |
| if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| camera->startPreview(); |
| } |
| break; |
| |
| case '0': |
| initDefaults(); |
| break; |
| |
| case '1': |
| |
| if ( startPreview() < 0 ) { |
| printf("Error while starting preview\n"); |
| |
| return -1; |
| } |
| |
| break; |
| |
| case '2': |
| stopPreview(); |
| |
| if ( recordingMode ) { |
| camera->disconnect(); |
| camera.clear(); |
| stopRecording(); |
| closeRecorder(); |
| |
| 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; |
| } |
| |
| break; |
| |
| case '3': |
| rotation += 90; |
| rotation %= 360; |
| params.set(CameraParameters::KEY_ROTATION, rotation); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case '4': |
| previewSizeIDX += 1; |
| previewSizeIDX %= ARRAY_SIZE(previewSize); |
| if ( NULL != params.get(KEY_STEREO_CAMERA) ) { |
| if ( strcmp(params.get(KEY_STEREO_CAMERA), "false") == 0 ) { |
| params.setPreviewSize(previewSize[previewSizeIDX].width, previewSize[previewSizeIDX].height); |
| } else { |
| params.setPreviewSize(previewSize[previewSizeIDX].width, previewSize[previewSizeIDX].height*2); |
| } |
| } |
| reSizePreview = true; |
| |
| if ( hardwareActive && previewRunning ) { |
| camera->stopPreview(); |
| camera->setParameters(params.flatten()); |
| camera->startPreview(); |
| } else if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| |
| break; |
| |
| case '5': |
| captureSizeIDX += 1; |
| captureSizeIDX %= ARRAY_SIZE(captureSize); |
| params.setPictureSize(captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'l': |
| case 'L': |
| VcaptureSizeIDX++; |
| VcaptureSizeIDX %= ARRAY_SIZE(VcaptureSize); |
| break; |
| |
| case ']': |
| VbitRateIDX++; |
| VbitRateIDX %= ARRAY_SIZE(VbitRate); |
| 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': |
| |
| if ( compensation > 2.0) { |
| compensation = -2.0; |
| } else { |
| compensation += 0.1; |
| } |
| |
| params.set(KEY_COMPENSATION, (int) (compensation * 10)); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case '8': |
| awb_mode++; |
| awb_mode %= ARRAY_SIZE(strawb_mode); |
| params.set(params.KEY_WHITE_BALANCE, strawb_mode[awb_mode]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case '9': |
| videoCodecIDX++; |
| videoCodecIDX %= ARRAY_SIZE(videoCodecs); |
| break; |
| case '~': |
| previewFormat += 1; |
| previewFormat %= ARRAY_SIZE(pixelformat) - 1; |
| params.setPreviewFormat(pixelformat[previewFormat].pixformat); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| case '$': |
| pictureFormat += 1; |
| if ( NULL != params.get(KEY_STEREO_CAMERA) ) { |
| if ( strcmp(params.get(KEY_STEREO_CAMERA), "false") == 0 && pictureFormat > 4 ) |
| pictureFormat = 0; |
| } |
| pictureFormat %= ARRAY_SIZE(codingformat); |
| params.setPictureFormat(codingformat[pictureFormat]); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case '?' : |
| ///Set mode=3 to select video mode |
| params.set(KEY_MODE, 3); |
| params.set(KEY_VNF, 1); |
| params.set(KEY_VSTAB, 1); |
| break; |
| |
| case ':': |
| thumbSizeIDX += 1; |
| thumbSizeIDX %= ARRAY_SIZE(previewSize); |
| params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, previewSize[thumbSizeIDX].width); |
| params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, previewSize[thumbSizeIDX].height); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case '\'': |
| if ( thumbQuality >= 100) { |
| thumbQuality = 0; |
| } else { |
| thumbQuality += 5; |
| } |
| |
| params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, thumbQuality); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'B' : |
| vnf_mode++; |
| vnf_mode %= ARRAY_SIZE(vnf); |
| params.set(KEY_VNF, vnf_mode); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'C' : |
| vstab_mode++; |
| vstab_mode %= ARRAY_SIZE(vstab); |
| params.set(KEY_VSTAB, vstab_mode); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'E': |
| if(hardwareActive) |
| params.unflatten(camera->getParameters()); |
| printSupportedParams(); |
| break; |
| |
| case '*': |
| if ( hardwareActive ) |
| camera->startRecording(); |
| break; |
| |
| case 'o': |
| if ( jpegQuality >= 100) { |
| jpegQuality = 0; |
| } else { |
| jpegQuality += 5; |
| } |
| |
| params.set(CameraParameters::KEY_JPEG_QUALITY, jpegQuality); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'M': |
| measurementIdx = (measurementIdx + 1)%ARRAY_SIZE(measurement); |
| params.set(KEY_MEASUREMENT, measurement[measurementIdx]); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| case 'm': |
| { |
| meter_mode = (meter_mode + 1)%ARRAY_SIZE(metering); |
| params.set(KEY_METERING_MODE, metering[meter_mode]); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| } |
| |
| case 'k': |
| ippIDX += 1; |
| ippIDX %= ARRAY_SIZE(ipp_mode); |
| ippIDX_old = ippIDX; |
| |
| params.set(KEY_IPP, ipp_mode[ippIDX]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'K': |
| gbceIDX+= 1; |
| gbceIDX %= ARRAY_SIZE(gbce); |
| params.set(KEY_GBCE, gbce[gbceIDX]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'O': |
| glbceIDX+= 1; |
| glbceIDX %= ARRAY_SIZE(gbce); |
| params.set(KEY_GLBCE, gbce[glbceIDX]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'F': |
| if ( hardwareActive ) |
| camera->sendCommand(CAMERA_CMD_START_FACE_DETECTION, 0, 0); |
| |
| break; |
| |
| case 'T': |
| |
| if ( hardwareActive ) |
| camera->sendCommand(CAMERA_CMD_STOP_FACE_DETECTION, 0, 0); |
| |
| break; |
| |
| case '@': |
| if ( hardwareActive ) { |
| |
| closeCamera(); |
| |
| if ( 0 >= openCamera() ) { |
| printf( "Reconnected to CameraService \n"); |
| } |
| } |
| |
| break; |
| |
| case '#': |
| |
| if ( burst >= MAX_BURST ) { |
| burst = 0; |
| } else { |
| burst += BURST_INC; |
| } |
| params.set(KEY_BURST, burst); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'J': |
| flashIdx++; |
| flashIdx %= ARRAY_SIZE(flashModes); |
| params.set(CameraParameters::KEY_FLASH_MODE, (flashModes[flashIdx])); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'u': |
| capture_mode++; |
| capture_mode %= ARRAY_SIZE(capture); |
| |
| // HQ should always be in ldc-nsf |
| // if not HQ, then return the ipp to its previous state |
| if( !strcmp(capture[capture_mode], "high-quality") ) { |
| ippIDX_old = ippIDX; |
| ippIDX = 3; |
| params.set(KEY_IPP, ipp_mode[ippIDX]); |
| } else { |
| ippIDX = ippIDX_old; |
| } |
| |
| params.set(KEY_MODE, (capture[capture_mode])); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'U': |
| tempBracketIdx++; |
| tempBracketIdx %= ARRAY_SIZE(tempBracketing); |
| params.set(KEY_TEMP_BRACKETING, tempBracketing[tempBracketIdx]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'H': |
| expBracketIdx++; |
| expBracketIdx %= ARRAY_SIZE(expBracketing); |
| |
| params.set(KEY_EXP_BRACKETING_RANGE, expBracketingRange[expBracketIdx]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'W': |
| tempBracketRange++; |
| 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 'w': |
| scene_mode++; |
| scene_mode %= ARRAY_SIZE(scene); |
| params.set(params.KEY_SCENE_MODE, scene[scene_mode]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'i': |
| iso_mode++; |
| iso_mode %= ARRAY_SIZE(iso); |
| params.set(KEY_ISO, iso[iso_mode]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'h': |
| if ( sharpness >= 100) { |
| sharpness = 0; |
| } else { |
| sharpness += 10; |
| } |
| params.set(KEY_SHARPNESS, sharpness); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'D': |
| { |
| audioCodecIDX++; |
| audioCodecIDX %= ARRAY_SIZE(audioCodecs); |
| break; |
| } |
| |
| case 'v': |
| { |
| outputFormatIDX++; |
| outputFormatIDX %= ARRAY_SIZE(outputFormat); |
| break; |
| } |
| |
| case 'z': |
| zoomIDX++; |
| zoomIDX %= ARRAY_SIZE(zoom); |
| params.set(CameraParameters::KEY_ZOOM, zoom[zoomIDX].idx); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'j': |
| exposure_mode++; |
| exposure_mode %= ARRAY_SIZE(exposure); |
| params.set(KEY_EXPOSURE, exposure[exposure_mode]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'c': |
| if( contrast >= 200){ |
| contrast = 0; |
| } else { |
| contrast += 10; |
| } |
| params.set(KEY_CONTRAST, contrast); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| case 'b': |
| if ( brightness >= 200) { |
| brightness = 0; |
| } else { |
| brightness += 10; |
| } |
| |
| params.set(KEY_BRIGHTNESS, brightness); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 's': |
| case 'S': |
| if ( saturation >= 100) { |
| saturation = 0; |
| } else { |
| saturation += 10; |
| } |
| |
| params.set(KEY_SATURATION, saturation); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'e': |
| effects_mode++; |
| effects_mode %= ARRAY_SIZE(effects); |
| params.set(params.KEY_EFFECT, effects[effects_mode]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'r': |
| |
| |
| if (camera_index == 0) { |
| frameRateIDX += 1; |
| frameRateIDX %= ARRAY_SIZE(fpsConstRanges); |
| params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsConstRanges[frameRateIDX].range); |
| } else |
| { |
| frameRateIDXSec += 1; |
| frameRateIDXSec %= ARRAY_SIZE(fpsConstRangesSec); |
| params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsConstRangesSec[frameRateIDXSec].range); |
| |
| |
| } |
| |
| if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| |
| break; |
| |
| case 'R': |
| fpsRangeIdx += 1; |
| fpsRangeIdx %= ARRAY_SIZE(fpsRanges); |
| params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsRanges[fpsRangeIdx].range); |
| |
| if ( hardwareActive ) { |
| camera->setParameters(params.flatten()); |
| } |
| |
| break; |
| |
| case 'x': |
| antibanding_mode++; |
| antibanding_mode %= ARRAY_SIZE(antibanding); |
| params.set(params.KEY_ANTIBANDING, antibanding[antibanding_mode]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'g': |
| focus_mode++; |
| focus_mode %= ARRAY_SIZE(focus); |
| params.set(params.KEY_FOCUS_MODE, focus[focus_mode]); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| break; |
| |
| case 'G': |
| |
| params.set(CameraParameters::KEY_FOCUS_AREAS, TEST_FOCUS_AREA); |
| |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| |
| params.remove(CameraParameters::KEY_FOCUS_AREAS); |
| |
| case 'f': |
| |
| gettimeofday(&autofocus_start, 0); |
| |
| if ( hardwareActive ) |
| camera->autoFocus(); |
| |
| break; |
| |
| case 'p': |
| |
| gettimeofday(&picture_start, 0); |
| |
| if ( hardwareActive ) |
| camera->takePicture(CAMERA_MSG_COMPRESSED_IMAGE|CAMERA_MSG_RAW_IMAGE); |
| |
| break; |
| |
| case '&': |
| printf("Enabling Preview Callback"); |
| dump_preview = 1; |
| if ( hardwareActive ) |
| camera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_ENABLE_MASK); |
| break; |
| |
| case '{': |
| if ( strcmp(params.get(KEY_S3D2D_PREVIEW_MODE), "off") == 0 ) |
| { |
| params.set(KEY_S3D2D_PREVIEW_MODE, "on"); |
| } |
| else |
| { |
| params.set(KEY_S3D2D_PREVIEW_MODE, "off"); |
| } |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case 'a': |
| |
| while (1) { |
| if ( menu_gps() < 0) |
| break; |
| }; |
| |
| break; |
| |
| case 'q': |
| |
| stopPreview(); |
| |
| return -1; |
| |
| case '/': |
| { |
| if (showfps) |
| { |
| property_set("debug.image.showfps", "0"); |
| showfps = false; |
| } |
| else |
| { |
| property_set("debug.image.showfps", "1"); |
| showfps = true; |
| } |
| break; |
| } |
| |
| case '<': |
| elockidx += 1; |
| elockidx %= ARRAY_SIZE(lock); |
| params.set(KEY_AUTO_EXPOSURE_LOCK, lock[elockidx]); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| case '>': |
| wblockidx += 1; |
| wblockidx %= ARRAY_SIZE(lock); |
| params.set(KEY_AUTO_WHITEBALANCE_LOCK, lock[wblockidx]); |
| if ( hardwareActive ) |
| camera->setParameters(params.flatten()); |
| break; |
| |
| default: |
| print_menu = 0; |
| |
| break; |
| } |
| |
| return 0; |
| } |
| |
| void print_usage() { |
| printf(" USAGE: camera_test <param> <script>\n"); |
| printf(" <param>\n-----------\n\n"); |
| printf(" F or f -> Functional tests \n"); |
| printf(" A or a -> API tests \n"); |
| printf(" E or e -> Error scenario tests \n"); |
| printf(" S or s -> Stress tests; with syslink trace \n"); |
| printf(" SN or sn -> Stress tests; No syslink trace \n\n"); |
| printf(" <script>\n----------\n"); |
| printf("Script name (Only for stress tests)\n\n"); |
| return; |
| } |
| |
| int error_scenario() { |
| char ch; |
| status_t stat = NO_ERROR; |
| |
| if (print_menu) { |
| printf(" 0. Buffer need\n"); |
| printf(" 1. Not enough memory\n"); |
| printf(" 2. Media server crash\n"); |
| printf(" 3. Overlay object request\n"); |
| printf(" 4. Pass unsupported preview&picture format\n"); |
| printf(" 5. Pass unsupported preview&picture resolution\n"); |
| printf(" 6. Pass unsupported preview framerate\n"); |
| |
| printf(" q. Quit\n"); |
| printf(" Choice: "); |
| } |
| |
| print_menu = 1; |
| ch = getchar(); |
| printf("%c\n", ch); |
| |
| switch (ch) { |
| case '0': { |
| printf("Case0:Buffer need\n"); |
| 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': { |
| printf("Case1:Not enough memory\n"); |
| int* tMemoryEater = new int[999999999]; |
| |
| if (!tMemoryEater) { |
| printf("Not enough memory\n"); |
| return -1; |
| } else { |
| delete tMemoryEater; |
| } |
| |
| break; |
| } |
| |
| case '2': { |
| printf("Case2:Media server crash\n"); |
| //camera = Camera::connect(); |
| |
| if ( NULL == camera.get() ) { |
| printf("Unable to connect to CameraService\n"); |
| return -1; |
| } |
| |
| break; |
| } |
| |
| case '3': { |
| printf("Case3:Overlay object request\n"); |
| 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': { |
| return -1; |
| } |
| |
| default: { |
| print_menu = 0; |
| break; |
| } |
| } |
| |
| return 0; |
| } |
| |
| int restartCamera() { |
| |
| const char dir_path_name[80] = SDCARD_PATH; |
| |
| printf("+++Restarting Camera After Error+++\n"); |
| stopPreview(); |
| |
| if (recordingMode) { |
| stopRecording(); |
| closeRecorder(); |
| |
| recordingMode = false; |
| } |
| |
| sleep(3); //Wait a bit before restarting |
| |
| restartCount++; |
| |
| if (strcpy(dir_path, dir_path_name) == NULL) |
| { |
| printf("Error reseting dir name"); |
| return -1; |
| } |
| |
| if ( openCamera() < 0 ) |
| { |
| printf("+++Camera Restarted Failed+++\n"); |
| system("echo camerahal_test > /sys/power/wake_unlock"); |
| return -1; |
| } |
| |
| initDefaults(); |
| |
| stopScript = false; |
| |
| printf("+++Camera Restarted Successfully+++\n"); |
| return 0; |
| } |
| |
| int main(int argc, char *argv[]) { |
| char *cmd; |
| int pid; |
| sp<ProcessState> proc(ProcessState::self()); |
| |
| unsigned long long st, end, delay; |
| timeval current_time; |
| |
| gettimeofday(¤t_time, 0); |
| |
| st = current_time.tv_sec * 1000000 + current_time.tv_usec; |
| |
| cmd = NULL; |
| |
| if ( argc < 2 ) { |
| printf(" Please enter atleast 1 argument\n"); |
| print_usage(); |
| |
| return 0; |
| } |
| system("echo camerahal_test > /sys/power/wake_lock"); |
| if ( argc < 3 ) { |
| switch (*argv[1]) { |
| case 'S': |
| case 's': |
| printf("This is stress / regression tests \n"); |
| printf("Provide script file as 2nd argument\n"); |
| |
| break; |
| |
| case 'F': |
| case 'f': |
| ProcessState::self()->startThreadPool(); |
| |
| if ( openCamera() < 0 ) { |
| printf("Camera initialization failed\n"); |
| system("echo camerahal_test > /sys/power/wake_unlock"); |
| return -1; |
| } |
| |
| initDefaults(); |
| print_menu = 1; |
| |
| while ( 1 ) { |
| if ( functional_menu() < 0 ) |
| break; |
| }; |
| |
| break; |
| |
| case 'A': |
| case 'a': |
| printf("API level test cases coming soon ... \n"); |
| |
| break; |
| |
| case 'E': |
| case 'e': { |
| ProcessState::self()->startThreadPool(); |
| |
| if ( openCamera() < 0 ) { |
| printf("Camera initialization failed\n"); |
| system("echo camerahal_test > /sys/power/wake_unlock"); |
| return -1; |
| } |
| |
| initDefaults(); |
| print_menu = 1; |
| |
| while (1) { |
| if (error_scenario() < 0) { |
| break; |
| } |
| } |
| |
| break; |
| } |
| |
| default: |
| printf("INVALID OPTION USED\n"); |
| print_usage(); |
| |
| break; |
| } |
| } else if ( ( argc == 3) && ( ( *argv[1] == 'S' ) || ( *argv[1] == 's') ) ) { |
| |
| if((argv[1][1] == 'N') || (argv[1][1] == 'n')) { |
| bLogSysLinkTrace = false; |
| } |
| |
| ProcessState::self()->startThreadPool(); |
| |
| if ( openCamera() < 0 ) { |
| printf("Camera initialization failed\n"); |
| system("echo camerahal_test > /sys/power/wake_unlock"); |
| return -1; |
| } |
| |
| initDefaults(); |
| |
| cmd = load_script(argv[2]); |
| |
| if ( cmd != NULL) { |
| start_logging(argv[2], pid); |
| stressTest = true; |
| |
| while (1) |
| { |
| if ( execute_functional_script(cmd) == 0 ) |
| { |
| break; |
| } |
| else |
| { |
| printf("CameraTest Restarting Camera...\n"); |
| |
| free(cmd); |
| cmd = NULL; |
| |
| if ( (restartCamera() != 0) || ((cmd = load_script(argv[2])) == NULL) ) |
| { |
| printf("ERROR::CameraTest Restarting Camera...\n"); |
| break; |
| } |
| } |
| } |
| free(cmd); |
| stop_logging(pid); |
| } |
| } else if ( ( argc == 3) && ( ( *argv[1] == 'E' ) || ( *argv[1] == 'e') ) ) { |
| |
| ProcessState::self()->startThreadPool(); |
| |
| if ( openCamera() < 0 ) { |
| printf("Camera initialization failed\n"); |
| system("echo camerahal_test > /sys/power/wake_unlock"); |
| return -1; |
| } |
| |
| initDefaults(); |
| |
| cmd = load_script(argv[2]); |
| |
| if ( cmd != NULL) { |
| start_logging(argv[2], pid); |
| execute_error_script(cmd); |
| free(cmd); |
| stop_logging(pid); |
| } |
| |
| } else { |
| printf("INVALID OPTION USED\n"); |
| print_usage(); |
| } |
| |
| gettimeofday(¤t_time, 0); |
| end = current_time.tv_sec * 1000000 + current_time.tv_usec; |
| delay = end - st; |
| printf("Application clossed after: %llu ms\n", delay); |
| system("echo camerahal_test > /sys/power/wake_unlock"); |
| return 0; |
| } |
| |