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
433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** Calculate delay from a reference time */
434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevunsigned long long timeval_delay(const timeval *ref) {
435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned long long st, end, delay;
436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    timeval current_time;
437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    gettimeofday(&current_time, 0);
439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    st = ref->tv_sec * 1000000 + ref->tv_usec;
441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    end = current_time.tv_sec * 1000000 + current_time.tv_usec;
442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    delay = end - st;
443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return delay;
445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** Callback for takePicture() */
448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid my_raw_callback(const sp<IMemory>& mem) {
449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static int      counter = 1;
451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned char   *buff = NULL;
452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int             size;
453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int             fd = -1;
454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char            fn[256];
455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (mem == NULL)
459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Start preview after capture.
462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    camera->startPreview();
463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    fn[0] = 0;
465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    sprintf(fn, "/sdcard/img%03d.raw", counter);
4660579e5e597f9504389905ba5cdc9dbf0a6cd014eVladislav Hristov    fd = open(fn, O_CREAT | O_WRONLY | O_TRUNC, 0777);
467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (fd < 0)
469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size = mem->size();
472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (size <= 0)
474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    buff = (unsigned char *)mem->pointer();
477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (!buff)
479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (size != write(fd, buff, size))
482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Bad Write int a %s error (%d)%s\n", fn, errno, strerror(errno));
483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    counter++;
485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("%s: buffer=%08X, size=%d stored at %s\n",
486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev           __FUNCTION__, (int)buff, size, fn);
487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevout:
489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (fd >= 0)
491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        close(fd);
492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid saveFile(const sp<IMemory>& mem) {
497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static int      counter = 1;
498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned char   *buff = NULL;
499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int             size;
500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int             fd = -1;
501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char            fn[256];
502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (mem == NULL)
506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    fn[0] = 0;
509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    sprintf(fn, "/sdcard/preview%03d.yuv", counter);
5100579e5e597f9504389905ba5cdc9dbf0a6cd014eVladislav Hristov    fd = open(fn, O_CREAT | O_WRONLY | O_TRUNC, 0777);
511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if(fd < 0) {
51246de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block        ALOGE("Unable to open file %s: %s", fn, strerror(fd));
513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size = mem->size();
517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (size <= 0) {
51846de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block        ALOGE("IMemory object is of zero size");
519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    buff = (unsigned char *)mem->pointer();
523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (!buff) {
52446de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block        ALOGE("Buffer pointer is invalid");
525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (size != write(fd, buff, size))
529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Bad Write int a %s error (%d)%s\n", fn, errno, strerror(errno));
530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    counter++;
532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("%s: buffer=%08X, size=%d\n",
533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev           __FUNCTION__, (int)buff, size);
534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevout:
536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (fd >= 0)
538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        close(fd);
539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid debugShowFPS()
545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static int mFrameCount = 0;
547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static int mLastFrameCount = 0;
548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static nsecs_t mLastFpsTime = 0;
549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static float mFps = 0;
550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mFrameCount++;
551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( ( mFrameCount % 30 ) == 0 ) {
552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        nsecs_t now = systemTime();
553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        nsecs_t diff = now - mLastFpsTime;
554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mFps =  ((mFrameCount - mLastFrameCount) * float(s2ns(1))) / diff;
555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mLastFpsTime = now;
556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mLastFrameCount = mFrameCount;
557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("####### [%d] Frames, %f FPS", mFrameCount, mFps);
558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** Callback for startPreview() */
562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid my_preview_callback(const sp<IMemory>& mem) {
563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("PREVIEW Callback 0x%x", ( unsigned int ) mem->pointer());
565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (dump_preview) {
566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if(prevcnt==50)
568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        saveFile(mem);
569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        prevcnt++;
571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        uint8_t *ptr = (uint8_t*) mem->pointer();
573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan 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]);
575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    debugShowFPS();
579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** Callback for takePicture() */
582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid my_jpeg_callback(const sp<IMemory>& mem) {
583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static int  counter = 1;
584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned char   *buff = NULL;
585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int     size;
586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int     fd = -1;
587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char        fn[256];
588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //Start preview after capture.
592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    camera->startPreview();
593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (mem == NULL)
595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    fn[0] = 0;
598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    sprintf(fn, "%s/img%03d.jpg", dir_path,counter);
5990579e5e597f9504389905ba5cdc9dbf0a6cd014eVladislav Hristov    fd = open(fn, O_CREAT | O_WRONLY | O_TRUNC, 0777);
600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if(fd < 0) {
60246de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block        ALOGE("Unable to open file %s: %s", fn, strerror(fd));
603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size = mem->size();
607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (size <= 0) {
60846de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block        ALOGE("IMemory object is of zero size");
609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    buff = (unsigned char *)mem->pointer();
613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (!buff) {
61446de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block        ALOGE("Buffer pointer is invalid");
615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto out;
616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (size != write(fd, buff, size))
619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Bad Write int a %s error (%d)%s\n", fn, errno, strerror(errno));
620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    counter++;
622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("%s: buffer=%08X, size=%d stored at %s\n",
623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev           __FUNCTION__, (int)buff, size, fn);
624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevout:
626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (fd >= 0)
628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        close(fd);
629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid my_face_callback(camera_frame_metadata_t *metadata) {
634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int idx;
635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == metadata ) {
637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return;
638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    for ( idx = 0 ; idx < metadata->number_of_faces ; idx++ ) {
641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Face %d at %d,%d %d,%d \n",
642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev               idx,
643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev               metadata->faces[idx].rect[0],
644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev               metadata->faces[idx].rect[1],
645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev               metadata->faces[idx].rect[2],
646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev               metadata->faces[idx].rect[3]);
647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid CameraHandler::notify(int32_t msgType, int32_t ext1, int32_t ext2) {
652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("Notify cb: %d %d %d\n", msgType, ext1, ext2);
654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( msgType & CAMERA_MSG_FOCUS )
656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("AutoFocus %s in %llu us\n", (ext1) ? "OK" : "FAIL", timeval_delay(&autofocus_start));
657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( msgType & CAMERA_MSG_SHUTTER )
659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Shutter done in %llu us\n", timeval_delay(&picture_start));
660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( msgType & CAMERA_MSG_ERROR && (ext1 == 1))
662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      {
663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Camera Test CAMERA_MSG_ERROR.....\n");
664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if (stressTest)
665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev          {
666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("Camera Test Notified of Error Restarting.....\n");
667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            stopScript = true;
668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev          }
669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev          {
671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("Camera Test Notified of Error Stopping.....\n");
672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            stopScript =false;
673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            stopPreview();
674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if (recordingMode)
676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev              {
677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                stopRecording();
678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                closeRecorder();
679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                recordingMode = false;
680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev              }
681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev          }
682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      }
683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid CameraHandler::postData(int32_t msgType,
686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                             const sp<IMemory>& dataPtr,
687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                             camera_frame_metadata_t *metadata) {
688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("Data cb: %d\n", msgType);
689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( msgType & CAMERA_MSG_PREVIEW_FRAME )
691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        my_preview_callback(dataPtr);
692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( msgType & CAMERA_MSG_RAW_IMAGE ) {
694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("RAW done in %llu us\n", timeval_delay(&picture_start));
695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        my_raw_callback(dataPtr);
696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (msgType & CAMERA_MSG_POSTVIEW_FRAME) {
699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Postview frame %llu us\n", timeval_delay(&picture_start));
700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (msgType & CAMERA_MSG_COMPRESSED_IMAGE ) {
703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("JPEG done in %llu us\n", timeval_delay(&picture_start));
704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        my_jpeg_callback(dataPtr);
705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( ( msgType & CAMERA_MSG_PREVIEW_METADATA ) &&
708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         ( NULL != metadata ) ) {
709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Face detected %d \n", metadata->number_of_faces);
710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        my_face_callback(metadata);
711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid CameraHandler::postDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr)
715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("Recording cb: %d %lld %p\n", msgType, timestamp, dataPtr.get());
718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    static uint32_t count = 0;
720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //if(count==100)
722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //saveFile(dataPtr);
723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    count++;
725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    uint8_t *ptr = (uint8_t*) dataPtr->pointer();
727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan 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]);
729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    camera->releaseRecordingFrame(dataPtr);
731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint createPreviewSurface(unsigned int width, unsigned int height, int32_t pixFormat) {
734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned int previewWidth, previewHeight;
735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( MAX_PREVIEW_SURFACE_WIDTH < width ) {
737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        previewWidth = MAX_PREVIEW_SURFACE_WIDTH;
738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    } else {
739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        previewWidth = width;
740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( MAX_PREVIEW_SURFACE_HEIGHT < height ) {
743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        previewHeight = MAX_PREVIEW_SURFACE_HEIGHT;
744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    } else {
745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        previewHeight = height;
746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    client = new SurfaceComposerClient();
749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == client.get() ) {
751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Unable to establish connection to Surface Composer \n");
752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
756c5d2fc3ce62f91306fe342d3aa2bfe37f6b51ef6Jeff Brown    surfaceControl = client->createSurface(String8("camera_test_menu"),
757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                           previewWidth,
758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                           previewHeight,
759c5d2fc3ce62f91306fe342d3aa2bfe37f6b51ef6Jeff Brown                                           pixFormat, 0);
760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    previewSurface = surfaceControl->getSurface();
762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    client->openGlobalTransaction();
76495ad4f3815f0eabf70707bcf65b52eb8195accc0Tyler Luu    surfaceControl->setLayer(0x7fffffff);
765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    surfaceControl->setPosition(0, 0);
766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    surfaceControl->setSize(previewWidth, previewHeight);
767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    surfaceControl->show();
768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    client->closeGlobalTransaction();
769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid printSupportedParams()
774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Cameras: %s", params.get("camera-indexes"));
776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Picture Sizes: %s", params.get(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES));
777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Picture Formats: %s", params.get(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS));
778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Preview Sizes: %s", params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES));
779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Preview Formats: %s", params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS));
780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Preview Frame Rates: %s", params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES));
781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Thumbnail Sizes: %s", params.get(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES));
782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Whitebalance Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE));
783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Effects: %s", params.get(CameraParameters::KEY_SUPPORTED_EFFECTS));
784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Scene Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_SCENE_MODES));
785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Focus Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_FOCUS_MODES));
786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Antibanding Options: %s", params.get(CameraParameters::KEY_SUPPORTED_ANTIBANDING));
787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Flash Modes: %s", params.get(CameraParameters::KEY_SUPPORTED_FLASH_MODES));
788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("\n\r\tSupported Focus Areas: %d", params.getInt(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS));
789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL != params.get(CameraParameters::KEY_FOCUS_DISTANCES) ) {
791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("\n\r\tFocus Distances: %s \n", params.get(CameraParameters::KEY_FOCUS_DISTANCES));
792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return;
795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint destroyPreviewSurface() {
799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL != previewSurface.get() ) {
801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        previewSurface.clear();
802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL != surfaceControl.get() ) {
805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        surfaceControl->clear();
806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        surfaceControl.clear();
807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL != client.get() ) {
810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        client->dispose();
811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        client.clear();
812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint openRecorder() {
818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    recorder = new MediaRecorder();
819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == recorder.get() ) {
821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Error while creating MediaRecorder\n");
822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint closeRecorder() {
830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == recorder.get() ) {
831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("invalid recorder reference\n");
832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->init() < 0 ) {
837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("recorder failed to initialize\n");
838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->close() < 0 ) {
843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("recorder failed to close\n");
844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->release() < 0 ) {
849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("error while releasing recorder\n");
850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    recorder.clear();
855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint configureRecorder() {
860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char videoFile[256],vbit_string[50];
862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    videoFd = -1;
863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( ( NULL == recorder.get() ) || ( NULL == camera.get() ) ) {
865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("invalid recorder and/or camera references\n");
866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    camera->unlock();
871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    sprintf(vbit_string,"video-param-encoding-bitrate=%u", VbitRate[VbitRateIDX].bit_rate);
873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    String8 bit_rate(vbit_string);
874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->setParameters(bit_rate) < 0 ) {
875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("error while configuring bit rate\n");
876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->setCamera(camera->remote(), camera->getRecordingProxy()) < 0 ) {
881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("error while setting the camera\n");
882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->setVideoSource(VIDEO_SOURCE_CAMERA) < 0 ) {
887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("error while configuring camera video source\n");
888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
8938dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu    if ( AUDIO_ENCODER_LIST_END != audioCodecs[audioCodecIDX].type ) {
8948dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu        if ( recorder->setAudioSource(AUDIO_SOURCE_DEFAULT) < 0 ) {
8958dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu            printf("error while configuring camera audio source\n");
896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
8978dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu            return -1;
8988dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu        }
899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->setOutputFormat(outputFormat[outputFormatIDX].type) < 0 ) {
902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("error while configuring output format\n");
903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if(mkdir("/mnt/sdcard/videos",0777) == -1)
908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         printf("\n Directory --videos-- was not created \n");
909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    sprintf(videoFile, "/mnt/sdcard/videos/video%d.%s", recording_counter,outputFormat[outputFormatIDX].desc);
910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    videoFd = open(videoFile, O_CREAT | O_RDWR);
912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if(videoFd < 0){
914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Error while creating video filename\n");
915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->setOutputFile(videoFd, 0, 0) < 0 ) {
920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("error while configuring video filename\n");
921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    recording_counter++;
926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (camera_index == 0) {
928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( recorder->setVideoFrameRate(fpsConstRanges[frameRateIDX].constFramerate) < 0 ) {
929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("error while configuring video framerate\n");
930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return -1;
931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else  {
934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( recorder->setVideoFrameRate(fpsConstRangesSec[frameRateIDXSec].constFramerate) < 0 ) {
935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("error while configuring video framerate\n");
936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return -1;
937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->setVideoSize(VcaptureSize[VcaptureSizeIDX].width, VcaptureSize[VcaptureSizeIDX].height) < 0 ) {
941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("error while configuring video size\n");
942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->setVideoEncoder(videoCodecs[videoCodecIDX].type) < 0 ) {
947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("error while configuring video codec\n");
948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
9528dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu    if ( AUDIO_ENCODER_LIST_END != audioCodecs[audioCodecIDX].type ) {
9538dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu        if ( recorder->setAudioEncoder(audioCodecs[audioCodecIDX].type) < 0 ) {
9548dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu            printf("error while configuring audio codec\n");
955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
9568dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu            return -1;
9578dc6e2e3019301a256d3025ecaf266d7a0979871Tyler Luu        }
958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->setPreviewSurface( surfaceControl->getSurface() ) < 0 ) {
961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("error while configuring preview surface\n");
962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint startRecording() {
970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( ( NULL == recorder.get() ) || ( NULL == camera.get() ) ) {
971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("invalid recorder and/or camera references\n");
972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    camera->unlock();
977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->prepare() < 0 ) {
979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("recorder prepare failed\n");
980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->start() < 0 ) {
985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("recorder start failed\n");
986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint stopRecording() {
994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == recorder.get() ) {
995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("invalid recorder reference\n");
996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( recorder->stop() < 0 ) {
1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("recorder failed to stop\n");
1002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
1004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( 0 < videoFd ) {
1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        close(videoFd);
1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint openCamera() {
1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("openCamera(camera_index=%d)\n", camera_index);
101510f24e506f508599396f31b8d58f70ac5555f354Wu-cheng Li    camera = Camera::connect(camera_index);
1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == camera.get() ) {
1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Unable to connect to CameraService\n");
1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("Retrying... \n");
1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        sleep(1);
102110f24e506f508599396f31b8d58f70ac5555f354Wu-cheng Li        camera = Camera::connect(camera_index);
1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( NULL == camera.get() ) {
1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("Giving up!! \n");
1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return -1;
1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params = camera->getParameters();
1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    camera->setParameters(params.flatten());
1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    camera->setListener(new CameraHandler());
1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    hardwareActive = true;
1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint closeCamera() {
1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == camera.get() ) {
1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("invalid camera reference\n");
1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -1;
1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    camera->disconnect();
1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    camera.clear();
1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    hardwareActive = false;
1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint startPreview() {
1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int previewWidth, previewHeight;
1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (reSizePreview) {
1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if(recordingMode)
1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            previewWidth = VcaptureSize[VcaptureSizeIDX].width;
1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            previewHeight = VcaptureSize[VcaptureSizeIDX].height;
1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }else
1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            previewWidth = previewSize[previewSizeIDX].width;
1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            previewHeight = previewSize[previewSizeIDX].height;
1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( createPreviewSurface(previewWidth,
1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  previewHeight,
1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                  pixelformat[previewFormat].pixelFormatDesc) < 0 ) {
1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("Error while creating preview surface\n");
1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return -1;
1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( !hardwareActive ) {
1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            openCamera();
1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        params.setPreviewSize(previewWidth, previewHeight);
1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        params.setPictureSize(captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height);
1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        camera->setParameters(params.flatten());
1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        camera->setPreviewDisplay(previewSurface);
1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if(!hardwareActive) prevcnt = 0;
1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        camera->startPreview();
1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        previewRunning = true;
1090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        reSizePreview = false;
1091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
1095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid stopPreview() {
1098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( hardwareActive ) {
1099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        camera->stopPreview();
1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        destroyPreviewSurface();
1102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        previewRunning  = false;
1104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        reSizePreview = true;
1105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        closeCamera();
1106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid initDefaults() {
1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    camera_index = 0;
1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    antibanding_mode = 0;
1112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    focus_mode = 0;
1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    fpsRangeIdx = 0;
1114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    previewSizeIDX = 1;  /* Default resolution set to WVGA */
1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    captureSizeIDX = 3;  /* Default capture resolution is 8MP */
1116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    frameRateIDX = ARRAY_SIZE(fpsConstRanges) - 1;      /* Default frame rate is 30 FPS */
1117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3)
1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    VcaptureSizeIDX = ARRAY_SIZE(VcaptureSize) - 6;/* Default video record is WVGA */
1119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else
1120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    VcaptureSizeIDX = ARRAY_SIZE(VcaptureSize) - 2;/* Default video record is WVGA */
1121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    VbitRateIDX = ARRAY_SIZE(VbitRate) - 4;        /*Default video bit rate is 4M */
1123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    thumbSizeIDX = 0;
1124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    compensation = 0.0;
1125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    awb_mode = 0;
1126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    effects_mode = 0;
1127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    scene_mode = 0;
1128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    caf_mode = 0;
1129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    vnf_mode = 0;
1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    vstab_mode = 0;
1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    expBracketIdx = 0;
1132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    flashIdx = 0;
1133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    rotation = 0;
1134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    zoomIDX = 0;
1135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    videoCodecIDX = 0;
1136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    gbceIDX = 0;
1137934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman    glbceIDX = 0;
1138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef TARGET_OMAP4
1139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ///Temporary fix until OMAP3 and OMAP4 3A values are synced
1140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    contrast = 90;
1141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    brightness = 50;
1142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    sharpness = 0;
1143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    saturation = 50;
1144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else
1145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    contrast = 100;
1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    brightness = 100;
1147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    sharpness = 0;
1148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    saturation = 100;
1149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
1150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    iso_mode = 0;
1151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    capture_mode = 0;
1152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    exposure_mode = 0;
1153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ippIDX = 0;//set the ipp to ldc-nsf as the capture mode is set to HQ by default
1154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ippIDX_old = ippIDX;
1155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    jpegQuality = 85;
1156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    bufferStarvationTest = 0;
1157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    meter_mode = 0;
1158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    previewFormat = 1;
1159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    pictureFormat = 3; // jpeg
1160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.setPreviewSize(previewSize[previewSizeIDX].width, previewSize[previewSizeIDX].height);
1161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.setPictureSize(captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height);
1162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(CameraParameters::KEY_ROTATION, rotation);
1163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_COMPENSATION, (int) (compensation * 10));
1164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(params.KEY_WHITE_BALANCE, strawb_mode[awb_mode]);
1165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_MODE, (capture[capture_mode]));
1166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(params.KEY_SCENE_MODE, scene[scene_mode]);
1167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_CAF, caf_mode);
1168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_ISO, iso_mode);
1169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_GBCE, gbce[gbceIDX]);
1170934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman    params.set(KEY_GLBCE, gbce[glbceIDX]);
1171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_SHARPNESS, sharpness);
1172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_CONTRAST, contrast);
1173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(CameraParameters::KEY_ZOOM, zoom[zoomIDX].idx);
1174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_EXPOSURE, exposure[exposure_mode]);
1175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_BRIGHTNESS, brightness);
1176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_SATURATION, saturation);
1177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(params.KEY_EFFECT, effects[effects_mode]);
1178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.setPreviewFrameRate(frameRate[ARRAY_SIZE(frameRate) - 1].fps);
1179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(params.KEY_ANTIBANDING, antibanding[antibanding_mode]);
1180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(params.KEY_FOCUS_MODE, focus[focus_mode]);
1181934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman    params.set(KEY_IPP, ipp_mode[ippIDX]);
1182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(CameraParameters::KEY_JPEG_QUALITY, jpegQuality);
1183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.setPreviewFormat(pixelformat[previewFormat].pixformat);
1184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.setPictureFormat(codingformat[pictureFormat]);
1185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_BUFF_STARV, bufferStarvationTest); //enable buffer starvation
1186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_METERING_MODE, metering[meter_mode]);
1187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, previewSize[thumbSizeIDX].width);
1188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, previewSize[thumbSizeIDX].height);
1189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ManualConvergenceValuesIDX = ManualConvergenceDefaultValueIDX;
1190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceValuesIDX]);
1191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_S3D2D_PREVIEW_MODE, "off");
1192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_STEREO_CAMERA, "false");
1193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_EXIF_MODEL, MODEL);
1194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    params.set(KEY_EXIF_MAKE, MAKE);
1195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint menu_gps() {
1198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char ch;
1199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char coord_str[100];
1200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (print_menu) {
1202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("\n\n== GPS MENU ============================\n\n");
1203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   e. Latitude:       %.7lf\n", latitude);
1204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   d. Longitude:      %.7lf\n", longitude);
1205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   c. Altitude:       %.7lf\n", altitude);
1206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("\n");
1207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   q. Return to main menu\n");
1208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("\n");
1209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   Choice: ");
1210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ch = getchar();
1213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("%c", ch);
1214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    print_menu = 1;
1216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    switch (ch) {
1218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'e':
1220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            latitude += degree_by_step;
1221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if (latitude > 90.0) {
1223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                latitude -= 180.0;
1224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            snprintf(coord_str, 7, "%.7lf", latitude);
1227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(params.KEY_GPS_LATITUDE, coord_str);
1228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'd':
1235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            longitude += degree_by_step;
1236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if (longitude > 180.0) {
1238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                longitude -= 360.0;
1239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            snprintf(coord_str, 7, "%.7lf", longitude);
1242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(params.KEY_GPS_LONGITUDE, coord_str);
1243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'c':
1250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            altitude += 12345.67890123456789;
1251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if (altitude > 100000.0) {
1253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                altitude -= 200000.0;
1254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            snprintf(coord_str, 100, "%.20lf", altitude);
1257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(params.KEY_GPS_ALTITUDE, coord_str);
1258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'Q':
1265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'q':
1266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return -1;
1267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        default:
1269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            print_menu = 0;
1270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
1274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint functional_menu() {
1277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char ch;
1278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (print_menu) {
1280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("\n\n=========== FUNCTIONAL TEST MENU ===================\n\n");
1282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf(" \n\nSTART / STOP / GENERAL SERVICES \n");
1284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf(" -----------------------------\n");
1285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   A  Select Camera %s\n", cameras[camera_index]);
1286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   [. Resume Preview after capture\n");
1287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   0. Reset to defaults\n");
1288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   q. Quit\n");
1289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   @. Disconnect and Reconnect to CameraService \n");
1290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   /. Enable/Disable showfps: %s\n", ((showfps)? "Enabled":"Disabled"));
1291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   a. GEO tagging settings menu\n");
1292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   E.  Camera Capability Dump");
1293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf(" \n\n PREVIEW SUB MENU \n");
1296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf(" -----------------------------\n");
1297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   1. Start Preview\n");
1298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   2. Stop Preview\n");
1299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   ~. Preview format %s\n", pixelformat[previewFormat].pixformat);
1300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3)
1301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   4. Preview size:   %4d x %4d - %s\n",previewSize[previewSizeIDX].width,  previewSize[previewSizeIDX].height, previewSize[previewSizeIDX].desc);
1302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else
1303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan 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);
1304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
1305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   R. Preview framerate range: %s\n", fpsRanges[fpsRangeIdx].rangeDescription);
1306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   &. Dump a preview frame\n");
1307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   _. Auto Convergence mode: %s\n", autoconvergencemode[AutoConvergenceModeIDX]);
1308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   ^. Manual Convergence Value: %s\n", manualconvergencevalues[ManualConvergenceValuesIDX]);
1309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   {. 2D Preview in 3D Stereo Mode: %s\n", params.get(KEY_S3D2D_PREVIEW_MODE));
1310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf(" \n\n IMAGE CAPTURE SUB MENU \n");
1312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf(" -----------------------------\n");
1313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   p. Take picture/Full Press\n");
1314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   H. Exposure Bracketing: %s\n", expBracketing[expBracketIdx]);
1315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   U. Temporal Bracketing:   %s\n", tempBracketing[tempBracketIdx]);
1316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   W. Temporal Bracketing Range: [-%d;+%d]\n", tempBracketRange, tempBracketRange);
1317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   $. Picture Format: %s\n", codingformat[pictureFormat]);
1318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   3. Picture Rotation:       %3d degree\n", rotation );
1319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   5. Picture size:   %4d x %4d - %s\n",captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height,              captureSize[captureSizeIDX].name);
1320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   i. ISO mode:       %s\n", iso[iso_mode]);
1321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   u. Capture Mode:   %s\n", capture[capture_mode]);
1322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   k. IPP Mode:       %s\n", ipp_mode[ippIDX]);
1323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   K. GBCE: %s\n", gbce[gbceIDX]);
1324934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman        printf("   O. GLBCE %s\n", gbce[glbceIDX]);
1325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   o. Jpeg Quality:   %d\n", jpegQuality);
1326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   #. Burst Images:  %3d\n", burst);
1327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   :. Thumbnail Size:  %4d x %4d - %s\n",previewSize[thumbSizeIDX].width, previewSize[thumbSizeIDX].height, previewSize[thumbSizeIDX].desc);
1328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   ': Thumbnail Quality %d\n", thumbQuality);
1329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf(" \n\n VIDEO CAPTURE SUB MENU \n");
1331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf(" -----------------------------\n");
1332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   6. Start Video Recording\n");
1334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   2. Stop Recording\n");
1335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   l. Video Capture resolution:   %4d x %4d - %s\n",VcaptureSize[VcaptureSizeIDX].width,VcaptureSize[VcaptureSizeIDX].height, VcaptureSize[VcaptureSizeIDX].desc);
1336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   ]. Video Bit rate :  %s\n", VbitRate[VbitRateIDX].desc);
1337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   9. Video Codec:    %s\n", videoCodecs[videoCodecIDX].desc);
1338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   D. Audio Codec:    %s\n", audioCodecs[audioCodecIDX].desc);
1339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   v. Output Format:  %s\n", outputFormat[outputFormatIDX].desc);
1340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if  (camera_index == 1) {
1342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("   r. Framerate:     %d\n", fpsConstRangesSec[frameRateIDXSec].constFramerate);
1343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else {
1345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("   r. Framerate:     %d\n", fpsConstRanges[frameRateIDX].constFramerate);
1346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   *. Start Video Recording dump ( 1 raw frame ) \n");
1348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   B  VNF              %s \n", vnf[vnf_mode]);
1349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   C  VSTAB              %s", vstab[vstab_mode]);
1350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf(" \n\n 3A SETTING SUB MENU \n");
1352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf(" -----------------------------\n");
1353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   M. Measurement Data: %s\n", measurement[measurementIdx]);
1355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   F. Start face detection \n");
1356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   T. Stop face detection \n");
1357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   G. Touch/Focus area AF\n");
1358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   f. Auto Focus/Half Press\n");
1359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   J.Flash:              %s\n", flashModes[flashIdx]);
1360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   7. EV offset:      %4.1f\n", compensation);
1361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   8. AWB mode:       %s\n", strawb_mode[awb_mode]);
1362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   z. Zoom            %s\n", zoom[zoomIDX].zoom_description);
1363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   j. Exposure        %s\n", exposure[exposure_mode]);
1364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   e. Effect:         %s\n", effects[effects_mode]);
1365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   w. Scene:          %s\n", scene[scene_mode]);
1366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   s. Saturation:     %d\n", saturation);
1367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   c. Contrast:       %d\n", contrast);
1368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   h. Sharpness:      %d\n", sharpness);
1369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   b. Brightness:     %d\n", brightness);
1370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   x. Antibanding:    %s\n", antibanding[antibanding_mode]);
1371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   g. Focus mode:     %s\n", focus[focus_mode]);
1372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   m. Metering mode:     %s\n" , metering[meter_mode]);
1373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   <. Exposure Lock:     %s\n", lock[elockidx]);
1374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   >. WhiteBalance Lock:  %s\n",lock[wblockidx]);
1375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("\n");
1376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   Choice: ");
1377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ch = getchar();
1380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("%c", ch);
1381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    print_menu = 1;
1383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    switch (ch) {
1385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    case '_':
1387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        AutoConvergenceModeIDX++;
1388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        AutoConvergenceModeIDX %= ARRAY_SIZE(autoconvergencemode);
1389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        params.set(KEY_AUTOCONVERGENCE, autoconvergencemode[AutoConvergenceModeIDX]);
1390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( strcmp (autoconvergencemode[AutoConvergenceModeIDX], AUTOCONVERGENCE_MODE_MANUAL) == 0) {
1391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceValuesIDX]);
1392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else {
1394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceDefaultValueIDX]);
1395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ManualConvergenceValuesIDX = ManualConvergenceDefaultValueIDX;
1396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        camera->setParameters(params.flatten());
1398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        break;
1400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    case '^':
1401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( strcmp (autoconvergencemode[AutoConvergenceModeIDX], AUTOCONVERGENCE_MODE_MANUAL) == 0) {
1402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ManualConvergenceValuesIDX++;
1403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ManualConvergenceValuesIDX %= ARRAY_SIZE(manualconvergencevalues);
1404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceValuesIDX]);
1405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            camera->setParameters(params.flatten());
1406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        break;
1408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    case 'A':
1409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        camera_index++;
1410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        camera_index %= ARRAY_SIZE(cameras);
1411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( camera_index == 2) {
1412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_STEREO_CAMERA, "true");
1413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        } else {
1414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_STEREO_CAMERA, "false");
1415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        closeCamera();
1417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        openCamera();
1419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if (camera_index == 0) {
1421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.setPreviewFrameRate(30);
1422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        } else {
1423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.setPreviewFrameRate(27);
1424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        break;
1428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    case '[':
1429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( hardwareActive ) {
1430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            camera->setParameters(params.flatten());
1431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            camera->startPreview();
1432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        break;
1434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    case '0':
1436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        initDefaults();
1437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        break;
1438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '1':
1440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( startPreview() < 0 ) {
1442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                printf("Error while starting preview\n");
1443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                return -1;
1445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '2':
1450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            stopPreview();
1451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( recordingMode ) {
1453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->disconnect();
1454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera.clear();
1455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                stopRecording();
1456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                closeRecorder();
1457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
145810f24e506f508599396f31b8d58f70ac5555f354Wu-cheng Li                camera = Camera::connect(camera_index);
1459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                  if ( NULL == camera.get() ) {
1460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                      sleep(1);
146110f24e506f508599396f31b8d58f70ac5555f354Wu-cheng Li                      camera = Camera::connect(camera_index);
1462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                      if ( NULL == camera.get() ) {
1463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                          return -1;
1464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                      }
1465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                  }
1466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                  camera->setListener(new CameraHandler());
1467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                  camera->setParameters(params.flatten());
1468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                  recordingMode = false;
1469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '3':
1474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            rotation += 90;
1475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            rotation %= 360;
1476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(CameraParameters::KEY_ROTATION, rotation);
1477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '4':
1483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            previewSizeIDX += 1;
1484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            previewSizeIDX %= ARRAY_SIZE(previewSize);
1485934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman            if ( NULL != params.get(KEY_STEREO_CAMERA) ) {
1486934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman                if ( strcmp(params.get(KEY_STEREO_CAMERA), "false") == 0 ) {
1487934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman                    params.setPreviewSize(previewSize[previewSizeIDX].width, previewSize[previewSizeIDX].height);
1488934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman                } else {
1489934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman                    params.setPreviewSize(previewSize[previewSizeIDX].width, previewSize[previewSizeIDX].height*2);
1490934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman                }
1491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            reSizePreview = true;
1493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive && previewRunning ) {
1495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->stopPreview();
1496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->startPreview();
1498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else if ( hardwareActive ) {
1499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '5':
1505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            captureSizeIDX += 1;
1506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            captureSizeIDX %= ARRAY_SIZE(captureSize);
1507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.setPictureSize(captureSize[captureSizeIDX].width, captureSize[captureSizeIDX].height);
1508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'l':
1514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'L':
1515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            VcaptureSizeIDX++;
1516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            VcaptureSizeIDX %= ARRAY_SIZE(VcaptureSize);
1517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case ']':
1520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            VbitRateIDX++;
1521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            VbitRateIDX %= ARRAY_SIZE(VbitRate);
1522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '6':
1526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( !recordingMode ) {
1528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                recordingMode = true;
1530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( startPreview() < 0 ) {
1532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Error while starting preview\n");
1533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -1;
1535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( openRecorder() < 0 ) {
1538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Error while openning video recorder\n");
1539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -1;
1541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( configureRecorder() < 0 ) {
1544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Error while configuring video recorder\n");
1545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -1;
1547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( startRecording() < 0 ) {
1550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Error while starting video recording\n");
1551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -1;
1553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '7':
1559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( compensation > 2.0) {
1561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                compensation = -2.0;
1562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else {
1563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                compensation += 0.1;
1564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_COMPENSATION, (int) (compensation * 10));
1567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '8':
1574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            awb_mode++;
1575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            awb_mode %= ARRAY_SIZE(strawb_mode);
1576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(params.KEY_WHITE_BALANCE, strawb_mode[awb_mode]);
1577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '9':
1584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            videoCodecIDX++;
1585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            videoCodecIDX %= ARRAY_SIZE(videoCodecs);
1586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '~':
1588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            previewFormat += 1;
1589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            previewFormat %= ARRAY_SIZE(pixelformat) - 1;
1590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.setPreviewFormat(pixelformat[previewFormat].pixformat);
1591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '$':
1597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            pictureFormat += 1;
1598934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman            if ( NULL != params.get(KEY_STEREO_CAMERA) ) {
1599934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman                if ( strcmp(params.get(KEY_STEREO_CAMERA), "false") == 0 && pictureFormat > 4 )
1600934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman                    pictureFormat = 0;
1601934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman            }
1602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            pictureFormat %= ARRAY_SIZE(codingformat);
1603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.setPictureFormat(codingformat[pictureFormat]);
1604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '?' :
1610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ///Set mode=3 to select video mode
1611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_MODE, 3);
1612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_VNF, 1);
1613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_VSTAB, 1);
1614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case ':':
1617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            thumbSizeIDX += 1;
1618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            thumbSizeIDX %= ARRAY_SIZE(previewSize);
1619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, previewSize[thumbSizeIDX].width);
1620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, previewSize[thumbSizeIDX].height);
1621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '\'':
1628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( thumbQuality >= 100) {
1629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                thumbQuality = 0;
1630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else {
1631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                thumbQuality += 5;
1632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, thumbQuality);
1635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'B' :
1640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            vnf_mode++;
1641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            vnf_mode %= ARRAY_SIZE(vnf);
1642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_VNF, vnf_mode);
1643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'C' :
1649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            vstab_mode++;
1650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            vstab_mode %= ARRAY_SIZE(vstab);
1651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_VSTAB, vstab_mode);
1652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'E':
1658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if(hardwareActive)
1659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                params.unflatten(camera->getParameters());
1660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printSupportedParams();
1661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '*':
1664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->startRecording();
1666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'o':
1669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( jpegQuality >= 100) {
1670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                jpegQuality = 0;
1671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else {
1672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                jpegQuality += 5;
1673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(CameraParameters::KEY_JPEG_QUALITY, jpegQuality);
1676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'M':
1681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            measurementIdx = (measurementIdx + 1)%ARRAY_SIZE(measurement);
1682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_MEASUREMENT, measurement[measurementIdx]);
1683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'm':
1687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            meter_mode = (meter_mode + 1)%ARRAY_SIZE(metering);
1689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_METERING_MODE, metering[meter_mode]);
1690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'k':
1696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ippIDX += 1;
1697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ippIDX %= ARRAY_SIZE(ipp_mode);
1698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ippIDX_old = ippIDX;
1699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_IPP, ipp_mode[ippIDX]);
1701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'K':
1708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            gbceIDX+= 1;
1709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            gbceIDX %= ARRAY_SIZE(gbce);
1710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_GBCE, gbce[gbceIDX]);
1711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1716934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman        case 'O':
1717934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman            glbceIDX+= 1;
1718934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman            glbceIDX %= ARRAY_SIZE(gbce);
1719934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman            params.set(KEY_GLBCE, gbce[glbceIDX]);
1720934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman
1721934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman            if ( hardwareActive )
1722934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman                camera->setParameters(params.flatten());
1723934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman            break;
1724934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman
1725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'F':
1726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->sendCommand(CAMERA_CMD_START_FACE_DETECTION, 0, 0);
1728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'T':
1732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->sendCommand(CAMERA_CMD_STOP_FACE_DETECTION, 0, 0);
1735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '@':
1739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive ) {
1740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                closeCamera();
1742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( 0 >= openCamera() ) {
1744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf( "Reconnected to CameraService \n");
1745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '#':
1751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( burst >= MAX_BURST ) {
1753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                burst = 0;
1754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else {
1755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                burst += BURST_INC;
1756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_BURST, burst);
1758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'J':
1765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            flashIdx++;
1766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            flashIdx %= ARRAY_SIZE(flashModes);
1767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(CameraParameters::KEY_FLASH_MODE, (flashModes[flashIdx]));
1768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'u':
1775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            capture_mode++;
1776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            capture_mode %= ARRAY_SIZE(capture);
1777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            // HQ should always be in ldc-nsf
1779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            // if not HQ, then return the ipp to its previous state
1780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if( !strcmp(capture[capture_mode], "high-quality") ) {
1781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ippIDX_old = ippIDX;
1782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ippIDX = 3;
1783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                params.set(KEY_IPP, ipp_mode[ippIDX]);
1784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else {
1785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ippIDX = ippIDX_old;
1786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_MODE, (capture[capture_mode]));
1789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'U':
1796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            tempBracketIdx++;
1797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            tempBracketIdx %= ARRAY_SIZE(tempBracketing);
1798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_TEMP_BRACKETING, tempBracketing[tempBracketIdx]);
1799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'H':
1806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            expBracketIdx++;
1807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            expBracketIdx %= ARRAY_SIZE(expBracketing);
1808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_EXP_BRACKETING_RANGE, expBracketingRange[expBracketIdx]);
1810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'W':
1817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            tempBracketRange++;
1818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            tempBracketRange %= TEMP_BRACKETING_MAX_RANGE;
1819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( 0 == tempBracketRange ) {
1820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                tempBracketRange = 1;
1821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_TEMP_BRACKETING_NEG, tempBracketRange);
1824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_TEMP_BRACKETING_POS, tempBracketRange);
1825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'w':
1832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            scene_mode++;
1833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            scene_mode %= ARRAY_SIZE(scene);
1834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(params.KEY_SCENE_MODE, scene[scene_mode]);
1835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'i':
1842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            iso_mode++;
1843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            iso_mode %= ARRAY_SIZE(iso);
1844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_ISO, iso[iso_mode]);
1845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'h':
1851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( sharpness >= 100) {
1852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                sharpness = 0;
1853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else {
1854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                sharpness += 10;
1855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_SHARPNESS, sharpness);
1857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'D':
1862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            audioCodecIDX++;
1864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            audioCodecIDX %= ARRAY_SIZE(audioCodecs);
1865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'v':
1869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            outputFormatIDX++;
1871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            outputFormatIDX %= ARRAY_SIZE(outputFormat);
1872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'z':
1876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            zoomIDX++;
1877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            zoomIDX %= ARRAY_SIZE(zoom);
1878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(CameraParameters::KEY_ZOOM, zoom[zoomIDX].idx);
1879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'j':
1886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            exposure_mode++;
1887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            exposure_mode %= ARRAY_SIZE(exposure);
1888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_EXPOSURE, exposure[exposure_mode]);
1889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'c':
1896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if( contrast >= 200){
1897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                contrast = 0;
1898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else {
1899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                contrast += 10;
1900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_CONTRAST, contrast);
1902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'b':
1906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( brightness >= 200) {
1907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                brightness = 0;
1908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else {
1909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                brightness += 10;
1910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_BRIGHTNESS, brightness);
1913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 's':
1920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'S':
1921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( saturation >= 100) {
1922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                saturation = 0;
1923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else {
1924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                saturation += 10;
1925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_SATURATION, saturation);
1928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'e':
1935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            effects_mode++;
1936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            effects_mode %= ARRAY_SIZE(effects);
1937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(params.KEY_EFFECT, effects[effects_mode]);
1938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'r':
1945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if (camera_index == 0) {
1948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                frameRateIDX += 1;
1949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                frameRateIDX %= ARRAY_SIZE(fpsConstRanges);
1950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsConstRanges[frameRateIDX].range);
1951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else
1952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
1953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                frameRateIDXSec += 1;
1954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                frameRateIDXSec %= ARRAY_SIZE(fpsConstRangesSec);
1955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsConstRangesSec[frameRateIDXSec].range);
1956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive ) {
1961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'R':
1967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            fpsRangeIdx += 1;
1968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            fpsRangeIdx %= ARRAY_SIZE(fpsRanges);
1969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsRanges[fpsRangeIdx].range);
1970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive ) {
1972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'x':
1978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            antibanding_mode++;
1979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            antibanding_mode %= ARRAY_SIZE(antibanding);
1980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(params.KEY_ANTIBANDING, antibanding[antibanding_mode]);
1981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
1983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
1984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'g':
1988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            focus_mode++;
1989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            focus_mode %= ARRAY_SIZE(focus);
1990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(params.KEY_FOCUS_MODE, focus[focus_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
1999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(CameraParameters::KEY_FOCUS_AREAS, TEST_FOCUS_AREA);
2000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
2002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
2003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.remove(CameraParameters::KEY_FOCUS_AREAS);
2005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'f':
2007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            gettimeofday(&autofocus_start, 0);
2009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
2011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->autoFocus();
2012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'p':
2016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            gettimeofday(&picture_start, 0);
2018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
2020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->takePicture(CAMERA_MSG_COMPRESSED_IMAGE|CAMERA_MSG_RAW_IMAGE);
2021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '&':
2025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("Enabling Preview Callback");
2026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            dump_preview = 1;
2027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
2028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            camera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_ENABLE_MASK);
2029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '{':
2032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( strcmp(params.get(KEY_S3D2D_PREVIEW_MODE), "off") == 0 )
2033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
2034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                params.set(KEY_S3D2D_PREVIEW_MODE, "on");
2035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
2037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
2038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                params.set(KEY_S3D2D_PREVIEW_MODE, "off");
2039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive )
2041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                camera->setParameters(params.flatten());
2042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'a':
2045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            while (1) {
2047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( menu_gps() < 0)
2048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
2049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            };
2050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'q':
2054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            stopPreview();
2056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return -1;
2058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '/':
2060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
2061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if (showfps)
2062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
2063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                property_set("debug.image.showfps", "0");
2064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                showfps = false;
2065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
2067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
2068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                property_set("debug.image.showfps", "1");
2069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                showfps = true;
2070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    case '<':
2075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      elockidx += 1;
2076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      elockidx %= ARRAY_SIZE(lock);
2077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      params.set(KEY_AUTO_EXPOSURE_LOCK, lock[elockidx]);
2078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      if ( hardwareActive )
2079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        camera->setParameters(params.flatten());
2080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      break;
2081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    case '>':
2083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      wblockidx += 1;
2084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      wblockidx %= ARRAY_SIZE(lock);
2085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      params.set(KEY_AUTO_WHITEBALANCE_LOCK, lock[wblockidx]);
2086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      if ( hardwareActive )
2087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        camera->setParameters(params.flatten());
2088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      break;
2089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        default:
2091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            print_menu = 0;
2092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
2095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
2097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid print_usage() {
2100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf(" USAGE: camera_test  <param>  <script>\n");
2101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf(" <param>\n-----------\n\n");
2102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf(" F or f -> Functional tests \n");
2103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf(" A or a -> API tests \n");
2104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf(" E or e -> Error scenario tests \n");
2105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf(" S or s -> Stress tests; with syslink trace \n");
2106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf(" SN or sn -> Stress tests; No syslink trace \n\n");
2107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf(" <script>\n----------\n");
2108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("Script name (Only for stress tests)\n\n");
2109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return;
2110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint error_scenario() {
2113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char ch;
2114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t stat = NO_ERROR;
2115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (print_menu) {
2117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   0. Buffer need\n");
2118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   1. Not enough memory\n");
2119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   2. Media server crash\n");
2120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   3. Overlay object request\n");
2121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   4. Pass unsupported preview&picture format\n");
2122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   5. Pass unsupported preview&picture resolution\n");
2123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   6. Pass unsupported preview framerate\n");
2124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   q. Quit\n");
2126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("   Choice: ");
2127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
2128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    print_menu = 1;
2130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    ch = getchar();
2131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("%c\n", ch);
2132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    switch (ch) {
2134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '0': {
2135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("Case0:Buffer need\n");
2136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bufferStarvationTest = 1;
2137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            params.set(KEY_BUFF_STARV, bufferStarvationTest); //enable buffer starvation
2138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( !recordingMode ) {
2140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                recordingMode = true;
2141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( startPreview() < 0 ) {
2142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Error while starting preview\n");
2143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -1;
2145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( openRecorder() < 0 ) {
2148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Error while openning video recorder\n");
2149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -1;
2151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( configureRecorder() < 0 ) {
2154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Error while configuring video recorder\n");
2155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -1;
2157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( startRecording() < 0 ) {
2160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Error while starting video recording\n");
2161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -1;
2163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            usleep(1000000);//1s
2168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            stopPreview();
2170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( recordingMode ) {
2172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                stopRecording();
2173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                closeRecorder();
2174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                recordingMode = false;
2176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '1': {
2182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("Case1:Not enough memory\n");
2183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            int* tMemoryEater = new int[999999999];
2184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if (!tMemoryEater) {
2186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                printf("Not enough memory\n");
2187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                return -1;
2188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            } else {
2189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                delete tMemoryEater;
2190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '2': {
2196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("Case2:Media server crash\n");
2197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            //camera = Camera::connect();
2198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( NULL == camera.get() ) {
2200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                printf("Unable to connect to CameraService\n");
2201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                return -1;
2202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '3': {
2208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("Case3:Overlay object request\n");
2209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            int err = 0;
2210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            err = open("/dev/video5", O_RDWR);
2212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if (err < 0) {
2214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                printf("Could not open the camera device5: %d\n",  err );
2215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                return err;
2216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( startPreview() < 0 ) {
2219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                printf("Error while starting preview\n");
2220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                return -1;
2221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            usleep(1000000);//1s
2224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            stopPreview();
2226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            close(err);
2228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '4': {
2232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive ) {
2234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                params.setPictureFormat("invalid-format");
2236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                params.setPreviewFormat("invalid-format");
2237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                stat = camera->setParameters(params.flatten());
2239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( NO_ERROR != stat ) {
2241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Test passed!\n");
2242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                } else {
2243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Test failed!\n");
2244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                initDefaults();
2247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '5': {
2253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive ) {
2255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                params.setPictureSize(-1, -1);
2257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                params.setPreviewSize(-1, -1);
2258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                stat = camera->setParameters(params.flatten());
2260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( NO_ERROR != stat ) {
2262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Test passed!\n");
2263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                } else {
2264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Test failed!\n");
2265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                initDefaults();
2268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case '6': {
2274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( hardwareActive ) {
2276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                params.setPreviewFrameRate(-1);
2278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                stat = camera->setParameters(params.flatten());
2280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( NO_ERROR != stat ) {
2282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Test passed!\n");
2283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                } else {
2284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Test failed!\n");
2285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                initDefaults();
2288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case 'q': {
2295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return -1;
2296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        default: {
2299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            print_menu = 0;
2300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
2303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
2305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint restartCamera() {
2308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  const char dir_path_name[80] = SDCARD_PATH;
2310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  printf("+++Restarting Camera After Error+++\n");
2312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  stopPreview();
2313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  if (recordingMode) {
2315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    stopRecording();
2316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    closeRecorder();
2317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    recordingMode = false;
2319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  }
2320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  sleep(3); //Wait a bit before restarting
2322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  restartCount++;
2324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  if (strcpy(dir_path, dir_path_name) == NULL)
2326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  {
2327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("Error reseting dir name");
2328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return -1;
2329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  }
2330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  if ( openCamera() < 0 )
2332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  {
2333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("+++Camera Restarted Failed+++\n");
2334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    system("echo camerahal_test > /sys/power/wake_unlock");
2335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return -1;
2336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  }
2337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  initDefaults();
2339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  stopScript = false;
2341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  printf("+++Camera Restarted Successfully+++\n");
2343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev  return 0;
2344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint main(int argc, char *argv[]) {
2347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    char *cmd;
2348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int pid;
2349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    sp<ProcessState> proc(ProcessState::self());
2350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    unsigned long long st, end, delay;
2352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    timeval current_time;
2353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    gettimeofday(&current_time, 0);
2355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    st = current_time.tv_sec * 1000000 + current_time.tv_usec;
2357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    cmd = NULL;
2359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( argc < 2 ) {
2361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf(" Please enter atleast 1 argument\n");
2362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        print_usage();
2363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return 0;
2365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
2366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    system("echo camerahal_test > /sys/power/wake_lock");
2367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( argc < 3 ) {
2368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        switch (*argv[1]) {
2369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case 'S':
2370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case 's':
2371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                printf("This is stress / regression tests \n");
2372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                printf("Provide script file as 2nd argument\n");
2373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
2375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case 'F':
2377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case 'f':
2378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ProcessState::self()->startThreadPool();
2379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( openCamera() < 0 ) {
2381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Camera initialization failed\n");
2382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    system("echo camerahal_test > /sys/power/wake_unlock");
2383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -1;
2384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                initDefaults();
2387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                print_menu = 1;
2388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                while ( 1 ) {
2390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    if ( functional_menu() < 0 )
2391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        break;
2392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                };
2393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
2395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case 'A':
2397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case 'a':
2398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                printf("API level test cases coming soon ... \n");
2399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
2401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case 'E':
2403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case 'e': {
2404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ProcessState::self()->startThreadPool();
2405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( openCamera() < 0 ) {
2407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("Camera initialization failed\n");
2408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    system("echo camerahal_test > /sys/power/wake_unlock");
2409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -1;
2410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                initDefaults();
2413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                print_menu = 1;
2414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                while (1) {
2416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    if (error_scenario() < 0) {
2417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        break;
2418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
2419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
2422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
2423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            default:
2425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                printf("INVALID OPTION USED\n");
2426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                print_usage();
2427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
2429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    } else if ( ( argc == 3) && ( ( *argv[1] == 'S' ) || ( *argv[1] == 's') ) ) {
2431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if((argv[1][1] == 'N') || (argv[1][1] == 'n')) {
2433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            bLogSysLinkTrace = false;
2434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ProcessState::self()->startThreadPool();
2437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( openCamera() < 0 ) {
2439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("Camera initialization failed\n");
2440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            system("echo camerahal_test > /sys/power/wake_unlock");
2441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return -1;
2442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        initDefaults();
2445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        cmd = load_script(argv[2]);
2447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( cmd != NULL) {
2449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            start_logging(argv[2], pid);
2450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            stressTest = true;
2451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            while (1)
2453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev              {
2454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( execute_functional_script(cmd) == 0 )
2455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                  {
2456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
2457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                  }
2458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                else
2459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                  {
2460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    printf("CameraTest Restarting Camera...\n");
2461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    free(cmd);
2463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    cmd = NULL;
2464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    if ( (restartCamera() != 0)  || ((cmd = load_script(argv[2])) == NULL) )
2466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                      {
2467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        printf("ERROR::CameraTest Restarting Camera...\n");
2468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        break;
2469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                      }
2470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                  }
2471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev              }
2472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            free(cmd);
2473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            stop_logging(pid);
2474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    } else if ( ( argc == 3) && ( ( *argv[1] == 'E' ) || ( *argv[1] == 'e') ) ) {
2476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ProcessState::self()->startThreadPool();
2478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( openCamera() < 0 ) {
2480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            printf("Camera initialization failed\n");
2481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            system("echo camerahal_test > /sys/power/wake_unlock");
2482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return -1;
2483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        initDefaults();
2486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        cmd = load_script(argv[2]);
2488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( cmd != NULL) {
2490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            start_logging(argv[2], pid);
2491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            execute_error_script(cmd);
2492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            free(cmd);
2493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            stop_logging(pid);
2494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    } else {
2497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        printf("INVALID OPTION USED\n");
2498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        print_usage();
2499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
2500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    gettimeofday(&current_time, 0);
2502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    end = current_time.tv_sec * 1000000 + current_time.tv_usec;
2503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    delay = end - st;
2504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf("Application clossed after: %llu ms\n", delay);
2505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    system("echo camerahal_test > /sys/power/wake_unlock");
2506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return 0;
2507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2508