1 /* Copyright (c) 2016, The Linux Foundation. All rights reserved.
2 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
12 * * Neither the name of The Linux Foundation nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30 #include "QCameraHAL3MainTestContext.h"
31 #include "QCameraHAL3Base.h"
32
33 namespace qcamera {
34
35 #define MAX_CAMERA_SUPPORTED 20
36
37 const CAMERA_BASE_MENU_TBL_T camera_main_menu_tbl[] = {
38 {MENU_START_PREVIEW, "To Start Preview"},
39 {MENU_START_VIDEO, "To Start Video"},
40 {MENU_START_CAPTURE, "To Capture(Non-ZSL)"},
41 {MENU_START_RAW_CAPTURE, "To Raw Capture"},
42 {MENU_TOGGLE_IR_MODE, "Toggle IR Mode"},
43 {MENU_TOGGLE_SVHDR_MODE, "Toggle SVHDR Mode"},
44 {MENU_TOGGLE_BINNING_CORRECTION, "Toggle Binning Correction"},
45 {MENU_EXIT, "EXIT"},
46 };
47
48 const HAL3TEST_SENSOR_MENU_TBL_T sensor_tbl[] = {
49 {"Rear Camera"},
50 {"Front Camera"},
51 };
52
53 CameraHAL3Base *mCamHal3Base = NULL;
54 pthread_mutex_t gCamLock = PTHREAD_MUTEX_INITIALIZER;
55
MainTestContext()56 MainTestContext::MainTestContext()
57 {
58 mTestRunning = false;
59 mCamHal3Base = NULL;
60 irmode = 0;
61 svhdrmode = 0;
62 }
63
hal3appGetUserEvent()64 int MainTestContext::hal3appGetUserEvent()
65 {
66 int choice;
67 int rc = 0, req_capture = 0;
68 int preview_restart;
69 uint8_t num_of_cameras;
70 if (mCamHal3Base != NULL) {
71 delete mCamHal3Base;
72 }
73 mCamHal3Base = new CameraHAL3Base(0);
74 num_of_cameras = mCamHal3Base->hal3appCameraTestLoad();
75 if ((num_of_cameras <= 0) && (num_of_cameras >= MAX_CAMERA_SUPPORTED)) {
76 LOGE("\n Supported Camera Value is wrong : %d", num_of_cameras);
77 printf("\n Invalid Number Of Cameras");
78 goto exit;
79 }
80 else {
81 choice = hal3appDisplaySensorMenu(num_of_cameras);
82 if (choice >= num_of_cameras || choice < 0) {
83 printf("\n Unsupported Parameter");
84 goto exit;
85 }
86 else {
87 mCamHal3Base->mCameraIndex = choice;
88 rc = mCamHal3Base->hal3appCameraLibOpen(choice);
89 }
90 }
91 do {
92 choice = hal3appPrintMenu();
93 switch(choice) {
94 case MENU_START_PREVIEW:
95 mCamHal3Base->hal3appCameraPreviewInit(MENU_START_PREVIEW,
96 mCamHal3Base->mCameraIndex, PREVIEW_WIDTH, PREVIEW_HEIGHT);
97 mCamHal3Base->mPreviewRunning = 1; mCamHal3Base->mVideoRunning = 0;
98 mCamHal3Base->mSnapShotRunning = 0;
99 break;
100
101 case MENU_START_VIDEO:
102 mCamHal3Base->hal3appCameraVideoInit(MENU_START_VIDEO,
103 mCamHal3Base->mCameraIndex, VIDEO_WIDTH, VIDEO_HEIGHT);
104 mCamHal3Base->mPreviewRunning = 0; mCamHal3Base->mVideoRunning = 1;
105 mCamHal3Base->mSnapShotRunning = 0;
106 break;
107
108 case MENU_START_CAPTURE:
109 hal3appDisplaySnapshotMenu();
110 req_capture = 1; preview_restart = 0;
111 if (mCamHal3Base->mPreviewRunning == 1) {
112 preview_restart = 1;
113 }
114 mCamHal3Base->hal3appCameraCaptureInit(0, 0, req_capture);
115 mCamHal3Base->mPreviewRunning = 0; mCamHal3Base->mVideoRunning = 0;
116 mCamHal3Base->mSnapShotRunning = 1;
117 if (preview_restart == 1) {
118 mCamHal3Base->hal3appCameraPreviewInit(MENU_START_PREVIEW,
119 mCamHal3Base->mCameraIndex, PREVIEW_WIDTH, PREVIEW_HEIGHT);
120 mCamHal3Base->mPreviewRunning = 1; mCamHal3Base->mVideoRunning = 0;
121 mCamHal3Base->mSnapShotRunning = 0;
122 }
123 break;
124
125 case MENU_START_RAW_CAPTURE:
126 hal3appDisplayRawCaptureMenu();
127 req_capture = 3;
128 mCamHal3Base->hal3appRawCaptureInit(0, 0, req_capture);
129 mCamHal3Base->mPreviewRunning = 0; mCamHal3Base->mVideoRunning = 0;
130 mCamHal3Base->mSnapShotRunning = 1;
131 break;
132
133 case MENU_TOGGLE_IR_MODE:
134 if(mCamHal3Base->mPreviewRunning == 0)
135 printf(" Cant set IR/SVHDR mode in preview mode only");
136 else {
137 irmode = !irmode;
138 printf("\n Switching IR/SVHDR mode to %s",(irmode ? "On" : "Off"));
139 ALOGE("\n Switching IR/SVHDR mode to %s and %d",
140 (irmode ? "On" : "Off"),irmode);
141 mCamHal3Base->ir_mode = irmode;
142 mCamHal3Base->hal3appCameraPreviewInit(MENU_TOGGLE_IR_MODE,
143 mCamHal3Base->mCameraIndex, PREVIEW_WIDTH, PREVIEW_HEIGHT);
144 }
145 break;
146
147 case MENU_TOGGLE_SVHDR_MODE:
148 if(mCamHal3Base->mPreviewRunning == 0)
149 printf(" Cant set IR/SVHDR mode in preview mode only");
150 else {
151 svhdrmode = !svhdrmode;
152 printf("\n Switching IR/SVHDR mode to %s",(svhdrmode ? "On" : "Off"));
153 ALOGE("\n Switching IR/SVHDR mode to %s and %d",
154 (svhdrmode ? "On" : "Off"),svhdrmode);
155 mCamHal3Base->svhdr_mode = svhdrmode;
156 mCamHal3Base->hal3appCameraPreviewInit(MENU_TOGGLE_SVHDR_MODE,
157 mCamHal3Base->mCameraIndex, PREVIEW_WIDTH, PREVIEW_HEIGHT);
158 }
159 break;
160 case MENU_TOGGLE_BINNING_CORRECTION:
161 if (mCamHal3Base->binning_mode == 0)
162 mCamHal3Base->binning_mode = 1;
163 else
164 mCamHal3Base->binning_mode = 0;
165 LOGE(" Toggling Binning mode to :%d",mCamHal3Base->binning_mode);
166 printf(" Toggling to Binning mode :%d",mCamHal3Base->binning_mode );
167 if(mCamHal3Base->mPreviewRunning == 1)
168 mCamHal3Base->hal3appCameraPreviewInit(MENU_TOGGLE_BINNING_CORRECTION,
169 mCamHal3Base->mCameraIndex, PREVIEW_WIDTH, PREVIEW_HEIGHT);
170 if(mCamHal3Base->mVideoRunning == 1)
171 mCamHal3Base->hal3appCameraVideoInit(MENU_TOGGLE_BINNING_CORRECTION,
172 mCamHal3Base->mCameraIndex, VIDEO_WIDTH, VIDEO_HEIGHT);
173 break;
174
175 case MENU_EXIT:
176 hal3appDisplayExitMenu();
177 break;
178
179 default:
180 printf("\n Option not in Menu\n");
181 }
182 }while(choice != MENU_EXIT);
183 exit:
184 return 0;
185 }
186
hal3appDisplaySensorMenu(uint8_t num_of_cameras)187 int MainTestContext::hal3appDisplaySensorMenu(uint8_t num_of_cameras)
188 {
189 int i, choice;
190 printf("\n");
191 printf("===========================================\n");
192 printf(" Camera Sensor to be used: \n");
193 printf("===========================================\n\n");
194
195 for ( i=0;i < num_of_cameras; i++) {
196 if (i <= 1) {
197 printf("\n Press %d to select %s", (i), sensor_tbl[i].menu_name);
198 }
199 else {
200 printf("\n Press %d to select Camera%d", (i), i);
201 }
202 }
203 printf("\n Enter your Choice:");
204 fscanf(stdin, "%d", &choice);
205 return choice;
206 }
207
hal3appDisplayCapabilityMenu()208 void MainTestContext::hal3appDisplayCapabilityMenu()
209 {
210 printf("\n");
211 printf("===========================================\n");
212 printf(" Sensor Capabilty are dumped at location:\n");
213 printf("===========================================\n\n");
214 }
215
hal3appDisplayPreviewMenu()216 int MainTestContext::hal3appDisplayPreviewMenu()
217 {
218 int choice;
219 printf("\n");
220 printf("===========================================\n");
221 printf("Select Camera Preview Resolution:\n");
222 printf("===========================================\n\n");
223 printf("========Select Preview Resolutions================\n");
224 printf("\nPress 1 .Aspect Ratio(4:3) Resolution 1440 X 1080");
225 printf("\nPress 2 .Aspect Ratio(16:9) Resolution 1920 X 1080");
226 printf("\n Enter your Choice:");
227 fscanf(stdin, "%d", &choice);
228 return choice;
229 }
230
hal3appDisplayVideoMenu()231 int MainTestContext::hal3appDisplayVideoMenu()
232 {
233 int choice1;
234 printf("\n");
235 printf("===========================================\n");
236 printf("Testing Camera Recording on Different Resolution:\n");
237 printf("===========================================\n\n");
238
239 printf("========Select Video Resolutions================\n");
240 printf("\nPress 1 .Aspect Ratio(4:3) Resolution 640 X 480");
241 printf("\nPress 2 .Aspect Ratio(16:9) Resolution 1920 X 1080");
242 printf("\nPress 3 .To select both");
243
244 printf("\n Enter your Choice:");
245 fscanf(stdin, "%d", &choice1);
246 return choice1;
247 }
248
hal3appDisplayRawCaptureMenu()249 void MainTestContext::hal3appDisplayRawCaptureMenu()
250 {
251 printf("\n");
252 printf("===========================================\n");
253 printf("Testing RAW Camera Capture on Different Resolution::\n");
254 printf("===========================================\n\n");
255 }
256
hal3appDisplaySnapshotMenu()257 void MainTestContext::hal3appDisplaySnapshotMenu()
258 {
259 printf("\n");
260 printf("===========================================\n");
261 printf("Testing Normal Camera Capture on Resolution 5344 X 4008\n");
262 printf("===========================================\n\n");
263 }
264
265
hal3appDisplayExitMenu()266 void MainTestContext::hal3appDisplayExitMenu()
267 {
268 printf("\n");
269 printf("===========================================\n");
270 printf(" Exiting HAL3 APP test \n");
271 printf("===========================================\n\n");
272 }
273
hal3appPrintMenu()274 int MainTestContext::hal3appPrintMenu()
275 {
276 int i, choice = 0;
277 char ch = '0';
278 printf("\n");
279 printf("===========================================\n");
280 printf(" HAL3 MENU \n");
281 printf("===========================================\n\n");
282 for ( i = 0; i < (int)(sizeof(camera_main_menu_tbl)/sizeof(camera_main_menu_tbl[0])); i++) {
283 printf("\n Press %d to select %s", (i+1), camera_main_menu_tbl[i].menu_name);
284 }
285 printf("\n Enter your Choice:");
286 do {
287 std::cin >> ch;
288 } while(!(ch >= '1' && ch <= '9'));
289 choice = ch -'0';
290 return choice;
291 }
292 }
293
main()294 int main()
295 {
296 char tc_buf[3];
297 int mode = 0;
298 int rc = 0;
299 qcamera::MainTestContext main_ctx;
300 printf("Please Select Execution Mode:\n");
301 printf("0: Menu Based 1: Regression\n");
302 printf("\n Enter your choice:");
303 fgets(tc_buf, 3, stdin);
304 mode = tc_buf[0] - '0';
305 if (mode == 0) {
306 printf("\nStarting Menu based!!\n");
307 } else {
308 printf("\nPlease Enter 0 or 1\n");
309 printf("\nExisting the App!!\n");
310 exit(1);
311 }
312 rc = main_ctx.hal3appGetUserEvent();
313 printf("Exiting application\n");
314 return rc;
315 }
316
317