1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdlib.h> 2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <unistd.h> 3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <sys/types.h> 4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <sys/stat.h> 5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <fcntl.h> 6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <time.h> 7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <semaphore.h> 8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <pthread.h> 9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 10d502c430fba913cf87831c028c87b044e1e412d2Mathias Agopian#include <gui/Surface.h> 11d502c430fba913cf87831c028c87b044e1e412d2Mathias Agopian#include <gui/SurfaceComposerClient.h> 12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <camera/Camera.h> 14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <camera/ICamera.h> 15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <media/mediarecorder.h> 16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <binder/IPCThreadState.h> 18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <binder/ProcessState.h> 19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <binder/IServiceManager.h> 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <cutils/properties.h> 21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <camera/CameraParameters.h> 22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <system/audio.h> 23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <system/camera.h> 24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <cutils/memory.h> 26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <utils/Log.h> 27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <sys/wait.h> 29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "camera_test.h" 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevusing namespace android; 33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint camera_index = 0; 35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint print_menu; 36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsp<Camera> camera; 37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsp<MediaRecorder> recorder; 38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsp<SurfaceComposerClient> client; 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsp<SurfaceControl> surfaceControl; 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsp<Surface> previewSurface; 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCameraParameters params; 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevfloat compensation = 0.0; 43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevdouble latitude = 0.0; 44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevdouble longitude = 0.0; 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevdouble degree_by_step = 17.5609756;//..0975609756097; 46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevdouble altitude = 0.0; 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint awb_mode = 0; 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint effects_mode = 0; 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint scene_mode = 0; 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint caf_mode = 0; 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint vnf_mode = 0; 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint vstab_mode = 0; 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint tempBracketRange = 1; 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint tempBracketIdx = 0; 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint measurementIdx = 0; 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint expBracketIdx = 0; 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint AutoConvergenceModeIDX = 0; 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint ManualConvergenceValuesIDX = 0; 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint ManualConvergenceDefaultValueIDX = 2; 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint gbceIDX = 0; 62934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Ramanint glbceIDX = 0; 63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint rotation = 0; 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevbool reSizePreview = true; 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevbool hardwareActive = false; 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevbool recordingMode = false; 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevbool previewRunning = false; 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint saturation = 0; 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint zoomIDX = 0; 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint videoCodecIDX = 0; 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint audioCodecIDX = 0; 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint outputFormatIDX = 0; 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint contrast = 0; 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint brightness = 0; 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevunsigned int burst = 0; 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint sharpness = 0; 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint iso_mode = 0; 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint capture_mode = 0; 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint exposure_mode = 0; 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint ippIDX = 0; 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint ippIDX_old = 0; 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint previewFormat = 0; 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint jpegQuality = 85; 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint thumbQuality = 85; 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint flashIdx = 0; 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint fpsRangeIdx = 0; 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtimeval autofocus_start, picture_start; 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevchar script_name[80]; 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint prevcnt = 0; 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint videoFd = -1; 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint elockidx = 0; 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint wblockidx = 0; 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevchar dir_path[80] = SDCARD_PATH; 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *cameras[] = {"Primary Camera", "Secondary Camera 1", "Stereo Camera", "USB Camera", "Fake Camera"}; 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *measurement[] = {"disable", "enable"}; 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *expBracketing[] = {"disable", "enable"}; 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *expBracketingRange[] = {"", "-30,0,30,0,-30"}; 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *tempBracketing[] = {"disable", "enable"}; 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *faceDetection[] = {"disable", "enable"}; 103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *lock[] = {"false", "true"}; 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) 106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *ipp_mode[] = { "off", "Chroma Suppression", "Edge Enhancement" }; 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *ipp_mode[] = { "off", "ldc", "nsf", "ldc-nsf" }; 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *iso [] = { "auto", "100", "200", "400", "800", "1200", "1600"}; 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *effects [] = { 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "none", 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "mono", 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "negative", 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "solarize", 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "sepia", 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "whiteboard", 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "blackboard", 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "cool", 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "emboss" 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "none", 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "mono", 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "negative", 128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "solarize", 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "sepia", 130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "vivid", 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "whiteboard", 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "blackboard", 133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "cool", 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "emboss", 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "blackwhite", 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "aqua", 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "posterize" 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char CameraParameters::FLASH_MODE_OFF[] = "off"; 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char CameraParameters::FLASH_MODE_AUTO[] = "auto"; 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char CameraParameters::FLASH_MODE_ON[] = "on"; 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char CameraParameters::FLASH_MODE_RED_EYE[] = "red-eye"; 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char CameraParameters::FLASH_MODE_TORCH[] = "torch"; 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *flashModes[] = { 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "off", 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "auto", 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "on", 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "red-eye", 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "torch", 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "fill-in", 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *caf [] = { "Off", "On" }; 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *vnf [] = { "Off", "On" }; 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *vstab [] = { "Off", "On" }; 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *scene [] = { 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "auto", 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "portrait", 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "landscape", 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "night", 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "night-portrait", 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "fireworks", 169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "snow", 170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "action", 171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else 172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "auto", 173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "portrait", 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "landscape", 175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "night", 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "night-portrait", 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "night-indoor", 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "fireworks", 179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "sport", 180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "cine", 181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "beach", 182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "snow", 183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "mood", 184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "closeup", 185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "underwater", 186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "document", 187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "barcode", 188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "oldfilm", 189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "candlelight", 190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "party", 191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "steadyphoto", 192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "sunset", 193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "action", 194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "theatre" 195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *strawb_mode[] = { 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "auto", 199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "incandescent", 200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "fluorescent", 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "daylight", 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "horizon", 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "shadow", 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "tungsten", 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "shade", 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "twilight", 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "warm-fluorescent", 208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "facepriority", 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "sunset" 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t length_cam = ARRAY_SIZE(cameras); 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpreview_size previewSize [] = { 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 0, 0, "NULL"}, 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 128, 96, "SQCIF" }, 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 176, 144, "QCIF" }, 219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 352, 288, "CIF" }, 220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 320, 240, "QVGA" }, 221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 352, 288, "CIF" }, 222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 640, 480, "VGA" }, 223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 720, 480, "NTSC" }, 224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 720, 576, "PAL" }, 225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 800, 480, "WVGA" }, 226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 848, 480, "WVGA2"}, 227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 864, 480, "WVGA3"}, 228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 992, 560, "WVGA4"}, 229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1280, 720, "HD" }, 230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1920, 1080, "FULLHD"}, 231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t length_previewSize = ARRAY_SIZE(previewSize); 234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevVcapture_size VcaptureSize [] = { 236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 128, 96, "SQCIF" }, 237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 176, 144, "QCIF" }, 238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 352, 288, "CIF" }, 239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 320, 240, "QVGA" }, 240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 640, 480, "VGA" }, 241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 704, 480, "TVNTSC" }, 242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 704, 576, "TVPAL" }, 243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 720, 480, "D1NTSC" }, 244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 720, 576, "D1PAL" }, 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 800, 480, "WVGA" }, 246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev #if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) 247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 848, 480, "WVGA2"}, 248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 864, 480, "WVGA3"}, 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 992, 560, "WVGA4"}, 250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev #endif 251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1280, 720, "HD" }, 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1920, 1080, "FULLHD"}, 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t lenght_Vcapture_size = ARRAY_SIZE(VcaptureSize); 256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevcapture_Size captureSize[] = { 258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 320, 240, "QVGA" }, 259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 640, 480, "VGA" }, 260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 800, 600, "SVGA" }, 261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1152, 864, "1MP" }, 262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1280, 1024, "1.3MP" }, 263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1600, 1200, "2MP" }, 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2048, 1536, "3MP" }, 265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2592, 1944, "5MP" }, 266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2608, 1960, "5MP" }, 267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 3264, 2448, "8MP" }, 268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 3648, 2736, "10MP"}, 269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 4032, 3024, "12MP"}, 270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t length_capture_Size = ARRAY_SIZE(captureSize); 273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevoutformat outputFormat[] = { 276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { OUTPUT_FORMAT_THREE_GPP, "3gp" }, 277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { OUTPUT_FORMAT_MPEG_4, "mp4" }, 278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t length_outformat = ARRAY_SIZE(outputFormat); 281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvideo_Codecs videoCodecs[] = { 283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { VIDEO_ENCODER_H263, "H263" }, 284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { VIDEO_ENCODER_H264, "H264" }, 285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { VIDEO_ENCODER_MPEG_4_SP, "MPEG4"} 286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t length_video_Codecs = ARRAY_SIZE(videoCodecs); 289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevaudio_Codecs audioCodecs[] = { 291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { AUDIO_ENCODER_AMR_NB, "AMR_NB" }, 292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { AUDIO_ENCODER_AMR_WB, "AMR_WB" }, 293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { AUDIO_ENCODER_AAC, "AAC" }, 294180113a6240e8cabbcb8df10f70e7c43334d9c43Dave Burke { AUDIO_ENCODER_HE_AAC, "AAC+" }, 2958dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu { AUDIO_ENCODER_LIST_END, "disabled"}, 296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t length_audio_Codecs = ARRAY_SIZE(audioCodecs); 299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevV_bitRate VbitRate[] = { 301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 64000, "64K" }, 302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 128000, "128K" }, 303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 192000, "192K" }, 304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 240000, "240K" }, 305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 320000, "320K" }, 306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 360000, "360K" }, 307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 384000, "384K" }, 308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 420000, "420K" }, 309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 768000, "768K" }, 310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1000000, "1M" }, 311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1500000, "1.5M" }, 312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2000000, "2M" }, 313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 4000000, "4M" }, 314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 6000000, "6M" }, 315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 8000000, "8M" }, 316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 10000000, "10M" }, 317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t length_V_bitRate = ARRAY_SIZE(VbitRate); 320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevZoom zoom[] = { 322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 0, "1x" }, 323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 12, "1.5x"}, 324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 20, "2x" }, 325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 27, "2.5x"}, 326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 32, "3x" }, 327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 36, "3.5x"}, 328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 40, "4x" }, 329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 60, "8x" }, 330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t length_Zoom = ARRAY_SIZE(zoom); 333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevfps_ranges fpsRanges[] = { 335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "5000,30000", "[5:30]" }, 336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "5000,10000", "[5:10]" }, 337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "5000,15000", "[5:15]" }, 338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "5000,20000", "[5:20]" }, 339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t length_fps_ranges = ARRAY_SIZE(fpsRanges); 342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevfpsConst_Ranges fpsConstRanges[] = { 344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "5000,5000", "[5:5]", 5 }, 345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "10000,10000", "[10:10]", 10 }, 346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "15000,15000", "[15:15]", 15 }, 347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "20000,20000", "[20:20]", 20 }, 348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "25000,25000", "[25:25]", 25 }, 349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "30000,30000", "[30:30]", 30 }, 350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t length_fpsConst_Ranges = ARRAY_SIZE(fpsConstRanges); 353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevfpsConst_RangesSec fpsConstRangesSec[] = { 355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "5000,5000", "[5:5]", 5 }, 356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "10000,10000", "[10:10]", 10 }, 357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "15000,15000", "[15:15]", 15 }, 358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "20000,20000", "[20:20]", 20 }, 359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "25000,25000", "[25:25]", 25 }, 360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { "27000,27000", "[27:27]", 27 }, 361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevsize_t length_fpsConst_RangesSec = ARRAY_SIZE(fpsConstRangesSec); 364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *antibanding[] = { 366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "off", 367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "auto", 368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "50hz", 369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "60hz", 370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint antibanding_mode = 0; 372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *focus[] = { 373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "auto", 374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "infinity", 375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "macro", 376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "continuous-video", 377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "extended", 378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "portrait", 379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint focus_mode = 0; 381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevpixel_format pixelformat[] = { 382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { HAL_PIXEL_FORMAT_YCbCr_422_I, CameraParameters::PIXEL_FORMAT_YUV422I }, 383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { HAL_PIXEL_FORMAT_YCrCb_420_SP, CameraParameters::PIXEL_FORMAT_YUV420SP }, 384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { HAL_PIXEL_FORMAT_RGB_565, CameraParameters::PIXEL_FORMAT_RGB565 }, 385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { -1, CameraParameters::PIXEL_FORMAT_JPEG }, 386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { -1, "raw" }, 387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *codingformat[] = {"yuv422i-yuyv", "yuv420sp", "rgb565", "jpeg", "raw", "jps", "mpo", "raw+jpeg", "raw+mpo"}; 390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *gbce[] = {"disable", "enable"}; 391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint pictureFormat = 3; // jpeg 392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *exposure[] = {"auto", "macro", "portrait", "landscape", "sports", "night", "night-portrait", "backlighting", "manual"}; 393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *capture[] = { "high-performance", "high-quality", "video-mode" }; 394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *autoconvergencemode[] = { "mode-disable", "mode-frame", "mode-center", "mode-fft", "mode-manual" }; 395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *manualconvergencevalues[] = { "-100", "-50", "-30", "-25", "0", "25", "50", "100" }; 396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst struct { 398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int fps; 399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} frameRate[] = { 400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev {0}, 401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev {5}, 402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev {10}, 403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev {15}, 404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev {20}, 405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev {25}, 406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev {30} 407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint thumbSizeIDX = 3; 410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint previewSizeIDX = ARRAY_SIZE(previewSize) - 1; 411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint captureSizeIDX = ARRAY_SIZE(captureSize) - 1; 412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint frameRateIDX = ARRAY_SIZE(fpsConstRanges) - 1; 413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint frameRateIDXSec = ARRAY_SIZE(fpsConstRangesSec) - 1; 414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint VcaptureSizeIDX = ARRAY_SIZE(VcaptureSize) - 1; 415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint VbitRateIDX = ARRAY_SIZE(VbitRate) - 1; 416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic unsigned int recording_counter = 1; 418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint dump_preview = 0; 420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint bufferStarvationTest = 0; 421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevbool showfps = false; 422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevconst char *metering[] = { 424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "center", 425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "average", 426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint meter_mode = 0; 428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevbool bLogSysLinkTrace = true; 429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevbool stressTest = false; 430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevbool stopScript = false; 431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint restartCount = 0; 432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 43358134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvalastatic const String16 processName("camera_test"); 43458134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala 435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** Calculate delay from a reference time */ 436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevunsigned long long timeval_delay(const timeval *ref) { 437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned long long st, end, delay; 438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev timeval current_time; 439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev gettimeofday(¤t_time, 0); 441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev st = ref->tv_sec * 1000000 + ref->tv_usec; 443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev end = current_time.tv_sec * 1000000 + current_time.tv_usec; 444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev delay = end - st; 445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return delay; 447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** Callback for takePicture() */ 450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid my_raw_callback(const sp<IMemory>& mem) { 451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static int counter = 1; 453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned char *buff = NULL; 454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int size; 455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int fd = -1; 456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char fn[256]; 457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (mem == NULL) 461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Start preview after capture. 464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->startPreview(); 465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fn[0] = 0; 467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sprintf(fn, "/sdcard/img%03d.raw", counter); 4680579e5e597f9504389905ba5cdc9dbf0a6cd014eVladislav Hristov fd = open(fn, O_CREAT | O_WRONLY | O_TRUNC, 0777); 469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (fd < 0) 471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size = mem->size(); 474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (size <= 0) 476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev buff = (unsigned char *)mem->pointer(); 479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (!buff) 481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (size != write(fd, buff, size)) 484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Bad Write int a %s error (%d)%s\n", fn, errno, strerror(errno)); 485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev counter++; 487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("%s: buffer=%08X, size=%d stored at %s\n", 488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev __FUNCTION__, (int)buff, size, fn); 489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevout: 491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (fd >= 0) 493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev close(fd); 494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid saveFile(const sp<IMemory>& mem) { 499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static int counter = 1; 500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned char *buff = NULL; 501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int size; 502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int fd = -1; 503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char fn[256]; 504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (mem == NULL) 508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fn[0] = 0; 511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sprintf(fn, "/sdcard/preview%03d.yuv", counter); 5120579e5e597f9504389905ba5cdc9dbf0a6cd014eVladislav Hristov fd = open(fn, O_CREAT | O_WRONLY | O_TRUNC, 0777); 513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(fd < 0) { 51446de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block ALOGE("Unable to open file %s: %s", fn, strerror(fd)); 515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size = mem->size(); 519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (size <= 0) { 52046de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block ALOGE("IMemory object is of zero size"); 521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev buff = (unsigned char *)mem->pointer(); 525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (!buff) { 52646de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block ALOGE("Buffer pointer is invalid"); 527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (size != write(fd, buff, size)) 531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Bad Write int a %s error (%d)%s\n", fn, errno, strerror(errno)); 532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev counter++; 534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("%s: buffer=%08X, size=%d\n", 535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev __FUNCTION__, (int)buff, size); 536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevout: 538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (fd >= 0) 540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev close(fd); 541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid debugShowFPS() 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static int mFrameCount = 0; 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static int mLastFrameCount = 0; 550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static nsecs_t mLastFpsTime = 0; 551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static float mFps = 0; 552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFrameCount++; 553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( mFrameCount % 30 ) == 0 ) { 554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nsecs_t now = systemTime(); 555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nsecs_t diff = now - mLastFpsTime; 556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFps = ((mFrameCount - mLastFrameCount) * float(s2ns(1))) / diff; 557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mLastFpsTime = now; 558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mLastFrameCount = mFrameCount; 559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("####### [%d] Frames, %f FPS", mFrameCount, mFps); 560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** Callback for startPreview() */ 564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid my_preview_callback(const sp<IMemory>& mem) { 565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("PREVIEW Callback 0x%x", ( unsigned int ) mem->pointer()); 567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (dump_preview) { 568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(prevcnt==50) 570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev saveFile(mem); 571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev prevcnt++; 573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uint8_t *ptr = (uint8_t*) mem->pointer(); 575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 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]); 577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev debugShowFPS(); 581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** Callback for takePicture() */ 584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid my_jpeg_callback(const sp<IMemory>& mem) { 585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static int counter = 1; 586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned char *buff = NULL; 587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int size; 588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int fd = -1; 589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char fn[256]; 590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Start preview after capture. 594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->startPreview(); 595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (mem == NULL) 597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fn[0] = 0; 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sprintf(fn, "%s/img%03d.jpg", dir_path,counter); 6010579e5e597f9504389905ba5cdc9dbf0a6cd014eVladislav Hristov fd = open(fn, O_CREAT | O_WRONLY | O_TRUNC, 0777); 602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(fd < 0) { 60446de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block ALOGE("Unable to open file %s: %s", fn, strerror(fd)); 605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size = mem->size(); 609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (size <= 0) { 61046de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block ALOGE("IMemory object is of zero size"); 611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev buff = (unsigned char *)mem->pointer(); 615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (!buff) { 61646de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block ALOGE("Buffer pointer is invalid"); 617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto out; 618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (size != write(fd, buff, size)) 621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Bad Write int a %s error (%d)%s\n", fn, errno, strerror(errno)); 622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev counter++; 624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("%s: buffer=%08X, size=%d stored at %s\n", 625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev __FUNCTION__, (int)buff, size, fn); 626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevout: 628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (fd >= 0) 630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev close(fd); 631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid my_face_callback(camera_frame_metadata_t *metadata) { 636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int idx; 637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == metadata ) { 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return; 640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for ( idx = 0 ; idx < metadata->number_of_faces ; idx++ ) { 643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Face %d at %d,%d %d,%d \n", 644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev idx, 645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev metadata->faces[idx].rect[0], 646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev metadata->faces[idx].rect[1], 647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev metadata->faces[idx].rect[2], 648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev metadata->faces[idx].rect[3]); 649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid CameraHandler::notify(int32_t msgType, int32_t ext1, int32_t ext2) { 654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Notify cb: %d %d %d\n", msgType, ext1, ext2); 656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( msgType & CAMERA_MSG_FOCUS ) 658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("AutoFocus %s in %llu us\n", (ext1) ? "OK" : "FAIL", timeval_delay(&autofocus_start)); 659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( msgType & CAMERA_MSG_SHUTTER ) 661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Shutter done in %llu us\n", timeval_delay(&picture_start)); 662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( msgType & CAMERA_MSG_ERROR && (ext1 == 1)) 664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Camera Test CAMERA_MSG_ERROR.....\n"); 666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (stressTest) 667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Camera Test Notified of Error Restarting.....\n"); 669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopScript = true; 670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Camera Test Notified of Error Stopping.....\n"); 674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopScript =false; 675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopPreview(); 676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (recordingMode) 678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopRecording(); 680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeRecorder(); 681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recordingMode = false; 682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid CameraHandler::postData(int32_t msgType, 688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev const sp<IMemory>& dataPtr, 689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_frame_metadata_t *metadata) { 690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Data cb: %d\n", msgType); 691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( msgType & CAMERA_MSG_PREVIEW_FRAME ) 693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev my_preview_callback(dataPtr); 694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( msgType & CAMERA_MSG_RAW_IMAGE ) { 696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("RAW done in %llu us\n", timeval_delay(&picture_start)); 697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev my_raw_callback(dataPtr); 698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (msgType & CAMERA_MSG_POSTVIEW_FRAME) { 701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Postview frame %llu us\n", timeval_delay(&picture_start)); 702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (msgType & CAMERA_MSG_COMPRESSED_IMAGE ) { 705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("JPEG done in %llu us\n", timeval_delay(&picture_start)); 706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev my_jpeg_callback(dataPtr); 707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( msgType & CAMERA_MSG_PREVIEW_METADATA ) && 710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ( NULL != metadata ) ) { 711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Face detected %d \n", metadata->number_of_faces); 712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev my_face_callback(metadata); 713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid CameraHandler::postDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr) 717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Recording cb: %d %lld %p\n", msgType, timestamp, dataPtr.get()); 720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static uint32_t count = 0; 722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //if(count==100) 724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //saveFile(dataPtr); 725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev count++; 727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uint8_t *ptr = (uint8_t*) dataPtr->pointer(); 729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 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]); 731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->releaseRecordingFrame(dataPtr); 733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint createPreviewSurface(unsigned int width, unsigned int height, int32_t pixFormat) { 736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned int previewWidth, previewHeight; 737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( MAX_PREVIEW_SURFACE_WIDTH < width ) { 739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewWidth = MAX_PREVIEW_SURFACE_WIDTH; 740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewWidth = width; 742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( MAX_PREVIEW_SURFACE_HEIGHT < height ) { 745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewHeight = MAX_PREVIEW_SURFACE_HEIGHT; 746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewHeight = height; 748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev client = new SurfaceComposerClient(); 751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == client.get() ) { 753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Unable to establish connection to Surface Composer \n"); 754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 758c5d2fc3ce62f91306fe342d3aa2bfe37f6b51ef6Jeff Brown surfaceControl = client->createSurface(String8("camera_test_menu"), 759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewWidth, 760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewHeight, 761c5d2fc3ce62f91306fe342d3aa2bfe37f6b51ef6Jeff Brown pixFormat, 0); 762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewSurface = surfaceControl->getSurface(); 764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev client->openGlobalTransaction(); 76695ad4f3815f0eabf70707bcf65b52eb8195accc0Tyler Luu surfaceControl->setLayer(0x7fffffff); 767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev surfaceControl->setPosition(0, 0); 768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev surfaceControl->setSize(previewWidth, previewHeight); 769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev surfaceControl->show(); 770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev client->closeGlobalTransaction(); 771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid printSupportedParams() 776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Cameras: %s", params.get("camera-indexes")); 778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Picture Sizes: %s", params.get(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES)); 779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Picture Formats: %s", params.get(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS)); 780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Preview Sizes: %s", params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES)); 781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Preview Formats: %s", params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS)); 782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Preview Frame Rates: %s", params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES)); 783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Thumbnail Sizes: %s", params.get(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES)); 784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Whitebalance Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE)); 785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Effects: %s", params.get(CameraParameters::KEY_SUPPORTED_EFFECTS)); 786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Scene Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_SCENE_MODES)); 787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Focus Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_FOCUS_MODES)); 788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Antibanding Options: %s", params.get(CameraParameters::KEY_SUPPORTED_ANTIBANDING)); 789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Flash Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_FLASH_MODES)); 790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tSupported Focus Areas: %d", params.getInt(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS)); 791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != params.get(CameraParameters::KEY_FOCUS_DISTANCES) ) { 793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\r\tFocus Distances: %s \n", params.get(CameraParameters::KEY_FOCUS_DISTANCES)); 794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return; 797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint destroyPreviewSurface() { 801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != previewSurface.get() ) { 803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewSurface.clear(); 804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != surfaceControl.get() ) { 807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev surfaceControl->clear(); 808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev surfaceControl.clear(); 809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != client.get() ) { 812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev client->dispose(); 813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev client.clear(); 814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint openRecorder() { 820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recorder = new MediaRecorder(); 821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == recorder.get() ) { 823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while creating MediaRecorder\n"); 824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint closeRecorder() { 832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == recorder.get() ) { 833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("invalid recorder reference\n"); 834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->init() < 0 ) { 839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("recorder failed to initialize\n"); 840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->close() < 0 ) { 845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("recorder failed to close\n"); 846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->release() < 0 ) { 851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("error while releasing recorder\n"); 852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recorder.clear(); 857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint configureRecorder() { 862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char videoFile[256],vbit_string[50]; 864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev videoFd = -1; 865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( NULL == recorder.get() ) || ( NULL == camera.get() ) ) { 867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("invalid recorder and/or camera references\n"); 868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->unlock(); 873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sprintf(vbit_string,"video-param-encoding-bitrate=%u", VbitRate[VbitRateIDX].bit_rate); 875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev String8 bit_rate(vbit_string); 876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->setParameters(bit_rate) < 0 ) { 877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("error while configuring bit rate\n"); 878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->setCamera(camera->remote(), camera->getRecordingProxy()) < 0 ) { 883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("error while setting the camera\n"); 884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->setVideoSource(VIDEO_SOURCE_CAMERA) < 0 ) { 889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("error while configuring camera video source\n"); 890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 8958dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu if ( AUDIO_ENCODER_LIST_END != audioCodecs[audioCodecIDX].type ) { 8968dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu if ( recorder->setAudioSource(AUDIO_SOURCE_DEFAULT) < 0 ) { 8978dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu printf("error while configuring camera audio source\n"); 898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 8998dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu return -1; 9008dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu } 901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->setOutputFormat(outputFormat[outputFormatIDX].type) < 0 ) { 904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("error while configuring output format\n"); 905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(mkdir("/mnt/sdcard/videos",0777) == -1) 910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n Directory --videos-- was not created \n"); 911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sprintf(videoFile, "/mnt/sdcard/videos/video%d.%s", recording_counter,outputFormat[outputFormatIDX].desc); 912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev videoFd = open(videoFile, O_CREAT | O_RDWR); 914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(videoFd < 0){ 916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while creating video filename\n"); 917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->setOutputFile(videoFd, 0, 0) < 0 ) { 922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("error while configuring video filename\n"); 923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recording_counter++; 928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (camera_index == 0) { 930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->setVideoFrameRate(fpsConstRanges[frameRateIDX].constFramerate) < 0 ) { 931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("error while configuring video framerate\n"); 932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else { 936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->setVideoFrameRate(fpsConstRangesSec[frameRateIDXSec].constFramerate) < 0 ) { 937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("error while configuring video framerate\n"); 938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->setVideoSize(VcaptureSize[VcaptureSizeIDX].width, VcaptureSize[VcaptureSizeIDX].height) < 0 ) { 943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("error while configuring video size\n"); 944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->setVideoEncoder(videoCodecs[videoCodecIDX].type) < 0 ) { 949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("error while configuring video codec\n"); 950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 9548dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu if ( AUDIO_ENCODER_LIST_END != audioCodecs[audioCodecIDX].type ) { 9558dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu if ( recorder->setAudioEncoder(audioCodecs[audioCodecIDX].type) < 0 ) { 9568dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu printf("error while configuring audio codec\n"); 957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 9588dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu return -1; 9598dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu } 960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 96250f28e594dc1ae97a8d63d141994e38af52cd20fMathias Agopian if ( recorder->setPreviewSurface( surfaceControl->getSurface()->getIGraphicBufferProducer() ) < 0 ) { 963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("error while configuring preview surface\n"); 964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint startRecording() { 972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ( NULL == recorder.get() ) || ( NULL == camera.get() ) ) { 973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("invalid recorder and/or camera references\n"); 974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->unlock(); 979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->prepare() < 0 ) { 981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("recorder prepare failed\n"); 982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->start() < 0 ) { 987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("recorder start failed\n"); 988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint stopRecording() { 996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == recorder.get() ) { 997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("invalid recorder reference\n"); 998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recorder->stop() < 0 ) { 1003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("recorder failed to stop\n"); 1004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 < videoFd ) { 1009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev close(videoFd); 1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint openCamera() { 1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("openCamera(camera_index=%d)\n", camera_index); 101758134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala camera = Camera::connect(camera_index, 101858134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala processName, 101958134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala Camera::USE_CALLING_UID); 1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == camera.get() ) { 1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Unable to connect to CameraService\n"); 1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Retrying... \n"); 1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sleep(1); 102558134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala camera = Camera::connect(camera_index, 102658134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala processName, 102758134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala Camera::USE_CALLING_UID); 1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == camera.get() ) { 1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Giving up!! \n"); 1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params = camera->getParameters(); 1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setListener(new CameraHandler()); 1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hardwareActive = true; 1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint closeCamera() { 1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == camera.get() ) { 1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("invalid camera reference\n"); 1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->disconnect(); 1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera.clear(); 1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hardwareActive = false; 1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint startPreview() { 1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int previewWidth, previewHeight; 1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (reSizePreview) { 1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(recordingMode) 1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewWidth = VcaptureSize[VcaptureSizeIDX].width; 1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewHeight = VcaptureSize[VcaptureSizeIDX].height; 1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }else 1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewWidth = previewSize[previewSizeIDX].width; 1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewHeight = previewSize[previewSizeIDX].height; 1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( createPreviewSurface(previewWidth, 1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewHeight, 1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pixelformat[previewFormat].pixelFormatDesc) < 0 ) { 1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while creating preview surface\n"); 1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( !hardwareActive ) { 1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev openCamera(); 1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewSize(previewWidth, previewHeight); 1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPictureSize(captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height); 1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 108950f28e594dc1ae97a8d63d141994e38af52cd20fMathias Agopian camera->setPreviewTexture(previewSurface->getIGraphicBufferProducer()); 1090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(!hardwareActive) prevcnt = 0; 1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->startPreview(); 1094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewRunning = true; 1096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev reSizePreview = false; 1097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 1101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid stopPreview() { 1104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 1105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->stopPreview(); 1106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev destroyPreviewSurface(); 1108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewRunning = false; 1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev reSizePreview = true; 1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeCamera(); 1112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid initDefaults() { 1116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_index = 0; 1117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev antibanding_mode = 0; 1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev focus_mode = 0; 1119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fpsRangeIdx = 0; 1120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewSizeIDX = 1; /* Default resolution set to WVGA */ 1121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev captureSizeIDX = 3; /* Default capture resolution is 8MP */ 1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frameRateIDX = ARRAY_SIZE(fpsConstRanges) - 1; /* Default frame rate is 30 FPS */ 1123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) 1124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VcaptureSizeIDX = ARRAY_SIZE(VcaptureSize) - 6;/* Default video record is WVGA */ 1125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else 1126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VcaptureSizeIDX = ARRAY_SIZE(VcaptureSize) - 2;/* Default video record is WVGA */ 1127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VbitRateIDX = ARRAY_SIZE(VbitRate) - 4; /*Default video bit rate is 4M */ 1129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbSizeIDX = 0; 1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev compensation = 0.0; 1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev awb_mode = 0; 1132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev effects_mode = 0; 1133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev scene_mode = 0; 1134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev caf_mode = 0; 1135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vnf_mode = 0; 1136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vstab_mode = 0; 1137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expBracketIdx = 0; 1138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev flashIdx = 0; 1139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev rotation = 0; 1140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomIDX = 0; 1141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev videoCodecIDX = 0; 1142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev gbceIDX = 0; 1143934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman glbceIDX = 0; 1144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef TARGET_OMAP4 1145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Temporary fix until OMAP3 and OMAP4 3A values are synced 1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev contrast = 90; 1147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev brightness = 50; 1148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sharpness = 0; 1149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev saturation = 50; 1150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else 1151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev contrast = 100; 1152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev brightness = 100; 1153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sharpness = 0; 1154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev saturation = 100; 1155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev iso_mode = 0; 1157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev capture_mode = 0; 1158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev exposure_mode = 0; 1159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX = 0;//set the ipp to ldc-nsf as the capture mode is set to HQ by default 1160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX_old = ippIDX; 1161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev jpegQuality = 85; 1162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bufferStarvationTest = 0; 1163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev meter_mode = 0; 1164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewFormat = 1; 1165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pictureFormat = 3; // jpeg 1166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewSize(previewSize[previewSizeIDX].width, previewSize[previewSizeIDX].height); 1167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPictureSize(captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height); 1168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_ROTATION, rotation); 1169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_COMPENSATION, (int) (compensation * 10)); 1170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_WHITE_BALANCE, strawb_mode[awb_mode]); 1171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MODE, (capture[capture_mode])); 1172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_SCENE_MODE, scene[scene_mode]); 1173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_CAF, caf_mode); 1174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_ISO, iso_mode); 1175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_GBCE, gbce[gbceIDX]); 1176934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman params.set(KEY_GLBCE, gbce[glbceIDX]); 1177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_SHARPNESS, sharpness); 1178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_CONTRAST, contrast); 1179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_ZOOM, zoom[zoomIDX].idx); 1180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_EXPOSURE, exposure[exposure_mode]); 1181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_BRIGHTNESS, brightness); 1182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_SATURATION, saturation); 1183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_EFFECT, effects[effects_mode]); 1184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewFrameRate(frameRate[ARRAY_SIZE(frameRate) - 1].fps); 1185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_ANTIBANDING, antibanding[antibanding_mode]); 1186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_FOCUS_MODE, focus[focus_mode]); 1187934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman params.set(KEY_IPP, ipp_mode[ippIDX]); 1188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_JPEG_QUALITY, jpegQuality); 1189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewFormat(pixelformat[previewFormat].pixformat); 1190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPictureFormat(codingformat[pictureFormat]); 1191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_BUFF_STARV, bufferStarvationTest); //enable buffer starvation 1192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_METERING_MODE, metering[meter_mode]); 1193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, previewSize[thumbSizeIDX].width); 1194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, previewSize[thumbSizeIDX].height); 1195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ManualConvergenceValuesIDX = ManualConvergenceDefaultValueIDX; 1196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceValuesIDX]); 1197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_S3D2D_PREVIEW_MODE, "off"); 1198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_STEREO_CAMERA, "false"); 1199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_EXIF_MODEL, MODEL); 1200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_EXIF_MAKE, MAKE); 1201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint menu_gps() { 1204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char ch; 1205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char coord_str[100]; 1206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (print_menu) { 1208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\n== GPS MENU ============================\n\n"); 1209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" e. Latitude: %.7lf\n", latitude); 1210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" d. Longitude: %.7lf\n", longitude); 1211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" c. Altitude: %.7lf\n", altitude); 1212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n"); 1213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" q. Return to main menu\n"); 1214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n"); 1215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" Choice: "); 1216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ch = getchar(); 1219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("%c", ch); 1220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev print_menu = 1; 1222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch (ch) { 1224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'e': 1226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev latitude += degree_by_step; 1227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (latitude > 90.0) { 1229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev latitude -= 180.0; 1230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev snprintf(coord_str, 7, "%.7lf", latitude); 1233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_GPS_LATITUDE, coord_str); 1234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'd': 1241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev longitude += degree_by_step; 1242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (longitude > 180.0) { 1244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev longitude -= 360.0; 1245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev snprintf(coord_str, 7, "%.7lf", longitude); 1248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_GPS_LONGITUDE, coord_str); 1249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'c': 1256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev altitude += 12345.67890123456789; 1257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (altitude > 100000.0) { 1259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev altitude -= 200000.0; 1260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev snprintf(coord_str, 100, "%.20lf", altitude); 1263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_GPS_ALTITUDE, coord_str); 1264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'Q': 1271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'q': 1272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev print_menu = 0; 1276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 1280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint functional_menu() { 1283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char ch; 1284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (print_menu) { 1286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n\n=========== FUNCTIONAL TEST MENU ===================\n\n"); 1288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" \n\nSTART / STOP / GENERAL SERVICES \n"); 1290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" -----------------------------\n"); 1291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" A Select Camera %s\n", cameras[camera_index]); 1292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" [. Resume Preview after capture\n"); 1293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 0. Reset to defaults\n"); 1294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" q. Quit\n"); 1295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" @. Disconnect and Reconnect to CameraService \n"); 1296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" /. Enable/Disable showfps: %s\n", ((showfps)? "Enabled":"Disabled")); 1297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" a. GEO tagging settings menu\n"); 1298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" E. Camera Capability Dump"); 1299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" \n\n PREVIEW SUB MENU \n"); 1302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" -----------------------------\n"); 1303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 1. Start Preview\n"); 1304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 2. Stop Preview\n"); 1305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" ~. Preview format %s\n", pixelformat[previewFormat].pixformat); 1306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) 1307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 4. Preview size: %4d x %4d - %s\n",previewSize[previewSizeIDX].width, previewSize[previewSizeIDX].height, previewSize[previewSizeIDX].desc); 1308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else 1309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 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); 1310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" R. Preview framerate range: %s\n", fpsRanges[fpsRangeIdx].rangeDescription); 1312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" &. Dump a preview frame\n"); 1313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" _. Auto Convergence mode: %s\n", autoconvergencemode[AutoConvergenceModeIDX]); 1314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" ^. Manual Convergence Value: %s\n", manualconvergencevalues[ManualConvergenceValuesIDX]); 1315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" {. 2D Preview in 3D Stereo Mode: %s\n", params.get(KEY_S3D2D_PREVIEW_MODE)); 1316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" \n\n IMAGE CAPTURE SUB MENU \n"); 1318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" -----------------------------\n"); 1319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" p. Take picture/Full Press\n"); 1320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" H. Exposure Bracketing: %s\n", expBracketing[expBracketIdx]); 1321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" U. Temporal Bracketing: %s\n", tempBracketing[tempBracketIdx]); 1322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" W. Temporal Bracketing Range: [-%d;+%d]\n", tempBracketRange, tempBracketRange); 1323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" $. Picture Format: %s\n", codingformat[pictureFormat]); 1324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 3. Picture Rotation: %3d degree\n", rotation ); 1325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 5. Picture size: %4d x %4d - %s\n",captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height, captureSize[captureSizeIDX].name); 1326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" i. ISO mode: %s\n", iso[iso_mode]); 1327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" u. Capture Mode: %s\n", capture[capture_mode]); 1328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" k. IPP Mode: %s\n", ipp_mode[ippIDX]); 1329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" K. GBCE: %s\n", gbce[gbceIDX]); 1330934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman printf(" O. GLBCE %s\n", gbce[glbceIDX]); 1331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" o. Jpeg Quality: %d\n", jpegQuality); 1332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" #. Burst Images: %3d\n", burst); 1333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" :. Thumbnail Size: %4d x %4d - %s\n",previewSize[thumbSizeIDX].width, previewSize[thumbSizeIDX].height, previewSize[thumbSizeIDX].desc); 1334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" ': Thumbnail Quality %d\n", thumbQuality); 1335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" \n\n VIDEO CAPTURE SUB MENU \n"); 1337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" -----------------------------\n"); 1338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 6. Start Video Recording\n"); 1340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 2. Stop Recording\n"); 1341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" l. Video Capture resolution: %4d x %4d - %s\n",VcaptureSize[VcaptureSizeIDX].width,VcaptureSize[VcaptureSizeIDX].height, VcaptureSize[VcaptureSizeIDX].desc); 1342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" ]. Video Bit rate : %s\n", VbitRate[VbitRateIDX].desc); 1343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 9. Video Codec: %s\n", videoCodecs[videoCodecIDX].desc); 1344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" D. Audio Codec: %s\n", audioCodecs[audioCodecIDX].desc); 1345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" v. Output Format: %s\n", outputFormat[outputFormatIDX].desc); 1346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (camera_index == 1) { 1348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" r. Framerate: %d\n", fpsConstRangesSec[frameRateIDXSec].constFramerate); 1349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else { 1351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" r. Framerate: %d\n", fpsConstRanges[frameRateIDX].constFramerate); 1352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" *. Start Video Recording dump ( 1 raw frame ) \n"); 1354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" B VNF %s \n", vnf[vnf_mode]); 1355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" C VSTAB %s", vstab[vstab_mode]); 1356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" \n\n 3A SETTING SUB MENU \n"); 1358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" -----------------------------\n"); 1359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" M. Measurement Data: %s\n", measurement[measurementIdx]); 1361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" F. Start face detection \n"); 1362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" T. Stop face detection \n"); 1363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" G. Touch/Focus area AF\n"); 1364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" f. Auto Focus/Half Press\n"); 1365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" J.Flash: %s\n", flashModes[flashIdx]); 1366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 7. EV offset: %4.1f\n", compensation); 1367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 8. AWB mode: %s\n", strawb_mode[awb_mode]); 1368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" z. Zoom %s\n", zoom[zoomIDX].zoom_description); 1369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" j. Exposure %s\n", exposure[exposure_mode]); 1370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" e. Effect: %s\n", effects[effects_mode]); 1371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" w. Scene: %s\n", scene[scene_mode]); 1372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" s. Saturation: %d\n", saturation); 1373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" c. Contrast: %d\n", contrast); 1374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" h. Sharpness: %d\n", sharpness); 1375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" b. Brightness: %d\n", brightness); 1376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" x. Antibanding: %s\n", antibanding[antibanding_mode]); 1377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" g. Focus mode: %s\n", focus[focus_mode]); 1378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" m. Metering mode: %s\n" , metering[meter_mode]); 1379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" <. Exposure Lock: %s\n", lock[elockidx]); 1380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" >. WhiteBalance Lock: %s\n",lock[wblockidx]); 1381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n"); 1382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" Choice: "); 1383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ch = getchar(); 1386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("%c", ch); 1387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev print_menu = 1; 1389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch (ch) { 1391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '_': 1393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev AutoConvergenceModeIDX++; 1394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev AutoConvergenceModeIDX %= ARRAY_SIZE(autoconvergencemode); 1395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_AUTOCONVERGENCE, autoconvergencemode[AutoConvergenceModeIDX]); 1396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( strcmp (autoconvergencemode[AutoConvergenceModeIDX], AUTOCONVERGENCE_MODE_MANUAL) == 0) { 1397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceValuesIDX]); 1398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else { 1400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceDefaultValueIDX]); 1401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ManualConvergenceValuesIDX = ManualConvergenceDefaultValueIDX; 1402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '^': 1407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( strcmp (autoconvergencemode[AutoConvergenceModeIDX], AUTOCONVERGENCE_MODE_MANUAL) == 0) { 1408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ManualConvergenceValuesIDX++; 1409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ManualConvergenceValuesIDX %= ARRAY_SIZE(manualconvergencevalues); 1410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceValuesIDX]); 1411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'A': 1415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_index++; 1416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_index %= ARRAY_SIZE(cameras); 1417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( camera_index == 2) { 1418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_STEREO_CAMERA, "true"); 1419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_STEREO_CAMERA, "false"); 1421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeCamera(); 1423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev openCamera(); 1425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (camera_index == 0) { 1427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewFrameRate(30); 1428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewFrameRate(27); 1430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '[': 1435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 1436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->startPreview(); 1438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '0': 1442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 1443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '1': 1446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startPreview() < 0 ) { 1448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting preview\n"); 1449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '2': 1456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopPreview(); 1457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recordingMode ) { 1459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->disconnect(); 1460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera.clear(); 1461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopRecording(); 1462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeRecorder(); 1463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 146458134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala camera = Camera::connect(camera_index, 146558134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala processName, 146658134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala Camera::USE_CALLING_UID); 1467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == camera.get() ) { 1468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sleep(1); 146958134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala camera = Camera::connect(camera_index, 147058134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala processName, 147158134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala Camera::USE_CALLING_UID); 1472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == camera.get() ) { 1473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setListener(new CameraHandler()); 1477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recordingMode = false; 1479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '3': 1484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev rotation += 90; 1485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev rotation %= 360; 1486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_ROTATION, rotation); 1487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '4': 1493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewSizeIDX += 1; 1494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewSizeIDX %= ARRAY_SIZE(previewSize); 1495934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman if ( NULL != params.get(KEY_STEREO_CAMERA) ) { 1496934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman if ( strcmp(params.get(KEY_STEREO_CAMERA), "false") == 0 ) { 1497934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman params.setPreviewSize(previewSize[previewSizeIDX].width, previewSize[previewSizeIDX].height); 1498934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman } else { 1499934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman params.setPreviewSize(previewSize[previewSizeIDX].width, previewSize[previewSizeIDX].height*2); 1500934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman } 1501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev reSizePreview = true; 1503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive && previewRunning ) { 1505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->stopPreview(); 1506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->startPreview(); 1508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else if ( hardwareActive ) { 1509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '5': 1515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev captureSizeIDX += 1; 1516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev captureSizeIDX %= ARRAY_SIZE(captureSize); 1517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPictureSize(captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height); 1518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'l': 1524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'L': 1525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VcaptureSizeIDX++; 1526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VcaptureSizeIDX %= ARRAY_SIZE(VcaptureSize); 1527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case ']': 1530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VbitRateIDX++; 1531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VbitRateIDX %= ARRAY_SIZE(VbitRate); 1532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '6': 1536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( !recordingMode ) { 1538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recordingMode = true; 1540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startPreview() < 0 ) { 1542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting preview\n"); 1543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( openRecorder() < 0 ) { 1548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while openning video recorder\n"); 1549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( configureRecorder() < 0 ) { 1554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while configuring video recorder\n"); 1555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startRecording() < 0 ) { 1560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting video recording\n"); 1561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '7': 1569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( compensation > 2.0) { 1571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev compensation = -2.0; 1572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev compensation += 0.1; 1574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_COMPENSATION, (int) (compensation * 10)); 1577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '8': 1584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev awb_mode++; 1585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev awb_mode %= ARRAY_SIZE(strawb_mode); 1586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_WHITE_BALANCE, strawb_mode[awb_mode]); 1587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '9': 1594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev videoCodecIDX++; 1595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev videoCodecIDX %= ARRAY_SIZE(videoCodecs); 1596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '~': 1598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewFormat += 1; 1599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewFormat %= ARRAY_SIZE(pixelformat) - 1; 1600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewFormat(pixelformat[previewFormat].pixformat); 1601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '$': 1607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pictureFormat += 1; 1608934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman if ( NULL != params.get(KEY_STEREO_CAMERA) ) { 1609934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman if ( strcmp(params.get(KEY_STEREO_CAMERA), "false") == 0 && pictureFormat > 4 ) 1610934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman pictureFormat = 0; 1611934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman } 1612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pictureFormat %= ARRAY_SIZE(codingformat); 1613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPictureFormat(codingformat[pictureFormat]); 1614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '?' : 1620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ///Set mode=3 to select video mode 1621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MODE, 3); 1622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_VNF, 1); 1623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_VSTAB, 1); 1624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case ':': 1627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbSizeIDX += 1; 1628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbSizeIDX %= ARRAY_SIZE(previewSize); 1629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, previewSize[thumbSizeIDX].width); 1630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, previewSize[thumbSizeIDX].height); 1631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '\'': 1638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( thumbQuality >= 100) { 1639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbQuality = 0; 1640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbQuality += 5; 1642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, thumbQuality); 1645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'B' : 1650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vnf_mode++; 1651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vnf_mode %= ARRAY_SIZE(vnf); 1652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_VNF, vnf_mode); 1653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'C' : 1659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vstab_mode++; 1660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vstab_mode %= ARRAY_SIZE(vstab); 1661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_VSTAB, vstab_mode); 1662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'E': 1668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(hardwareActive) 1669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.unflatten(camera->getParameters()); 1670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printSupportedParams(); 1671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '*': 1674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->startRecording(); 1676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'o': 1679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( jpegQuality >= 100) { 1680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev jpegQuality = 0; 1681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev jpegQuality += 5; 1683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_JPEG_QUALITY, jpegQuality); 1686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'M': 1691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev measurementIdx = (measurementIdx + 1)%ARRAY_SIZE(measurement); 1692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MEASUREMENT, measurement[measurementIdx]); 1693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'm': 1697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev meter_mode = (meter_mode + 1)%ARRAY_SIZE(metering); 1699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_METERING_MODE, metering[meter_mode]); 1700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'k': 1706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX += 1; 1707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX %= ARRAY_SIZE(ipp_mode); 1708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX_old = ippIDX; 1709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_IPP, ipp_mode[ippIDX]); 1711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'K': 1718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev gbceIDX+= 1; 1719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev gbceIDX %= ARRAY_SIZE(gbce); 1720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_GBCE, gbce[gbceIDX]); 1721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1726934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman case 'O': 1727934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman glbceIDX+= 1; 1728934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman glbceIDX %= ARRAY_SIZE(gbce); 1729934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman params.set(KEY_GLBCE, gbce[glbceIDX]); 1730934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman 1731934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman if ( hardwareActive ) 1732934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman camera->setParameters(params.flatten()); 1733934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman break; 1734934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman 1735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'F': 1736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->sendCommand(CAMERA_CMD_START_FACE_DETECTION, 0, 0); 1738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'T': 1742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->sendCommand(CAMERA_CMD_STOP_FACE_DETECTION, 0, 0); 1745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '@': 1749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 1750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeCamera(); 1752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 >= openCamera() ) { 1754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf( "Reconnected to CameraService \n"); 1755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '#': 1761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( burst >= MAX_BURST ) { 1763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev burst = 0; 1764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev burst += BURST_INC; 1766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_BURST, burst); 1768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'J': 1775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev flashIdx++; 1776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev flashIdx %= ARRAY_SIZE(flashModes); 1777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_FLASH_MODE, (flashModes[flashIdx])); 1778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'u': 1785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev capture_mode++; 1786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev capture_mode %= ARRAY_SIZE(capture); 1787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // HQ should always be in ldc-nsf 1789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // if not HQ, then return the ipp to its previous state 1790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( !strcmp(capture[capture_mode], "high-quality") ) { 1791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX_old = ippIDX; 1792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX = 3; 1793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_IPP, ipp_mode[ippIDX]); 1794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX = ippIDX_old; 1796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MODE, (capture[capture_mode])); 1799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'U': 1806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tempBracketIdx++; 1807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tempBracketIdx %= ARRAY_SIZE(tempBracketing); 1808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_TEMP_BRACKETING, tempBracketing[tempBracketIdx]); 1809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'H': 1816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expBracketIdx++; 1817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev expBracketIdx %= ARRAY_SIZE(expBracketing); 1818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_EXP_BRACKETING_RANGE, expBracketingRange[expBracketIdx]); 1820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'W': 1827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tempBracketRange++; 1828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tempBracketRange %= TEMP_BRACKETING_MAX_RANGE; 1829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 == tempBracketRange ) { 1830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tempBracketRange = 1; 1831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_TEMP_BRACKETING_NEG, tempBracketRange); 1834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_TEMP_BRACKETING_POS, tempBracketRange); 1835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'w': 1842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev scene_mode++; 1843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev scene_mode %= ARRAY_SIZE(scene); 1844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_SCENE_MODE, scene[scene_mode]); 1845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'i': 1852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev iso_mode++; 1853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev iso_mode %= ARRAY_SIZE(iso); 1854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_ISO, iso[iso_mode]); 1855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'h': 1861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( sharpness >= 100) { 1862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sharpness = 0; 1863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sharpness += 10; 1865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_SHARPNESS, sharpness); 1867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'D': 1872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev audioCodecIDX++; 1874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev audioCodecIDX %= ARRAY_SIZE(audioCodecs); 1875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'v': 1879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev outputFormatIDX++; 1881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev outputFormatIDX %= ARRAY_SIZE(outputFormat); 1882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'z': 1886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomIDX++; 1887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomIDX %= ARRAY_SIZE(zoom); 1888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_ZOOM, zoom[zoomIDX].idx); 1889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'j': 1896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev exposure_mode++; 1897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev exposure_mode %= ARRAY_SIZE(exposure); 1898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_EXPOSURE, exposure[exposure_mode]); 1899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'c': 1906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( contrast >= 200){ 1907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev contrast = 0; 1908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev contrast += 10; 1910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_CONTRAST, contrast); 1912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'b': 1916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( brightness >= 200) { 1917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev brightness = 0; 1918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev brightness += 10; 1920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_BRIGHTNESS, brightness); 1923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 's': 1930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'S': 1931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( saturation >= 100) { 1932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev saturation = 0; 1933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev saturation += 10; 1935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_SATURATION, saturation); 1938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'e': 1945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev effects_mode++; 1946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev effects_mode %= ARRAY_SIZE(effects); 1947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_EFFECT, effects[effects_mode]); 1948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'r': 1955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (camera_index == 0) { 1958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frameRateIDX += 1; 1959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frameRateIDX %= ARRAY_SIZE(fpsConstRanges); 1960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsConstRanges[frameRateIDX].range); 1961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else 1962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frameRateIDXSec += 1; 1964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frameRateIDXSec %= ARRAY_SIZE(fpsConstRangesSec); 1965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsConstRangesSec[frameRateIDXSec].range); 1966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 1971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'R': 1977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fpsRangeIdx += 1; 1978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fpsRangeIdx %= ARRAY_SIZE(fpsRanges); 1979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsRanges[fpsRangeIdx].range); 1980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 1982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'x': 1988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev antibanding_mode++; 1989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev antibanding_mode %= ARRAY_SIZE(antibanding); 1990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_ANTIBANDING, antibanding[antibanding_mode]); 1991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'g': 1998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev focus_mode++; 1999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev focus_mode %= ARRAY_SIZE(focus); 2000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_FOCUS_MODE, focus[focus_mode]); 2001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 2003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 2004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'G': 2008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_FOCUS_AREAS, TEST_FOCUS_AREA); 2010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 2012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 2013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.remove(CameraParameters::KEY_FOCUS_AREAS); 2015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'f': 2017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev gettimeofday(&autofocus_start, 0); 2019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 2021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->autoFocus(); 2022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'p': 2026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev gettimeofday(&picture_start, 0); 2028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 2030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->takePicture(CAMERA_MSG_COMPRESSED_IMAGE|CAMERA_MSG_RAW_IMAGE); 2031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '&': 2035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Enabling Preview Callback"); 2036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dump_preview = 1; 2037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 2038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_ENABLE_MASK); 2039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '{': 2042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( strcmp(params.get(KEY_S3D2D_PREVIEW_MODE), "off") == 0 ) 2043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_S3D2D_PREVIEW_MODE, "on"); 2045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 2047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_S3D2D_PREVIEW_MODE, "off"); 2049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 2051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 2052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'a': 2055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while (1) { 2057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( menu_gps() < 0) 2058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 2060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'q': 2064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopPreview(); 2066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '/': 2070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (showfps) 2072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev property_set("debug.image.showfps", "0"); 2074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev showfps = false; 2075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 2077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev property_set("debug.image.showfps", "1"); 2079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev showfps = true; 2080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '<': 2085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev elockidx += 1; 2086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev elockidx %= ARRAY_SIZE(lock); 2087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_AUTO_EXPOSURE_LOCK, lock[elockidx]); 2088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 2089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 2090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '>': 2093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev wblockidx += 1; 2094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev wblockidx %= ARRAY_SIZE(lock); 2095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_AUTO_WHITEBALANCE_LOCK, lock[wblockidx]); 2096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 2097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 2098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 2101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev print_menu = 0; 2102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 2107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid print_usage() { 2110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" USAGE: camera_test <param> <script>\n"); 2111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" <param>\n-----------\n\n"); 2112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" F or f -> Functional tests \n"); 2113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" A or a -> API tests \n"); 2114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" E or e -> Error scenario tests \n"); 2115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" S or s -> Stress tests; with syslink trace \n"); 2116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" SN or sn -> Stress tests; No syslink trace \n\n"); 2117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" <script>\n----------\n"); 2118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Script name (Only for stress tests)\n\n"); 2119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return; 2120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint error_scenario() { 2123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char ch; 2124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t stat = NO_ERROR; 2125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (print_menu) { 2127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 0. Buffer need\n"); 2128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 1. Not enough memory\n"); 2129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 2. Media server crash\n"); 2130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 3. Overlay object request\n"); 2131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 4. Pass unsupported preview&picture format\n"); 2132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 5. Pass unsupported preview&picture resolution\n"); 2133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" 6. Pass unsupported preview framerate\n"); 2134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" q. Quit\n"); 2136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" Choice: "); 2137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev print_menu = 1; 2140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ch = getchar(); 2141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("%c\n", ch); 2142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch (ch) { 2144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '0': { 2145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Case0:Buffer need\n"); 2146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bufferStarvationTest = 1; 2147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_BUFF_STARV, bufferStarvationTest); //enable buffer starvation 2148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( !recordingMode ) { 2150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recordingMode = true; 2151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startPreview() < 0 ) { 2152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting preview\n"); 2153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( openRecorder() < 0 ) { 2158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while openning video recorder\n"); 2159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( configureRecorder() < 0 ) { 2164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while configuring video recorder\n"); 2165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startRecording() < 0 ) { 2170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting video recording\n"); 2171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev usleep(1000000);//1s 2178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopPreview(); 2180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recordingMode ) { 2182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopRecording(); 2183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeRecorder(); 2184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recordingMode = false; 2186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '1': { 2192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Case1:Not enough memory\n"); 2193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int* tMemoryEater = new int[999999999]; 2194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (!tMemoryEater) { 2196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Not enough memory\n"); 2197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 2199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev delete tMemoryEater; 2200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '2': { 2206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Case2:Media server crash\n"); 2207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //camera = Camera::connect(); 2208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == camera.get() ) { 2210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Unable to connect to CameraService\n"); 2211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '3': { 2218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Case3:Overlay object request\n"); 2219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int err = 0; 2220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev err = open("/dev/video5", O_RDWR); 2222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (err < 0) { 2224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Could not open the camera device5: %d\n", err ); 2225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return err; 2226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startPreview() < 0 ) { 2229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting preview\n"); 2230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev usleep(1000000);//1s 2234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopPreview(); 2236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev close(err); 2238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '4': { 2242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 2244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPictureFormat("invalid-format"); 2246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewFormat("invalid-format"); 2247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stat = camera->setParameters(params.flatten()); 2249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR != stat ) { 2251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test passed!\n"); 2252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 2253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test failed!\n"); 2254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 2257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '5': { 2263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 2265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPictureSize(-1, -1); 2267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewSize(-1, -1); 2268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stat = camera->setParameters(params.flatten()); 2270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR != stat ) { 2272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test passed!\n"); 2273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 2274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test failed!\n"); 2275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 2278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '6': { 2284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 2286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewFrameRate(-1); 2288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stat = camera->setParameters(params.flatten()); 2290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR != stat ) { 2292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test passed!\n"); 2293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 2294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test failed!\n"); 2295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 2298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'q': { 2305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: { 2309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev print_menu = 0; 2310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 2315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint restartCamera() { 2318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev const char dir_path_name[80] = SDCARD_PATH; 2320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("+++Restarting Camera After Error+++\n"); 2322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopPreview(); 2323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (recordingMode) { 2325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopRecording(); 2326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeRecorder(); 2327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recordingMode = false; 2329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sleep(3); //Wait a bit before restarting 2332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev restartCount++; 2334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (strcpy(dir_path, dir_path_name) == NULL) 2336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error reseting dir name"); 2338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( openCamera() < 0 ) 2342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("+++Camera Restarted Failed+++\n"); 2344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("echo camerahal_test > /sys/power/wake_unlock"); 2345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 2349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopScript = false; 2351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("+++Camera Restarted Successfully+++\n"); 2353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 2354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint main(int argc, char *argv[]) { 2357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char *cmd; 2358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int pid; 2359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sp<ProcessState> proc(ProcessState::self()); 2360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned long long st, end, delay; 2362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev timeval current_time; 2363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev gettimeofday(¤t_time, 0); 2365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev st = current_time.tv_sec * 1000000 + current_time.tv_usec; 2367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmd = NULL; 2369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( argc < 2 ) { 2371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" Please enter atleast 1 argument\n"); 2372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev print_usage(); 2373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 2375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("echo camerahal_test > /sys/power/wake_lock"); 2377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( argc < 3 ) { 2378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch (*argv[1]) { 2379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'S': 2380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 's': 2381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("This is stress / regression tests \n"); 2382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Provide script file as 2nd argument\n"); 2383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'F': 2387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'f': 2388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ProcessState::self()->startThreadPool(); 2389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( openCamera() < 0 ) { 2391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Camera initialization failed\n"); 2392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("echo camerahal_test > /sys/power/wake_unlock"); 2393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 2397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev print_menu = 1; 2398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while ( 1 ) { 2400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( functional_menu() < 0 ) 2401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 2403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'A': 2407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'a': 2408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("API level test cases coming soon ... \n"); 2409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'E': 2413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'e': { 2414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ProcessState::self()->startThreadPool(); 2415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( openCamera() < 0 ) { 2417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Camera initialization failed\n"); 2418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("echo camerahal_test > /sys/power/wake_unlock"); 2419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 2423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev print_menu = 1; 2424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while (1) { 2426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (error_scenario() < 0) { 2427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 2435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("INVALID OPTION USED\n"); 2436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev print_usage(); 2437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else if ( ( argc == 3) && ( ( *argv[1] == 'S' ) || ( *argv[1] == 's') ) ) { 2441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if((argv[1][1] == 'N') || (argv[1][1] == 'n')) { 2443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bLogSysLinkTrace = false; 2444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ProcessState::self()->startThreadPool(); 2447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( openCamera() < 0 ) { 2449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Camera initialization failed\n"); 2450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("echo camerahal_test > /sys/power/wake_unlock"); 2451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 2455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmd = load_script(argv[2]); 2457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( cmd != NULL) { 2459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev start_logging(argv[2], pid); 2460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stressTest = true; 2461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while (1) 2463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( execute_functional_script(cmd) == 0 ) 2465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 2469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("CameraTest Restarting Camera...\n"); 2471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev free(cmd); 2473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmd = NULL; 2474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( (restartCamera() != 0) || ((cmd = load_script(argv[2])) == NULL) ) 2476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("ERROR::CameraTest Restarting Camera...\n"); 2478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev free(cmd); 2483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stop_logging(pid); 2484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else if ( ( argc == 3) && ( ( *argv[1] == 'E' ) || ( *argv[1] == 'e') ) ) { 2486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ProcessState::self()->startThreadPool(); 2488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( openCamera() < 0 ) { 2490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Camera initialization failed\n"); 2491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("echo camerahal_test > /sys/power/wake_unlock"); 2492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 2493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 2496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmd = load_script(argv[2]); 2498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( cmd != NULL) { 2500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev start_logging(argv[2], pid); 2501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev execute_error_script(cmd); 2502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev free(cmd); 2503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stop_logging(pid); 2504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 2507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("INVALID OPTION USED\n"); 2508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev print_usage(); 2509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev gettimeofday(¤t_time, 0); 2512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev end = current_time.tv_sec * 1000000 + current_time.tv_usec; 2513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev delay = end - st; 2514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Application clossed after: %llu ms\n", delay); 2515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("echo camerahal_test > /sys/power/wake_unlock"); 2516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 2517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2518