1/* Copyright (c) 2013-2014, 2016-2017, 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// System dependencies
30#include <ctype.h>
31#include <errno.h>
32#include <unistd.h>
33
34// Camera dependencies
35#include "mm_qcamera_main_menu.h"
36#include "mm_qcamera_app.h"
37#include "mm_qcamera_dbg.h"
38
39/*===========================================================================
40 * Macro
41 *===========================================================================*/
42#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
43#define VIDEO_BUFFER_SIZE       (PREVIEW_WIDTH * PREVIEW_HEIGHT * 3/2)
44#define THUMBNAIL_BUFFER_SIZE   (THUMBNAIL_WIDTH * THUMBNAIL_HEIGHT * 3/2)
45#define SNAPSHOT_BUFFER_SIZE    (PICTURE_WIDTH * PICTURE_HEIGHT * 3/2)
46//TODO:check this Macros with current app.
47
48/*===========================================================================
49 * Defines
50 *===========================================================================*/
51//#define VIDEO_FRAMES_NUM      4
52#define THUMBNAIL_FRAMES_NUM  1
53#define SNAPSHOT_FRAMES_NUM   1
54#define MAX_NUM_FORMAT        32
55#define ZOOM_STEP             2
56#define ZOOM_MIN_VALUE        0
57#define EXPOSURE_COMPENSATION_MAXIMUM_NUMERATOR 12
58#define EXPOSURE_COMPENSATION_MINIMUM_NUMERATOR -12
59#define EXPOSURE_COMPENSATION_DEFAULT_NUMERATOR 0
60#define EXPOSURE_COMPENSATION_DENOMINATOR 6
61
62//TODO: find correct values of Contrast defines.
63#define CAMERA_MIN_CONTRAST    0
64#define CAMERA_DEF_CONTRAST    5
65#define CAMERA_MAX_CONTRAST    10
66#define CAMERA_CONTRAST_STEP   1
67
68//TODO: find correct values of Brightness defines.
69#define CAMERA_MIN_BRIGHTNESS  0
70#define CAMERA_DEF_BRIGHTNESS  3
71#define CAMERA_MAX_BRIGHTNESS  6
72#define CAMERA_BRIGHTNESS_STEP 1
73
74//TODO: find correct values of Saturation defines.
75#define CAMERA_MIN_SATURATION  0
76#define CAMERA_DEF_SATURATION  5
77#define CAMERA_MAX_SATURATION  10
78#define CAMERA_SATURATION_STEP 1
79
80#define CAMERA_MIN_SHARPNESS 0
81#define CAMERA_MAX_SHARPNESS 10
82#define CAMERA_DEF_SHARPNESS 5
83#define CAMERA_SHARPNESS_STEP 1
84
85const CAMERA_MAIN_MENU_TBL_T camera_main_menu_tbl[] = {
86  {START_PREVIEW,              "Start preview"},
87  {STOP_PREVIEW,               "Stop preview/video"},
88  {SET_WHITE_BALANCE,          "Set white balance mode"},
89  {SET_TINTLESS_ENABLE,        "Set Tintless Enable"},
90  {TOGGLE_SHDR,                "Toggle sHDR Mode , Default is Off"},
91  {SET_EXP_METERING,           "Set exposure metering mode"},
92  {TOGGLE_IRLED,               "Toggle IR Mode, Default is Off"},
93  {TOGGLE_EZTUNE,              "Toggle EZtune. Default EZTune Off"},
94  {SET_ISO,                    "ISO changes."},
95  {BRIGHTNESS_GOTO_SUBMENU,    "Brightness changes."},
96  {CONTRAST_GOTO_SUBMENU,      "Contrast changes."},
97  {EV_GOTO_SUBMENU,            "EV changes."},
98  {SATURATION_GOTO_SUBMENU,    "Saturation changes."},
99  {SET_ZOOM,                   "Set Digital Zoom."},
100  {SET_SHARPNESS,              "Set Sharpness."},
101  {TAKE_JPEG_SNAPSHOT,         "Take a snapshot"},
102  {START_RECORDING,            "Start RECORDING"},
103  {STOP_RECORDING,             "Stop RECORDING"},
104  {BEST_SHOT,                  "Set best-shot mode"},
105  {LIVE_SHOT,                  "Take a live snapshot"},
106  {FLASH_MODES,                "Set Flash modes"},
107  {TOGGLE_ZSL,                 "Toggle ZSL On/Off"},
108  {TAKE_RAW_SNAPSHOT,          "Take RAW snapshot"},
109  {SWITCH_SNAP_RESOLUTION,     "Select Jpeg resolution"},
110  {TOGGLE_WNR,                 "Toggle Wavelet Denoise"},
111  {SPECIAL_EFFECTS,            "Set spceial snapshot effects"},
112  {SET_MN_WHITE_BALANCE,       "Set white balance manually"},
113  {ANTI_BANDING,               "Anit-banding/Auto Flicker Correction"},
114  {SET_FLIP_MODE,              "Set Flip Mode"},
115  {BURST_MODE_SNAPSHOT,        "Enables continuous image capture during snapshot operation"},
116  {CONCURRENT_NDR_NONHDR,      "Capture non-HDR images concurrent with HDR"},
117  {EXIT,                       "Exit"}
118};
119
120CAMERA_SENSOR_MENU_TLB_T sensor_tbl[] = {
121        {"Primary Camera",      0},
122        {"Secondary Camera",    0},
123        {"Camera Sensor 3",     0},
124        {"Camera Sensor 4",     0}
125};
126
127const CAMERA_BRIGHTNESS_TBL_T brightness_change_tbl[] = {
128  {INC_BRIGHTNESS, "Increase Brightness by one step."},
129  {DEC_BRIGHTNESS, "Decrease Brightness by one step."},
130};
131
132const CAMERA_CONTRST_TBL_T contrast_change_tbl[] = {
133  {INC_CONTRAST, "Increase Contrast by one step."},
134  {DEC_CONTRAST, "Decrease Contrast by one step."},
135};
136
137const CAMERA_EV_TBL_T camera_EV_tbl[] = {
138  {INCREASE_EV, "Increase EV by one step."},
139  {DECREASE_EV, "Decrease EV by one step."},
140};
141
142const CAMERA_SATURATION_TBL_T camera_saturation_tbl[] = {
143  {INC_SATURATION, "Increase Satuation by one step."},
144  {DEC_SATURATION, "Decrease Satuation by one step."},
145};
146
147const CAMERA_SHARPNESS_TBL_T camera_sharpness_tbl[] = {
148  {INC_SHARPNESS, "Increase Sharpness."},
149  {DEC_SHARPNESS, "Decrease Sharpness."},
150};
151
152const MN_WHITE_BALANCE_TBL_T mn_white_balance_tbl[] = {
153  {   MANUAL_WB_CCT,        "Manual White Balance - CCT"},
154  {   MANUAL_WB_GAIN,       "Manual White Balance - RGB Gain"},
155};
156
157const WHITE_BALANCE_TBL_T white_balance_tbl[] = {
158  {   WB_OFF,                "White Balance - OFF"},
159  {   WB_AUTO,               "White Balance - Auto"},
160  {   WB_INCANDESCENT,       "White Balance - Incandescent"},
161  {   WB_FLUORESCENT,        "White Balance - Fluorescent"},
162  {   WB_WARM_FLUORESCENT,   "White Balance - Warm Fluorescent"},
163  {   WB_DAYLIGHT,           "White Balance - Daylight"},
164  {   WB_CLOUDY_DAYLIGHT,    "White Balance - Cloudy Daylight"},
165  {   WB_TWILIGHT,           "White Balance - Twilight"},
166  {   WB_SHADE,              "White Balance - Shade"},
167  {   WB_MANUAL,             "White Balance - Manual"},
168};
169
170const GET_CTRL_TBL_T get_ctrl_tbl[] = {
171  {     WHITE_BALANCE_STATE,            "Get white balance state (auto/off)"},
172  {     WHITE_BALANCE_TEMPERATURE,      "Get white balance temperature"},
173  {     BRIGHTNESS_CTRL,                "Get brightness value"},
174  {     EV,                             "Get exposure value"},
175  {     CONTRAST_CTRL,                  "Get contrast value"},
176  {     SATURATION_CTRL,                "Get saturation value"},
177  {     SHARPNESS_CTRL,                 "Get sharpness value"},
178};
179
180const EXP_METERING_TBL_T exp_metering_tbl[] = {
181  {   AUTO_EXP_FRAME_AVG,          "Exposure Metering - Frame Average"},
182  {   AUTO_EXP_CENTER_WEIGHTED,    "Exposure Metering - Center Weighted"},
183  {   AUTO_EXP_SPOT_METERING,      "Exposure Metering - Spot Metering"},
184  {   AUTO_EXP_SMART_METERING,     "Exposure Metering - Smart Metering"},
185  {   AUTO_EXP_USER_METERING,      "Exposure Metering - User Metering"},
186  {   AUTO_EXP_SPOT_METERING_ADV,  "Exposure Metering - Spot Metering Adv"},
187  {   AUTO_EXP_CENTER_WEIGHTED_ADV,"Exposure Metering - Center Weighted Adv"},
188};
189
190const ISO_TBL_T iso_tbl[] = {
191  {   ISO_AUTO,   "ISO: Auto"},
192  {   ISO_DEBLUR, "ISO: Deblur"},
193  {   ISO_100,    "ISO: 100"},
194  {   ISO_200,    "ISO: 200"},
195  {   ISO_400,    "ISO: 400"},
196  {   ISO_800,    "ISO: 800"},
197  {   ISO_1600,   "ISO: 1600"},
198};
199
200const ZOOM_TBL_T zoom_tbl[] = {
201  {   ZOOM_IN,  "Zoom In one step"},
202  {   ZOOM_OUT, "Zoom Out one step"},
203};
204
205const BESTSHOT_MODE_TBT_T bestshot_mode_tbl[] = {
206  {BESTSHOT_AUTO,           "Bestshot Mode: Auto"},
207  {BESTSHOT_ACTION,         "Bestshot Mode: Action"},
208  {BESTSHOT_PORTRAIT,       "Bestshot Mode: Portrait"},
209  {BESTSHOT_LANDSCAPE,      "Bestshot Mode: Landscape"},
210  {BESTSHOT_NIGHT,          "Bestshot Mode: Night"},
211  {BESTSHOT_NIGHT_PORTRAIT, "Bestshot Mode: Night Portrait"},
212  {BESTSHOT_THEATRE,        "Bestshot Mode: Theatre"},
213  {BESTSHOT_BEACH,          "Bestshot Mode: Beach"},
214  {BESTSHOT_SNOW,           "Bestshot Mode: Snow"},
215  {BESTSHOT_SUNSET,         "Bestshot Mode: Sunset"},
216  {BESTSHOT_ANTISHAKE,      "Bestshot Mode: Antishake"},
217  {BESTSHOT_FIREWORKS,      "Bestshot Mode: Fireworks"},
218  {BESTSHOT_SPORTS,         "Bestshot Mode: Sports"},
219  {BESTSHOT_PARTY,          "Bestshot Mode: Party"},
220  {BESTSHOT_CANDLELIGHT,    "Bestshot Mode: Candlelight"},
221  {BESTSHOT_ASD,            "Bestshot Mode: ASD"},
222  {BESTSHOT_BACKLIGHT,      "Bestshot Mode: Backlight"},
223  {BESTSHOT_FLOWERS,        "Bestshot Mode: Flowers"},
224  {BESTSHOT_AR,             "Bestshot Mode: Augmented Reality"},
225  {BESTSHOT_HDR,            "Bestshot Mode: HDR"},
226};
227
228const SPECIAL_EFFECT_MODE_TBT_T camEffect_mode_tbl[] = {
229  {SPL_EFFECT_OFF,          "Special Effect Mode: Off"},
230  {SPL_EFFECT_MONO,         "Special Effect Mode: Mono"},
231  {SPL_EFFECT_NEGATIVE,     "Special Effect Mode: Negative"},
232  {SPL_EFFECT_SOLARIZE,     "Special Effect Mode: Solarize"},
233  {SPL_EFFECT_SEPIA,        "Special Effect Mode: Sepia"},
234  {SPL_EFFECT_POSTERIZE,    "Special Effect Mode: Posterize"},
235  {SPL_EFFECT_WHITEBOARD,   "Special Effect Mode: Whiteboard"},
236  {SPL_EFFECT_BLACKBOARD,   "Special Effect Mode: Blackboard"},
237  {SPL_EFFECT_AQUA,         "Special Effect Mode: Aqua"},
238  {SPL_EFFECT_EMBOSS,       "Special Effect Mode: Emboss"},
239  {SPL_EFFECT_SKETCH,       "Special Effect Mode: Sketch"},
240  {SPL_EFFECT_NEON,         "Special Effect Mode: Neon"},
241  {SPL_EFFECT_BEAUTY,       "Special Effect Mode: Beuty"},
242};
243
244const ANTI_BANDING_TBT_T antiBanding_tbl[] = {
245  {ANTIBANDING_OFF,        "Anti Banding: Off"},
246  {ANTIBANDING_60HZ,       "Anti Banding: 60HZ"},
247  {ANTIBANDING_50HZ,       "Anti Banding: 50HZ"},
248  {ANTIBANDING_AUTO,       "Anti Banding: Auto"},
249};
250
251const FLIP_MODES_TBT_T flipModes_tbl[] = {
252  {MODE_NO_FLIP,        "Flip Mode: Off"},
253  {MODE_FLIP_H,         "Flip Mode: H"},
254  {MODE_FLIP_V,          "Flip Mode: V"},
255  {MODE_FLIP_V_H,       "Flip Mode: V H"},
256};
257
258const FLASH_MODE_TBL_T flashmodes_tbl[] = {
259  {   FLASH_MODE_OFF,   "Flash Mode Off"},
260  {   FLASH_MODE_AUTO,  "Flash Mode Auto"},
261  {   FLASH_MODE_ON,    "Flash Mode On"},
262  {   FLASH_MODE_TORCH, "Flash Mode Torch"},
263};
264
265DIMENSION_TBL_T dimension_tbl[] = {
266{VGA_WIDTH,      VGA_HEIGHT,      "VGA",   "Size: VGA <640x480>"   , 0},
267{MP1_WIDTH,      MP1_HEIGHT,      "1MP",   "Size: 1MP <1280x960>"  , 0},
268{MP5_WIDTH,      MP5_HEIGHT,      "5MP",   "Size: 5MP <2592x1944>",  0},
269{MP8_WIDTH,      MP8_HEIGHT,      "8MP",   "Size: 8MP <3264x2448>",  0},
270{MP12_WIDTH,     MP12_HEIGHT,     "12MP",  "Size: 12MP <4000x3000>", 0},
271};
272
273/*===========================================================================
274 * Forward declarations
275 *===========================================================================*/
276//static void system_dimension_set(mm_camera_test_obj_t *test_obj);
277/*===========================================================================
278 * Static global variables
279 *===========================================================================*/
280USER_INPUT_DISPLAY_T input_display;
281int preview_video_resolution_flag = 0;
282
283//TODO: default values.
284#if 1
285int brightness = CAMERA_DEF_BRIGHTNESS;
286int contrast = CAMERA_DEF_CONTRAST;
287int saturation = CAMERA_DEF_SATURATION;
288int sharpness = CAMERA_DEF_SHARPNESS;
289int ev_numerator = 0;
290
291#else
292int brightness = 0;
293int contrast = 0;
294int saturation = 0;
295int sharpness = 0;
296#endif
297//TODO: find new method to calculate ev.
298//int32_t ev_numerator = EXPOSURE_COMPENSATION_DEFAULT_NUMERATOR;
299
300//TODO:
301//fps_mode_t fps_mode = FPS_MODE_FIXED;
302int zoom_level;
303int zoom_max_value;
304int cam_id;
305int is_rec = 0;
306
307
308static int submain();
309
310/*===========================================================================
311 * FUNCTION    - keypress_to_event -
312 *
313 * DESCRIPTION:
314 *==========================================================================*/
315int keypress_to_event(char keypress)
316{
317  int out_buf = INVALID_KEY_PRESS;
318  if ((keypress >= 'A' && keypress <= 'Z') ||
319    (keypress >= 'a' && keypress <= 'z')) {
320    out_buf = tolower(keypress);
321    out_buf = out_buf - 'a';
322  } else if (keypress >= '0' && keypress <= '9') {
323    out_buf = (keypress - '0')+ ('z' - 'a');
324  }
325  return out_buf;
326}
327
328int next_menu(menu_id_change_t current_menu_id, char keypress, camera_action_t * action_id_ptr, int * action_param)
329{
330  int output_to_event;
331  menu_id_change_t next_menu_id = MENU_ID_INVALID;
332  * action_id_ptr = ACTION_NO_ACTION;
333
334  output_to_event = keypress_to_event(keypress);
335  LOGD("output_to_event=%d\n",output_to_event);
336  LOGD("current_menu_id=%d\n",current_menu_id);
337
338  switch(current_menu_id) {
339    case MENU_ID_MAIN:
340      switch(output_to_event) {
341        case START_PREVIEW:
342          * action_id_ptr = ACTION_START_PREVIEW;
343          LOGD("START_PREVIEW\n");
344          break;
345        case STOP_PREVIEW:
346          * action_id_ptr = ACTION_STOP_PREVIEW;
347          LOGD("STOP_PREVIEW\n");
348          break;
349
350        case SET_WHITE_BALANCE:
351          next_menu_id = MENU_ID_WHITEBALANCECHANGE;
352          LOGD("next_menu_id = MENU_ID_WHITEBALANCECHANGE = %d\n", next_menu_id);
353          break;
354        case SET_MN_WHITE_BALANCE:
355          next_menu_id = MENU_ID_WHITEBALANCE_MANUAL;
356          LOGD("next_menu_id = MENU_ID_WHITEBALANCECHANGE = %d\n", next_menu_id);
357          break;
358
359        case SET_TINTLESS_ENABLE:
360          * action_id_ptr = ACTION_SET_TINTLESS_ENABLE;
361          next_menu_id = MENU_ID_MAIN;
362          LOGD("next_menu_id = MENU_ID_TINTLESSENABLE = %d\n", next_menu_id);
363          break;
364
365        case TOGGLE_SHDR:
366          * action_id_ptr = ACTION_TOGGLE_SHDR;
367          LOGD("next_menu_id = MENU_ID_TOGGLE SHDR = %d\n", next_menu_id);
368          break;
369
370        case SET_EXP_METERING:
371          next_menu_id = MENU_ID_EXPMETERINGCHANGE;
372          LOGD("next_menu_id = MENU_ID_EXPMETERINGCHANGE = %d\n", next_menu_id);
373          break;
374        case BRIGHTNESS_GOTO_SUBMENU:
375          next_menu_id = MENU_ID_BRIGHTNESSCHANGE;
376          LOGD("next_menu_id = MENU_ID_BRIGHTNESSCHANGE = %d\n", next_menu_id);
377          break;
378
379        case CONTRAST_GOTO_SUBMENU:
380          next_menu_id = MENU_ID_CONTRASTCHANGE;
381          break;
382
383        case EV_GOTO_SUBMENU:
384          next_menu_id = MENU_ID_EVCHANGE;
385          break;
386
387        case SATURATION_GOTO_SUBMENU:
388          next_menu_id = MENU_ID_SATURATIONCHANGE;
389          break;
390
391        case TOGGLE_EZTUNE:
392          * action_id_ptr = ACTION_TOGGLE_EZTUNE;
393          LOGD("next_menu_id = MENU_ID_TOGGLE EZTUNE = %d\n", next_menu_id);
394          break;
395        case TOGGLE_IRLED:
396          * action_id_ptr = ACTION_TOGGLE_IR_MODE;
397          LOGD("next_menu_id = MENU_ID_TOGGLE IRLED = %d\n", next_menu_id);
398          break;
399
400        case SET_ISO:
401          next_menu_id = MENU_ID_ISOCHANGE;
402          LOGD("next_menu_id = MENU_ID_ISOCHANGE = %d\n", next_menu_id);
403          break;
404
405        case SET_ZOOM:
406          next_menu_id = MENU_ID_ZOOMCHANGE;
407          LOGD("next_menu_id = MENU_ID_ZOOMCHANGE = %d\n", next_menu_id);
408          break;
409
410        case BEST_SHOT:
411          next_menu_id = MENU_ID_BESTSHOT;
412          LOGD("next_menu_id = MENU_ID_BESTSHOT = %d\n", next_menu_id);
413          break;
414
415        case LIVE_SHOT:
416          * action_id_ptr = ACTION_TAKE_LIVE_SNAPSHOT;
417          LOGD("\nTaking Live snapshot\n");
418          break;
419
420        case FLASH_MODES:
421          next_menu_id = MENU_ID_FLASHMODE;
422          LOGD("next_menu_id = MENU_ID_FLASHMODE = %d\n", next_menu_id);
423          break;
424
425        case SET_SHARPNESS:
426          next_menu_id = MENU_ID_SHARPNESSCHANGE;
427          LOGD("next_menu_id = MENU_ID_SHARPNESSCHANGE = %d\n", next_menu_id);
428          break;
429
430        case SWITCH_SNAP_RESOLUTION:
431          next_menu_id = MENU_ID_SWITCH_RES;
432          LOGD("next_menu_id = MENU_ID_SWITCH_RES = %d\n", next_menu_id);
433          break;
434
435        case TAKE_JPEG_SNAPSHOT:
436          * action_id_ptr = ACTION_TAKE_JPEG_SNAPSHOT;
437          printf("\n Taking JPEG snapshot\n");
438          break;
439
440        case START_RECORDING:
441          * action_id_ptr = ACTION_START_RECORDING;
442          LOGD("Start recording\n");
443          break;
444        case STOP_RECORDING:
445          * action_id_ptr = ACTION_STOP_RECORDING;
446          LOGD("Stop recording\n");
447          break;
448        case TOGGLE_ZSL:
449          * action_id_ptr = ACTION_TOGGLE_ZSL;
450          LOGD("Toggle ZSL\n");
451          break;
452        case TAKE_RAW_SNAPSHOT:
453          * action_id_ptr = ACTION_TAKE_RAW_SNAPSHOT;
454          next_menu_id = MENU_ID_MAIN;
455          LOGD("Capture RAW\n");
456          break;
457        case TOGGLE_WNR:
458          * action_id_ptr = ACTION_TOGGLE_WNR;
459          next_menu_id = MENU_ID_MAIN;
460          LOGD("Toggle WNR");
461          break;
462        case SPECIAL_EFFECTS:
463          next_menu_id = MENU_ID_SPECIAL_EFFECTS;
464          LOGD("next menu ID is set to MENU_ID_SPECIAL_EFFECTS\n");
465          break;
466        case ANTI_BANDING:
467          next_menu_id = MENU_ID_ANTI_BANDING;
468          LOGD("next menu ID is set to MENU_ID_ANTI_BANDING\n");
469          break;
470         case SET_FLIP_MODE:
471          next_menu_id = MENU_ID_FLIP_MODE;
472          LOGD("next menu ID is set to MENU_ID_FLIP_MODE\n");
473          break;
474        case BURST_MODE_SNAPSHOT:
475          * action_id_ptr = ACTION_BURST_MODE_SNAPSHOT;
476          next_menu_id = MENU_ID_MAIN;
477          break;
478        case CONCURRENT_NDR_NONHDR:
479          * action_id_ptr = ACTION_CONCURRENT_NDR_NONHDR;
480          next_menu_id = MENU_ID_MAIN;
481          break;
482        case EXIT:
483          * action_id_ptr = ACTION_EXIT;
484          LOGD("Exit \n");
485          break;
486        default:
487          next_menu_id = MENU_ID_MAIN;
488          LOGD("next_menu_id = MENU_ID_MAIN = %d\n", next_menu_id);
489          break;
490      }
491      break;
492
493    case MENU_ID_SWITCH_RES:
494        printf("MENU_ID_SWITCH_RES\n");
495        *action_id_ptr = ACTION_SWITCH_RESOLUTION;
496        *action_param = output_to_event;
497        int available_sizes = sizeof(dimension_tbl)/sizeof(dimension_tbl[0]);
498        if ( ( *action_param >= 0 ) &&
499             ( *action_param < available_sizes ) &&
500             ( dimension_tbl[*action_param].supported )) {
501            next_menu_id = MENU_ID_MAIN;
502        }
503        else {
504          next_menu_id = current_menu_id;
505        }
506        break;
507
508    case MENU_ID_SENSORS:
509        next_menu_id = MENU_ID_MAIN;
510        *action_id_ptr = ACTION_SWITCH_CAMERA;
511        *action_param = output_to_event;
512        break;
513
514    case MENU_ID_WHITEBALANCE_MANUAL:
515      printf("MENU_ID_WHITEBALANCE_MANUAL\n");
516      if (output_to_event >= MANUAL_WB_MAX) {
517        next_menu_id = current_menu_id;
518        * action_id_ptr = ACTION_NO_ACTION;
519      }else {
520        next_menu_id = MENU_ID_MAIN;
521        * action_id_ptr = ACTION_SET_MN_WHITE_BALANCE;
522        * action_param = output_to_event;
523      }
524      break;
525    case MENU_ID_WHITEBALANCECHANGE:
526      printf("MENU_ID_WHITEBALANCECHANGE\n");
527      if (output_to_event >= WB_MAX) {
528        next_menu_id = current_menu_id;
529        * action_id_ptr = ACTION_NO_ACTION;
530      }else {
531        next_menu_id = MENU_ID_MAIN;
532        * action_id_ptr = ACTION_SET_WHITE_BALANCE;
533        * action_param = output_to_event;
534      }
535      break;
536
537    case MENU_ID_EXPMETERINGCHANGE:
538      printf("MENU_ID_EXPMETERINGCHANGE\n");
539      if (output_to_event >= AUTO_EXP_MAX) {
540        next_menu_id = current_menu_id;
541        * action_id_ptr = ACTION_NO_ACTION;
542      } else {
543        next_menu_id = MENU_ID_MAIN;
544        * action_id_ptr = ACTION_SET_EXP_METERING;
545        * action_param = output_to_event;
546      }
547      break;
548
549    case MENU_ID_BRIGHTNESSCHANGE:
550      switch (output_to_event) {
551        case INC_BRIGHTNESS:
552          * action_id_ptr = ACTION_BRIGHTNESS_INCREASE;
553          next_menu_id = MENU_ID_MAIN;
554          break;
555
556        case DEC_BRIGHTNESS:
557          * action_id_ptr = ACTION_BRIGHTNESS_DECREASE;
558          next_menu_id = MENU_ID_MAIN;
559          break;
560
561        default:
562          next_menu_id = MENU_ID_BRIGHTNESSCHANGE;
563          break;
564      }
565      break;
566
567    case MENU_ID_CONTRASTCHANGE:
568      switch (output_to_event) {
569        case INC_CONTRAST:
570          * action_id_ptr = ACTION_CONTRAST_INCREASE;
571          next_menu_id = MENU_ID_MAIN;
572          break;
573
574        case DEC_CONTRAST:
575          * action_id_ptr = ACTION_CONTRAST_DECREASE;
576          next_menu_id = MENU_ID_MAIN;
577          break;
578
579        default:
580          next_menu_id = MENU_ID_CONTRASTCHANGE;
581          break;
582      }
583      break;
584
585    case MENU_ID_EVCHANGE:
586      switch (output_to_event) {
587        case INCREASE_EV:
588          * action_id_ptr = ACTION_EV_INCREASE;
589          next_menu_id = MENU_ID_MAIN;
590          break;
591
592        case DECREASE_EV:
593          * action_id_ptr = ACTION_EV_DECREASE;
594          next_menu_id = MENU_ID_MAIN;
595          break;
596
597        default:
598          next_menu_id = MENU_ID_EVCHANGE;
599          break;
600      }
601      break;
602
603    case MENU_ID_SATURATIONCHANGE:
604      switch (output_to_event) {
605        case INC_SATURATION:
606          * action_id_ptr = ACTION_SATURATION_INCREASE;
607          next_menu_id = MENU_ID_MAIN;
608          break;
609
610        case DEC_SATURATION:
611          * action_id_ptr = ACTION_SATURATION_DECREASE;
612          next_menu_id = MENU_ID_MAIN;
613          break;
614
615        default:
616          next_menu_id = MENU_ID_EVCHANGE;
617          break;
618      }
619      break;
620
621    case MENU_ID_ISOCHANGE:
622      printf("MENU_ID_ISOCHANGE\n");
623      if (output_to_event >= ISO_MAX) {
624        next_menu_id = current_menu_id;
625        * action_id_ptr = ACTION_NO_ACTION;
626      } else {
627        next_menu_id = MENU_ID_MAIN;
628        * action_id_ptr = ACTION_SET_ISO;
629        * action_param = output_to_event;
630      }
631      break;
632
633    case MENU_ID_ZOOMCHANGE:
634      switch(output_to_event){
635        case ZOOM_IN:
636        case ZOOM_OUT:
637            next_menu_id = MENU_ID_MAIN;
638            * action_id_ptr = ACTION_SET_ZOOM;
639            * action_param = output_to_event;
640            break;
641       default:
642            next_menu_id = current_menu_id;
643            * action_id_ptr = ACTION_NO_ACTION;
644      }
645      break;
646
647    case MENU_ID_SHARPNESSCHANGE:
648      switch (output_to_event) {
649        case INC_SHARPNESS:
650          * action_id_ptr = ACTION_SHARPNESS_INCREASE;
651          next_menu_id = MENU_ID_MAIN;
652          break;
653        case DEC_SHARPNESS:
654          * action_id_ptr = ACTION_SHARPNESS_DECREASE;
655          next_menu_id = MENU_ID_MAIN;
656          break;
657        default:
658          next_menu_id = MENU_ID_SHARPNESSCHANGE;
659          break;
660      }
661      break;
662
663    case MENU_ID_BESTSHOT:
664      if (output_to_event >= BESTSHOT_MAX) {
665        next_menu_id = current_menu_id;
666        * action_id_ptr = ACTION_NO_ACTION;
667      } else {
668        next_menu_id = MENU_ID_MAIN;
669        * action_id_ptr = ACTION_SET_BESTSHOT_MODE;
670        * action_param = output_to_event;
671      }
672      break;
673
674    case MENU_ID_FLASHMODE:
675      if (output_to_event >= FLASH_MODE_MAX) {
676        next_menu_id = current_menu_id;
677        * action_id_ptr = ACTION_NO_ACTION;
678      } else {
679        next_menu_id = MENU_ID_MAIN;
680        * action_id_ptr = ACTION_SET_FLASH_MODE;
681        * action_param = output_to_event;
682      }
683      break;
684
685    case MENU_ID_SPECIAL_EFFECTS:
686      if (output_to_event >= SPL_EFFECT_MAX) {
687        * action_id_ptr = ACTION_NO_ACTION;
688        next_menu_id = current_menu_id;
689      } else {
690        * action_id_ptr = ACTION_SPECIAL_EFFECTS;
691        next_menu_id = MENU_ID_MAIN;
692        * action_param = output_to_event;
693      }
694      break;
695
696    case MENU_ID_ANTI_BANDING:
697      if (output_to_event >= ANTIBANDING_MAX) {
698        * action_id_ptr = ACTION_NO_ACTION;
699        next_menu_id = current_menu_id;
700      } else {
701        * action_id_ptr = ACTION_ANTI_BANDING;
702        next_menu_id = MENU_ID_MAIN;
703        * action_param = output_to_event;
704      }
705      break;
706    case MENU_ID_FLIP_MODE:
707      if (output_to_event >= MODE_FLIP_MAX) {
708        * action_id_ptr = ACTION_NO_ACTION;
709        next_menu_id = current_menu_id;
710      } else {
711        * action_id_ptr = ACTION_FLIP_MODE;
712        next_menu_id = MENU_ID_MAIN;
713        * action_param = output_to_event;
714      }
715      break;
716   default:
717      LOGD("menu id is wrong: %d\n", current_menu_id);
718      break;
719  }
720
721  return next_menu_id;
722}
723
724/*===========================================================================
725 * FUNCTION    - print_menu_preview_video -
726 *
727 * DESCRIPTION:
728 * ===========================================================================*/
729static void print_menu_preview_video(void) {
730  unsigned int i;
731  if (!is_rec) {
732    printf("\n");
733    printf("===========================================\n");
734    printf("      Camera is in preview/video mode now        \n");
735    printf("===========================================\n\n");
736  } else {
737    printf("\n");
738    printf("===========================================\n");
739    printf("      Camera is in RECORDING mode now       \n");
740    printf("        Press 'Q' To Stop Recording          \n");
741    printf("        Press 'S' To Take Live Snapshot       \n");
742    printf("===========================================\n\n");
743  }
744  char menuNum = 'A';
745  for (i = 0; i < sizeof(camera_main_menu_tbl)/sizeof(camera_main_menu_tbl[0]); i++) {
746    if (i == BASE_OFFSET) {
747      menuNum = '1';
748    }
749
750    printf("%c.  %s\n", menuNum, camera_main_menu_tbl[i].menu_name);
751    menuNum++;
752  }
753
754  printf("\nPlease enter your choice: ");
755
756  return;
757}
758
759static void camera_preview_video_mn_wb_tbl(void) {
760  unsigned int i;
761  printf("\n");
762  printf("==========================================================\n");
763  printf("      Camera is in manual white balance change mode       \n");
764  printf("==========================================================\n\n");
765
766  char submenuNum = 'A';
767  for (i = 0 ; i < sizeof(mn_white_balance_tbl) /
768                   sizeof(mn_white_balance_tbl[0]); i++) {
769        printf("%c.  %s\n", submenuNum, mn_white_balance_tbl[i].wb_name);
770        submenuNum++;
771  }
772  printf("\nPlease enter your choice for White Balance modes: ");
773  return;
774}
775static void camera_preview_video_wb_change_tbl(void) {
776  unsigned int i;
777  printf("\n");
778  printf("==========================================================\n");
779  printf("      Camera is in white balance change mode       \n");
780  printf("==========================================================\n\n");
781
782  char submenuNum = 'A';
783  for (i = 0 ; i < sizeof(white_balance_tbl) /
784                   sizeof(white_balance_tbl[0]); i++) {
785        printf("%c.  %s\n", submenuNum, white_balance_tbl[i].wb_name);
786        submenuNum++;
787  }
788  printf("\nPlease enter your choice for White Balance modes: ");
789  return;
790}
791
792static void camera_preview_video_get_ctrl_value_tbl(void) {
793  unsigned int i;
794  printf("\n");
795  printf("==========================================================\n");
796  printf("      Camera is in get control value mode       \n");
797  printf("==========================================================\n\n");
798
799  char submenuNum = 'A';
800  for (i = 0 ; i < sizeof(get_ctrl_tbl) /
801                   sizeof(get_ctrl_tbl[0]); i++) {
802        printf("%c.  %s\n", submenuNum, get_ctrl_tbl[i].get_ctrl_name);
803        submenuNum++;
804  }
805  printf("\nPlease enter your choice for control value you want to get: ");
806  return;
807}
808
809static void camera_preview_video_exp_metering_change_tbl(void) {
810  unsigned int i;
811  printf("\n");
812  printf("==========================================================\n");
813  printf("      Camera is in exposure metering change mode       \n");
814  printf("==========================================================\n\n");
815
816  char submenuNum = 'A';
817  for (i = 0 ; i < sizeof(exp_metering_tbl) /
818                   sizeof(exp_metering_tbl[0]); i++) {
819        printf("%c.  %s\n", submenuNum, exp_metering_tbl[i].exp_metering_name);
820        submenuNum++;
821  }
822  printf("\nPlease enter your choice for exposure metering modes: ");
823  return;
824}
825
826static void camera_contrast_change_tbl(void) {
827    unsigned int i;
828
829    printf("\n");
830    printf("==========================================================\n");
831    printf("      Camera is in change contrast resolution mode       \n");
832    printf("==========================================================\n\n");
833
834    char contrastmenuNum = 'A';
835    for (i = 0; i < sizeof(contrast_change_tbl) /
836                    sizeof(contrast_change_tbl[0]); i++) {
837        printf("%c.  %s\n", contrastmenuNum,
838                            contrast_change_tbl[i].contrast_name);
839        contrastmenuNum++;
840    }
841
842    printf("\nPlease enter your choice for contrast Change: ");
843    return;
844}
845
846static void camera_EV_change_tbl(void) {
847  unsigned int i;
848
849  printf("\n");
850  printf("===========================================\n");
851  printf("      Camera is in EV change mode now       \n");
852  printf("===========================================\n\n");
853
854  char submenuNum = 'A';
855  for (i = 0; i < sizeof(camera_EV_tbl)/sizeof(camera_EV_tbl[0]); i++) {
856    printf("%c.  %s\n", submenuNum, camera_EV_tbl[i].EV_name);
857    submenuNum++;
858  }
859
860  printf("\nPlease enter your choice for EV changes: ");
861  return;
862}
863
864static void camera_resolution_change_tbl(void) {
865    unsigned int i;
866
867    printf("\n");
868    printf("==========================================================\n");
869    printf("      Camera is in snapshot resolution mode               \n");
870    printf("==========================================================\n\n");
871
872    char submenuNum = 'A';
873    for (i = 0; i < sizeof(dimension_tbl) /
874      sizeof(dimension_tbl[0]); i++) {
875        if ( dimension_tbl[i].supported ) {
876            printf("%c.  %s\n", submenuNum,
877                    dimension_tbl[i].str_name);
878            submenuNum++;
879        }
880    }
881
882    printf("\nPlease enter your choice for Resolution: ");
883    return;
884}
885
886static void camera_preview_video_zoom_change_tbl(void) {
887    unsigned int i;
888    zoom_max_value = MAX_ZOOMS_CNT;
889
890    char submenuNum = 'A';
891    for (i = 0 ; i < sizeof(zoom_tbl) /
892                   sizeof(zoom_tbl[0]); i++) {
893        printf("%c.  %s\n", submenuNum, zoom_tbl[i].zoom_direction_name);
894        submenuNum++;
895    }
896    printf("\nPlease enter your choice for zoom change direction: ");
897    return;
898}
899
900static void camera_brightness_change_tbl(void) {
901    unsigned int i;
902
903    printf("\n");
904    printf("==========================================================\n");
905    printf("      Camera is in change brightness mode       \n");
906    printf("==========================================================\n\n");
907
908    char brightnessmenuNum = 'A';
909    for (i = 0; i < sizeof(brightness_change_tbl) /
910                    sizeof(brightness_change_tbl[0]); i++) {
911        printf("%c.  %s\n", brightnessmenuNum,
912                            brightness_change_tbl[i].brightness_name);
913        brightnessmenuNum++;
914    }
915
916    printf("\nPlease enter your choice for Brightness Change: ");
917    return;
918}
919
920static void camera_saturation_change_tbl(void) {
921    unsigned int i;
922
923    printf("\n");
924    printf("==========================================================\n");
925    printf("      Camera is in change saturation mode       \n");
926    printf("==========================================================\n\n");
927
928    char saturationmenuNum = 'A';
929    for (i = 0; i < sizeof(camera_saturation_tbl) /
930                    sizeof(camera_saturation_tbl[0]); i++) {
931        printf("%c.  %s\n", saturationmenuNum,
932                            camera_saturation_tbl[i].saturation_name);
933        saturationmenuNum++;
934    }
935
936    printf("\nPlease enter your choice for Saturation Change: ");
937    return;
938}
939
940static void camera_preview_video_iso_change_tbl(void) {
941  unsigned int i;
942  printf("\n");
943  printf("==========================================================\n");
944  printf("      Camera is in ISO change mode       \n");
945  printf("==========================================================\n\n");
946
947  char submenuNum = 'A';
948  for (i = 0 ; i < sizeof(iso_tbl) /
949                   sizeof(iso_tbl[0]); i++) {
950        printf("%c.  %s\n", submenuNum, iso_tbl[i].iso_modes_name);
951        submenuNum++;
952  }
953  printf("\nPlease enter your choice for iso modes: ");
954  return;
955}
956
957static void camera_preview_video_sharpness_change_tbl(void) {
958  unsigned int i;
959  printf("\n");
960  printf("==========================================================\n");
961  printf("      Camera is in sharpness change mode       \n");
962  printf("==========================================================\n\n");
963
964  char submenuNum = 'A';
965  for (i = 0 ; i < sizeof(camera_sharpness_tbl) /
966                   sizeof(camera_sharpness_tbl[0]); i++) {
967        printf("%c.  %s\n", submenuNum, camera_sharpness_tbl[i].sharpness_name);
968        submenuNum++;
969  }
970  printf("\nPlease enter your choice for sharpness modes: ");
971  return;
972}
973
974static void camera_set_bestshot_tbl(void)
975{
976  unsigned int i;
977
978  printf("\n");
979  printf("===========================================\n");
980  printf("      Camera is in set besthot mode now       \n");
981  printf("===========================================\n\n");
982
983
984  char bsmenuNum = 'A';
985  for (i = 0; i < sizeof(bestshot_mode_tbl)/sizeof(bestshot_mode_tbl[0]); i++) {
986    printf("%c.  %s\n", bsmenuNum,
987      bestshot_mode_tbl[i].name);
988    bsmenuNum++;
989  }
990
991  printf("\nPlease enter your choice of Bestshot Mode: ");
992  return;
993}
994
995static void camera_set_flashmode_tbl(void)
996{
997  unsigned int i;
998
999  printf("\n");
1000  printf("===========================================\n");
1001  printf("      Camera is in set flash mode now       \n");
1002  printf("===========================================\n\n");
1003
1004
1005  char bsmenuNum = 'A';
1006  for (i = 0; i < sizeof(flashmodes_tbl)/sizeof(flashmodes_tbl[0]); i++) {
1007    printf("%c.  %s\n", bsmenuNum,
1008      flashmodes_tbl[i].name);
1009    bsmenuNum++;
1010  }
1011
1012  printf("\nPlease enter your choice of Bestshot Mode: ");
1013  return;
1014}
1015
1016static void camera_sensors_tbl(void)
1017{
1018  unsigned int i;
1019  size_t available_sensors = sizeof(sensor_tbl)/sizeof(sensor_tbl[0]);
1020
1021  printf("\n");
1022  printf("===========================================\n");
1023  printf("      Camera Sensor to be used:            \n");
1024  printf("===========================================\n\n");
1025
1026
1027  char bsmenuNum = 'A';
1028  for (i = 0; ( i < available_sensors ) && ( sensor_tbl[i].present ) ; i++) {
1029    printf("%c.  %s\n", bsmenuNum,
1030            sensor_tbl[i].menu_name);
1031    bsmenuNum++;
1032  }
1033
1034  printf("\nPlease enter your choice for sensor: ");
1035  return;
1036}
1037
1038static void camera_special_effects_tbl(void)
1039{
1040  unsigned int i;
1041  size_t available_effects = sizeof(camEffect_mode_tbl)/sizeof(camEffect_mode_tbl[0]);
1042
1043  printf("\n");
1044  printf("===========================================\n");
1045  printf("      Camera Available Special Effects:            \n");
1046  printf("===========================================\n\n");
1047
1048
1049  char bsmenuNum = 'A';
1050  for (i = 0; ( i < available_effects ) ; i++) {
1051    printf("%c.  %s\n", bsmenuNum,
1052            camEffect_mode_tbl[i].name);
1053    bsmenuNum++;
1054  }
1055
1056  printf("\nPlease enter your choice for sensor: ");
1057  return;
1058}
1059
1060static void camera_anti_banding_tbl(void)
1061{
1062  unsigned int i;
1063  size_t available_effects = sizeof(antiBanding_tbl)/sizeof(antiBanding_tbl[0]);
1064
1065  printf("\n");
1066  printf("===========================================\n");
1067  printf("      Camera Available Anti Banding Options:            \n");
1068  printf("===========================================\n\n");
1069
1070
1071  char bsmenuNum = 'A';
1072  for (i = 0; ( i < available_effects ) ; i++) {
1073    printf("%c.  %s\n", bsmenuNum,
1074            antiBanding_tbl[i].name);
1075    bsmenuNum++;
1076  }
1077
1078  printf("\nPlease enter your choice for sensor: ");
1079  return;
1080}
1081
1082static void camera_flip_tbl(void)
1083{
1084  unsigned int i;
1085  size_t available_effects = sizeof(flipModes_tbl)/sizeof(flipModes_tbl[0]);
1086
1087  printf("\n");
1088  printf("===========================================\n");
1089  printf("      Camera Available FLIP MODES:            \n");
1090  printf("===========================================\n\n");
1091
1092
1093  char bsmenuNum = 'A';
1094  for (i = 0; ( i < available_effects ) ; i++) {
1095    printf("%c.  %s\n", bsmenuNum,
1096            flipModes_tbl[i].name);
1097    bsmenuNum++;
1098  }
1099
1100  printf("\nPlease enter your choice for sensor: ");
1101  return;
1102}
1103
1104/*===========================================================================
1105 * FUNCTION     - increase_contrast -
1106 *
1107 * DESCRIPTION:
1108 * ===========================================================================*/
1109int increase_contrast (mm_camera_lib_handle *lib_handle) {
1110        contrast += CAMERA_CONTRAST_STEP;
1111        if (contrast > CAMERA_MAX_CONTRAST) {
1112                contrast = CAMERA_MAX_CONTRAST;
1113                printf("Reached max CONTRAST. \n");
1114        }
1115        printf("Increase Contrast to %d\n", contrast);
1116        return mm_camera_lib_send_command(lib_handle,
1117                                          MM_CAMERA_LIB_CONTRAST,
1118                                          &contrast,
1119                                          NULL);
1120}
1121
1122/*===========================================================================
1123 * FUNCTION     - decrease_contrast -
1124 *
1125 * DESCRIPTION:
1126 * ===========================================================================*/
1127int decrease_contrast (mm_camera_lib_handle *lib_handle) {
1128        contrast -= CAMERA_CONTRAST_STEP;
1129        if (contrast < CAMERA_MIN_CONTRAST) {
1130                contrast = CAMERA_MIN_CONTRAST;
1131                printf("Reached min CONTRAST. \n");
1132        }
1133        printf("Decrease Contrast to %d\n", contrast);
1134        return mm_camera_lib_send_command(lib_handle,
1135                                          MM_CAMERA_LIB_CONTRAST,
1136                                          &contrast,
1137                                          NULL);
1138}
1139
1140/*===========================================================================
1141 * FUNCTION     - decrease_brightness -
1142 *
1143 * DESCRIPTION:
1144 * ===========================================================================*/
1145int decrease_brightness (mm_camera_lib_handle *lib_handle) {
1146        brightness -= CAMERA_BRIGHTNESS_STEP;
1147        if (brightness < CAMERA_MIN_BRIGHTNESS) {
1148                brightness = CAMERA_MIN_BRIGHTNESS;
1149                printf("Reached min BRIGHTNESS. \n");
1150        }
1151        printf("Decrease Brightness to %d\n", brightness);
1152        return mm_camera_lib_send_command(lib_handle,
1153                                          MM_CAMERA_LIB_BRIGHTNESS,
1154                                          &brightness,
1155                                          NULL);
1156}
1157
1158/*===========================================================================
1159 * FUNCTION     - increase_brightness -
1160 *
1161 * DESCRIPTION:
1162 * ===========================================================================*/
1163int increase_brightness (mm_camera_lib_handle *lib_handle) {
1164        brightness += CAMERA_BRIGHTNESS_STEP;
1165        if (brightness > CAMERA_MAX_BRIGHTNESS) {
1166                brightness = CAMERA_MAX_BRIGHTNESS;
1167                printf("Reached max BRIGHTNESS. \n");
1168        }
1169        printf("Increase Brightness to %d\n", brightness);
1170        return mm_camera_lib_send_command(lib_handle,
1171                                          MM_CAMERA_LIB_BRIGHTNESS,
1172                                          &brightness,
1173                                          NULL);
1174}
1175
1176/*===========================================================================
1177 * FUNCTION     - increase_EV -
1178 *
1179 * DESCRIPTION:
1180 * ===========================================================================*/
1181
1182int increase_EV (mm_camera_lib_handle *lib_handle) {
1183
1184    ev_numerator += 4;
1185    if(ev_numerator >= EXPOSURE_COMPENSATION_MINIMUM_NUMERATOR &&
1186            ev_numerator <= EXPOSURE_COMPENSATION_MAXIMUM_NUMERATOR){
1187
1188    } else {
1189       printf("Reached max EV.\n");
1190    }
1191    printf("Increase EV to %d\n", ev_numerator);
1192    return mm_camera_lib_send_command(lib_handle,
1193                                       MM_CAMERA_LIB_EV,
1194                                       &ev_numerator,
1195                                       NULL);
1196}
1197
1198/*===========================================================================
1199 * FUNCTION     - decrease_EV -
1200 *
1201 * DESCRIPTION:
1202 * ===========================================================================*/
1203int decrease_EV (mm_camera_lib_handle *lib_handle) {
1204
1205    ev_numerator -= 4;
1206    if(ev_numerator >= EXPOSURE_COMPENSATION_MINIMUM_NUMERATOR &&
1207            ev_numerator <= EXPOSURE_COMPENSATION_MAXIMUM_NUMERATOR){
1208
1209    } else {
1210       printf("Reached min EV.\n");
1211    }
1212    printf("Decrease EV to %d\n", ev_numerator);
1213    return mm_camera_lib_send_command(lib_handle,
1214                                       MM_CAMERA_LIB_EV,
1215                                       &ev_numerator,
1216                                       NULL);
1217
1218}
1219
1220/*===========================================================================
1221 * FUNCTION     - increase_saturation -
1222 *
1223 * DESCRIPTION:
1224 * ===========================================================================*/
1225int increase_saturation (mm_camera_lib_handle *lib_handle) {
1226#if 0
1227  saturation += CAMERA_SATURATION_STEP;
1228  if (saturation > CAMERA_MAX_SATURATION) {
1229    saturation = CAMERA_MAX_SATURATION;
1230    printf("Reached max saturation. \n");
1231  }
1232  printf("Increase Saturation to %d\n", saturation);
1233  return mm_app_set_config_parm(cam_id, MM_CAMERA_PARM_SATURATION, saturation);
1234#endif
1235  saturation += CAMERA_SATURATION_STEP;
1236  if (saturation > CAMERA_MAX_SATURATION) {
1237    saturation = CAMERA_MAX_SATURATION;
1238    printf("Reached max saturation. \n");
1239  }
1240  printf("Increase saturation to %d\n", saturation);
1241  return mm_camera_lib_send_command(lib_handle,
1242                                       MM_CAMERA_LIB_SATURATION,
1243                                       &saturation,
1244                                       NULL);
1245}
1246
1247/*===========================================================================
1248 * FUNCTION     - decrease_saturation -
1249 *
1250 * DESCRIPTION:
1251 * ===========================================================================*/
1252int decrease_saturation (mm_camera_lib_handle *lib_handle) {
1253#if 0
1254  saturation -= CAMERA_SATURATION_STEP;
1255  if (saturation < CAMERA_MIN_SATURATION) {
1256    saturation = CAMERA_MIN_SATURATION;
1257    printf("Reached min saturation. \n");
1258  }
1259  printf("Dcrease Saturation to %d\n", saturation);
1260  return mm_app_set_config_parm(cam_id, MM_CAMERA_PARM_SATURATION, saturation);
1261#endif
1262  saturation -= CAMERA_SATURATION_STEP;
1263  if (saturation < CAMERA_MIN_SATURATION) {
1264    saturation = CAMERA_MIN_SATURATION;
1265    printf("Reached min saturation. \n");
1266  }
1267  printf("decrease saturation to %d\n", saturation);
1268  return mm_camera_lib_send_command(lib_handle,
1269                                       MM_CAMERA_LIB_SATURATION,
1270                                       &saturation,
1271                                       NULL);
1272}
1273
1274
1275int take_jpeg_snapshot(mm_camera_test_obj_t *test_obj, int is_burst_mode)
1276{
1277  LOGH("\nEnter take_jpeg_snapshot!!\n");
1278  int rc = mm_app_take_picture (test_obj, (uint8_t)is_burst_mode);
1279  if (MM_CAMERA_OK != rc) {
1280    LOGE(" mm_app_take_picture() err=%d\n",  rc);
1281  }
1282  return rc;
1283}
1284
1285/*===========================================================================
1286 * FUNCTION    - main -
1287 *
1288 * DESCRIPTION:
1289 *==========================================================================*/
1290int main()
1291{
1292    char tc_buf[3];
1293    int mode = 0;
1294    int rc = 0;
1295
1296    printf("Please Select Execution Mode:\n");
1297    printf("0: Menu Based 1: Regression\n");
1298    fgets(tc_buf, 3, stdin);
1299    mode = tc_buf[0] - '0';
1300    if(mode == 0) {
1301      printf("\nStarting Menu based!!\n");
1302    } else if(mode == 1) {
1303      printf("Starting Regression testing!!\n");
1304      if(!mm_app_start_regression_test(1)) {
1305         printf("\nRegressiion test passed!!\n");
1306         return 0;
1307      } else {
1308        printf("\nRegression test failed!!\n");
1309        exit(-1);
1310      }
1311    } else {
1312       printf("\nPlease Enter 0 or 1\n");
1313       printf("\nExisting the App!!\n");
1314       exit(-1);
1315    }
1316
1317
1318    rc = submain();
1319
1320    printf("Exiting application\n");
1321
1322    return rc;
1323}
1324/*===========================================================================
1325 * FUNCTION     - set_manual_whitebalance -
1326 *
1327 * DESCRIPTION:
1328 * ===========================================================================*/
1329int set_manual_whitebalance (mm_camera_lib_handle *lib_handle, int wb_action_param) {
1330
1331    cam_manual_wb_parm_t manual_info ;
1332    float fgain[3];
1333    char data[20], *pSTR, *ePTR;
1334    int iV, i;
1335
1336    switch (wb_action_param) {
1337      case CAM_MANUAL_WB_MODE_CCT:
1338           printf("\nCAM_MANUAL_WB_MODE_CCT\n");
1339           manual_info.type = CAM_MANUAL_WB_MODE_CCT;
1340           #if 1
1341           printf("\nEnter CCT value:");
1342           fgets(data, sizeof(data), stdin);
1343
1344           for (pSTR = data; ; pSTR = ePTR) {
1345               iV = strtod(pSTR, &ePTR);
1346               if (pSTR == ePTR)
1347                  break;
1348               manual_info.cct = iV;
1349               if (*ePTR == '\n')
1350                  break;
1351           }
1352          #endif
1353          LOGD("you entered: %d\n", manual_info.cct);
1354          break;
1355      case CAM_MANUAL_WB_MODE_GAIN:
1356           printf("\nCAM_MANUAL_WB_MODE_GAIN\n");
1357           manual_info.type = CAM_MANUAL_WB_MODE_GAIN;
1358           #if 1
1359           i = 0;
1360           printf("\nEnter R, G, B gain value (separated by whitespace):");
1361           fgets(data, sizeof(data), stdin);
1362
1363           for (pSTR = data; ; pSTR = ePTR) {
1364               fgain[i] = strtof(pSTR, &ePTR);
1365               if (pSTR == ePTR)
1366                  break;
1367               if (*ePTR == '\n')
1368                  break;
1369               i++;
1370           }
1371           #endif
1372           manual_info.gains.r_gain = fgain[0];
1373           manual_info.gains.g_gain = fgain[1];
1374           manual_info.gains.b_gain = fgain[2];
1375
1376           LOGD("you entered: %f\n",
1377               manual_info.gains.r_gain);
1378           LOGD("you entered: %f\n",
1379               manual_info.gains.g_gain);
1380           LOGD("you entered: %f\n",
1381               manual_info.gains.b_gain);
1382           break;
1383      default:
1384           break;
1385    }
1386
1387    return mm_camera_lib_send_command(lib_handle,
1388                                     MM_CAMERA_LIB_MN_WB,
1389                                     &manual_info,
1390                                     NULL);
1391}
1392/*===========================================================================
1393 * FUNCTION     - set_whitebalance -
1394 *
1395 * DESCRIPTION:
1396 * ===========================================================================*/
1397int set_whitebalance (mm_camera_lib_handle *lib_handle, int wb_action_param) {
1398        cam_wb_mode_type type = 0;
1399        switch (wb_action_param) {
1400                case WB_OFF:
1401                        printf("\n WB_OFF\n");
1402                        type = CAM_WB_MODE_OFF;
1403                        break;
1404                case WB_AUTO:
1405                        printf("\n WB_AUTO\n");
1406                        type = CAM_WB_MODE_AUTO;
1407                        break;
1408                case WB_INCANDESCENT:
1409                        printf("\n WB_INCANDESCENT\n");
1410                        type = CAM_WB_MODE_INCANDESCENT;
1411                        break;
1412                case WB_FLUORESCENT:
1413                        printf("\n WB_FLUORESCENT\n");
1414                        type = CAM_WB_MODE_FLUORESCENT;
1415                        break;
1416                case WB_WARM_FLUORESCENT:
1417                        printf("\n WB_WARM_FLUORESCENT\n");
1418                        type = CAM_WB_MODE_WARM_FLUORESCENT;
1419                        break;
1420                case WB_DAYLIGHT:
1421                        printf("\n WB_DAYLIGHT\n");
1422                        type = CAM_WB_MODE_DAYLIGHT;
1423                        break;
1424                case WB_CLOUDY_DAYLIGHT:
1425                        printf("\n WB_CLOUDY_DAYLIGHT\n");
1426                        type = CAM_WB_MODE_CLOUDY_DAYLIGHT;
1427                        break;
1428               case WB_TWILIGHT:
1429                        printf("\n WB_TWILIGHT\n");
1430                        type = CAM_WB_MODE_TWILIGHT;
1431                        break;
1432               case WB_SHADE:
1433                        printf("\n WB_SHADE\n");
1434                        type = CAM_WB_MODE_SHADE;
1435                        break;
1436               case WB_MANUAL:
1437                        printf("\n WB_WB_MANUAL\n");
1438                        type = CAM_WB_MODE_MANUAL;
1439                        break;
1440                default:
1441                        break;
1442        }
1443        return mm_camera_lib_send_command(lib_handle,
1444                                          MM_CAMERA_LIB_WB,
1445                                          &type,
1446                                          NULL);
1447}
1448
1449
1450/*===========================================================================
1451 * FUNCTION     - set_exp_metering -
1452 *
1453 * DESCRIPTION:
1454 * ===========================================================================*/
1455int set_exp_metering (mm_camera_lib_handle *lib_handle, int exp_metering_action_param) {
1456        cam_auto_exposure_mode_type type = 0;
1457        switch (exp_metering_action_param) {
1458		case AUTO_EXP_FRAME_AVG:
1459                        printf("\nAUTO_EXP_FRAME_AVG\n");
1460                        type = CAM_AEC_MODE_FRAME_AVERAGE;
1461                        break;
1462                case AUTO_EXP_CENTER_WEIGHTED:
1463                        printf("\n AUTO_EXP_CENTER_WEIGHTED\n");
1464                        type = CAM_AEC_MODE_CENTER_WEIGHTED;
1465                        break;
1466                case AUTO_EXP_SPOT_METERING:
1467                        printf("\n AUTO_EXP_SPOT_METERING\n");
1468                        type = CAM_AEC_MODE_SPOT_METERING;
1469                        break;
1470                case AUTO_EXP_SMART_METERING:
1471                        printf("\n AUTO_EXP_SMART_METERING\n");
1472                        type = CAM_AEC_MODE_SMART_METERING;
1473                        break;
1474                case AUTO_EXP_USER_METERING:
1475                        printf("\n AUTO_EXP_USER_METERING\n");
1476                        type = CAM_AEC_MODE_USER_METERING;
1477                        break;
1478                case AUTO_EXP_SPOT_METERING_ADV:
1479                        printf("\n AUTO_EXP_SPOT_METERING_ADV\n");
1480                        type = CAM_AEC_MODE_SPOT_METERING_ADV;
1481                        break;
1482                case AUTO_EXP_CENTER_WEIGHTED_ADV:
1483                        printf("\n AUTO_EXP_CENTER_WEIGHTED_ADV\n");
1484                        type = CAM_AEC_MODE_CENTER_WEIGHTED_ADV;
1485                        break;
1486                default:
1487                        break;
1488        }
1489        return mm_camera_lib_send_command(lib_handle,
1490                                          MM_CAMERA_LIB_EXPOSURE_METERING,
1491                                          &type,
1492                                          NULL);
1493}
1494
1495int get_ctrl_value (int ctrl_value_mode_param){
1496#if 0
1497    int rc = 0;
1498    struct v4l2_control ctrl;
1499
1500    if (ctrl_value_mode_param == WHITE_BALANCE_STATE) {
1501        printf("You chose WHITE_BALANCE_STATE\n");
1502        ctrl.id = V4L2_CID_AUTO_WHITE_BALANCE;
1503    }
1504    else if (ctrl_value_mode_param == WHITE_BALANCE_TEMPERATURE) {
1505        printf("You chose WHITE_BALANCE_TEMPERATURE\n");
1506        ctrl.id = V4L2_CID_WHITE_BALANCE_TEMPERATURE;
1507    }
1508    else if (ctrl_value_mode_param == BRIGHTNESS_CTRL) {
1509        printf("You chose brightness value\n");
1510        ctrl.id = V4L2_CID_BRIGHTNESS;
1511    }
1512    else if (ctrl_value_mode_param == EV) {
1513        printf("You chose exposure value\n");
1514        ctrl.id = V4L2_CID_EXPOSURE;
1515    }
1516    else if (ctrl_value_mode_param == CONTRAST_CTRL) {
1517        printf("You chose contrast value\n");
1518        ctrl.id = V4L2_CID_CONTRAST;
1519    }
1520    else if (ctrl_value_mode_param == SATURATION_CTRL) {
1521        printf("You chose saturation value\n");
1522        ctrl.id = V4L2_CID_SATURATION;
1523    } else if (ctrl_value_mode_param == SHARPNESS_CTRL) {
1524        printf("You chose sharpness value\n");
1525        ctrl.id = V4L2_CID_SHARPNESS;
1526    }
1527
1528  //  rc = ioctl(camfd, VIDIOC_G_CTRL, &ctrl);
1529    return rc;
1530#endif
1531  return ctrl_value_mode_param;
1532}
1533
1534/*===========================================================================
1535 * FUNCTION     - toggle_afr -
1536 *
1537 * DESCRIPTION:
1538 * ===========================================================================*/
1539int toggle_afr () {
1540#if 0
1541    if (fps_mode == FPS_MODE_AUTO) {
1542        printf("\nSetting FPS_MODE_FIXED\n");
1543        fps_mode = FPS_MODE_FIXED;
1544    } else {
1545        printf("\nSetting FPS_MODE_AUTO\n");
1546        fps_mode = FPS_MODE_AUTO;
1547    }
1548    return mm_app_set_config_parm(cam_id, MM_CAMERA_PARM_FPS_MODE, fps_mode);
1549#endif
1550  return 0;
1551}
1552int set_zoom (mm_camera_lib_handle *lib_handle, int zoom_action_param) {
1553
1554    if (zoom_action_param == ZOOM_IN) {
1555        zoom_level += ZOOM_STEP;
1556        if (zoom_level > zoom_max_value)
1557            zoom_level = zoom_max_value;
1558    } else if (zoom_action_param == ZOOM_OUT) {
1559        zoom_level -= ZOOM_STEP;
1560        if (zoom_level < ZOOM_MIN_VALUE)
1561            zoom_level = ZOOM_MIN_VALUE;
1562    } else {
1563        LOGD(" Invalid zoom_action_param value\n");
1564        return -EINVAL;
1565    }
1566    return mm_camera_lib_send_command(lib_handle,
1567                                      MM_CAMERA_LIB_ZOOM,
1568                                      &zoom_level,
1569                                      NULL);
1570}
1571
1572/*===========================================================================
1573 * FUNCTION     - set_iso -
1574 *
1575 * DESCRIPTION:
1576 * ===========================================================================*/
1577int set_iso (mm_camera_lib_handle *lib_handle, int iso_action_param) {
1578    cam_iso_mode_type type = 0;
1579    switch (iso_action_param) {
1580        case ISO_AUTO:
1581            printf("\n ISO_AUTO\n");
1582            type = CAM_ISO_MODE_AUTO;
1583            break;
1584        case ISO_DEBLUR:
1585            printf("\n ISO_DEBLUR\n");
1586            type = CAM_ISO_MODE_DEBLUR;
1587            break;
1588        case ISO_100:
1589            printf("\n ISO_100\n");
1590            type = CAM_ISO_MODE_100;
1591            break;
1592        case ISO_200:
1593            printf("\n ISO_200\n");
1594            type = CAM_ISO_MODE_200;
1595            break;
1596        case ISO_400:
1597            printf("\n ISO_400\n");
1598            type = CAM_ISO_MODE_400;
1599            break;
1600        case ISO_800:
1601            printf("\n ISO_800\n");
1602            type = CAM_ISO_MODE_800;
1603            break;
1604        case ISO_1600:
1605            printf("\n ISO_1600\n");
1606            type = CAM_ISO_MODE_1600;
1607            break;
1608        default:
1609            break;
1610    }
1611    return mm_camera_lib_send_command(lib_handle,
1612                                      MM_CAMERA_LIB_ISO,
1613                                      &type,
1614                                      NULL);
1615}
1616
1617/*===========================================================================
1618 * FUNCTION     - increase_sharpness -
1619 *
1620 * DESCRIPTION:
1621 * ===========================================================================*/
1622int increase_sharpness (mm_camera_lib_handle *lib_handle) {
1623    sharpness += CAMERA_SHARPNESS_STEP;
1624    if (sharpness > CAMERA_MAX_SHARPNESS) {
1625        sharpness = CAMERA_MAX_SHARPNESS;
1626        printf("Reached max SHARPNESS. \n");
1627    }
1628    printf("Increase Sharpness to %d\n", sharpness);
1629    return mm_camera_lib_send_command(lib_handle,
1630                                      MM_CAMERA_LIB_SHARPNESS,
1631                                      &sharpness,
1632                                      NULL);
1633}
1634
1635/*===========================================================================
1636 * FUNCTION     - decrease_sharpness -
1637 *
1638 * DESCRIPTION:
1639 * ===========================================================================*/
1640int decrease_sharpness (mm_camera_lib_handle *lib_handle) {
1641    sharpness -= CAMERA_SHARPNESS_STEP;
1642    if (sharpness < CAMERA_MIN_SHARPNESS) {
1643        sharpness = CAMERA_MIN_SHARPNESS;
1644        printf("Reached min SHARPNESS. \n");
1645    }
1646    printf("Decrease Sharpness to %d\n", sharpness);
1647    return mm_camera_lib_send_command(lib_handle,
1648                                      MM_CAMERA_LIB_SHARPNESS,
1649                                      &sharpness,
1650                                      NULL);
1651}
1652
1653int set_flash_mode (mm_camera_lib_handle *lib_handle, int action_param) {
1654    cam_flash_mode_t type = 0;
1655    switch (action_param) {
1656        case FLASH_MODE_OFF:
1657            printf("\n FLASH_MODE_OFF\n");
1658            type = CAM_FLASH_MODE_OFF;
1659            break;
1660        case FLASH_MODE_AUTO:
1661            printf("\n FLASH_MODE_AUTO\n");
1662            type = CAM_FLASH_MODE_AUTO;
1663            break;
1664        case FLASH_MODE_ON:
1665            printf("\n FLASH_MODE_ON\n");
1666            type = CAM_FLASH_MODE_ON;
1667            break;
1668        case FLASH_MODE_TORCH:
1669            printf("\n FLASH_MODE_TORCH\n");
1670            type = CAM_FLASH_MODE_TORCH;
1671            break;
1672        default:
1673            break;
1674    }
1675    return mm_camera_lib_send_command(lib_handle,
1676                                      MM_CAMERA_LIB_FLASH,
1677                                      &type,
1678                                      NULL);
1679}
1680
1681int set_specialEffects(mm_camera_lib_handle *lib_handle, int action_param) {
1682    cam_effect_mode_type effect = 0;
1683
1684    switch (action_param) {
1685        case SPL_EFFECT_OFF:
1686            printf("\n SPECIAL EFFECT OFF\n");
1687            effect  = CAM_EFFECT_MODE_OFF ;
1688            break;
1689        case SPL_EFFECT_MONO:
1690            printf("\n SPECIAL EFFECT MONO\n");
1691            effect  = CAM_EFFECT_MODE_MONO;
1692            break;
1693        case SPL_EFFECT_NEGATIVE:
1694            printf("\n SPECIAL EFFECT NEGATIVE\n");
1695            effect  = CAM_EFFECT_MODE_NEGATIVE;
1696            break;
1697        case SPL_EFFECT_SOLARIZE:
1698            printf("\n SPECIAL EFFECT SOLARIZE\n");
1699            effect  = CAM_EFFECT_MODE_SOLARIZE ;
1700            break;
1701        case SPL_EFFECT_SEPIA:
1702            printf("\n SPECIAL EFFECT SEPIA\n");
1703            effect  = CAM_EFFECT_MODE_SEPIA ;
1704            break;
1705        case SPL_EFFECT_POSTERIZE:
1706            printf("\n SPECIAL EFFECT POSTERIZE\n");
1707            effect  = CAM_EFFECT_MODE_POSTERIZE ;
1708            break;
1709        case SPL_EFFECT_WHITEBOARD:
1710            printf("\n SPECIAL EFFECT WHITEBOARD\n");
1711            effect  = CAM_EFFECT_MODE_WHITEBOARD ;
1712            break;
1713        case SPL_EFFECT_BLACKBOARD:
1714            printf("\n SPECIAL EFFECT BLACKBOARD\n");
1715            effect  = CAM_EFFECT_MODE_BLACKBOARD ;
1716            break;
1717        case SPL_EFFECT_AQUA:
1718            printf("\n SPECIAL EFFECT AQUA\n");
1719            effect  = CAM_EFFECT_MODE_AQUA ;
1720            break;
1721        case SPL_EFFECT_EMBOSS:
1722            printf("\n SPECIAL EFFECT EMBOSS\n");
1723            effect  = CAM_EFFECT_MODE_EMBOSS ;
1724            break;
1725        case SPL_EFFECT_SKETCH:
1726            printf("\n SPECIAL EFFECT SKETCH\n");
1727            effect  = CAM_EFFECT_MODE_SKETCH ;
1728            break;
1729        case SPL_EFFECT_NEON:
1730            printf("\n SPECIAL EFFECT NEON\n");
1731            effect  = CAM_EFFECT_MODE_NEON ;
1732            break;
1733        case SPL_EFFECT_BEAUTY:
1734            printf("\n SPECIAL EFFECT BEAUTY\n");
1735            effect  = CAM_EFFECT_MODE_BEAUTY ;
1736            break;
1737        default:
1738            printf("\n SPECIAL EFFECT OFF\n");
1739            effect  = CAM_EFFECT_MODE_OFF ;
1740            break;
1741        }
1742        return mm_camera_lib_send_command(lib_handle,
1743                                          MM_CAMERA_LIB_SPL_EFFECT,
1744                                          &effect,
1745                                          NULL);
1746}
1747
1748int set_antiBanding(mm_camera_lib_handle *lib_handle, int action_param) {
1749    cam_antibanding_mode_type effect = 0;
1750
1751    switch (action_param) {
1752        case ANTIBANDING_OFF:
1753            printf("\n ANTI BANDING OFF\n");
1754            effect  = CAM_ANTIBANDING_MODE_OFF;
1755            break;
1756        case ANTIBANDING_60HZ:
1757            printf("\n ANTI BANDING 60 HZ\n");
1758            effect  = CAM_ANTIBANDING_MODE_60HZ;
1759            break;
1760        case ANTIBANDING_50HZ:
1761            printf("\n ANTI BANDING 50 HZ\n");
1762            effect  = CAM_ANTIBANDING_MODE_50HZ;
1763            break;
1764        case ANTIBANDING_AUTO:
1765            printf("\n ANTI BANDING AUTO\n");
1766            effect  = CAM_ANTIBANDING_MODE_AUTO;
1767            break;
1768        default:
1769            printf("\n ANTI BANDING OFF\n");
1770            effect  = CAM_ANTIBANDING_MODE_OFF;
1771            break;
1772        }
1773        return mm_camera_lib_send_command(lib_handle,
1774                                          MM_CAMERA_LIB_ANTIBANDING,
1775                                          &effect,
1776                                          NULL);
1777}
1778int set_flipMode(mm_camera_lib_handle *lib_handle, int action_param) {
1779    cam_flip_t effect = 0;
1780
1781    printf("%s:action_param = %d", __func__, action_param);
1782
1783    switch (action_param) {
1784        case MODE_NO_FLIP:
1785            printf("\n FLIP MODE OFF\n");
1786            effect  = FLIP_NONE;
1787            break;
1788        case MODE_FLIP_H:
1789            printf("\n FLIP MODE HORIZONTAL\n");
1790            effect  = FLIP_H;
1791            break;
1792        case MODE_FLIP_V:
1793            printf("\n FLIP MODE VERTICAL\n");
1794            effect  = FLIP_V;
1795            break;
1796        case MODE_FLIP_V_H:
1797            printf("\n FLIP MODE VERTICAL HORIZONTAL\n");
1798            effect  = FLIP_V_H;
1799            break;
1800        default:
1801            printf("\n FLIP MODE OFF\n");
1802            effect  = FLIP_NONE;
1803            break;
1804        }
1805        return mm_camera_lib_send_command(lib_handle,
1806                                          MM_CAMERA_LIB_FLIP,
1807                                          &effect,
1808                                          NULL);
1809}
1810
1811int set_bestshot_mode(mm_camera_lib_handle *lib_handle, int action_param) {
1812    cam_scene_mode_type type = 0;
1813    switch (action_param) {
1814       case BESTSHOT_AUTO:
1815            printf("\n BEST SHOT AUTO\n");
1816            type = CAM_SCENE_MODE_OFF;
1817            break;
1818        case BESTSHOT_ACTION:
1819            printf("\n BEST SHOT ACTION\n");
1820            type = CAM_SCENE_MODE_ACTION;
1821            break;
1822        case BESTSHOT_PORTRAIT:
1823            printf("\n BEST SHOT PORTRAIT\n");
1824            type = CAM_SCENE_MODE_PORTRAIT;
1825            break;
1826        case BESTSHOT_LANDSCAPE:
1827            printf("\n BEST SHOT LANDSCAPE\n");
1828            type = CAM_SCENE_MODE_LANDSCAPE;
1829            break;
1830        case BESTSHOT_NIGHT:
1831            printf("\n BEST SHOT NIGHT\n");
1832            type = CAM_SCENE_MODE_NIGHT;
1833            break;
1834        case BESTSHOT_NIGHT_PORTRAIT:
1835            printf("\n BEST SHOT NIGHT PORTRAIT\n");
1836            type = CAM_SCENE_MODE_NIGHT_PORTRAIT;
1837            break;
1838        case BESTSHOT_THEATRE:
1839            printf("\n BEST SHOT THREATRE\n");
1840            type = CAM_SCENE_MODE_THEATRE;
1841            break;
1842        case BESTSHOT_BEACH:
1843            printf("\n BEST SHOT BEACH\n");
1844            type = CAM_SCENE_MODE_BEACH;
1845            break;
1846        case BESTSHOT_SNOW:
1847            printf("\n BEST SHOT SNOW\n");
1848            type = CAM_SCENE_MODE_SNOW;
1849            break;
1850        case BESTSHOT_SUNSET:
1851            printf("\n BEST SHOT SUNSET\n");
1852            type = CAM_SCENE_MODE_SUNSET;
1853            break;
1854        case BESTSHOT_ANTISHAKE:
1855            printf("\n BEST SHOT ANTISHAKE\n");
1856            type = CAM_SCENE_MODE_ANTISHAKE;
1857            break;
1858        case BESTSHOT_FIREWORKS:
1859            printf("\n BEST SHOT FIREWORKS\n");
1860            type = CAM_SCENE_MODE_FIREWORKS;
1861            break;
1862        case BESTSHOT_SPORTS:
1863            printf("\n BEST SHOT SPORTS\n");
1864            type = CAM_SCENE_MODE_SPORTS;
1865            break;
1866        case BESTSHOT_PARTY:
1867            printf("\n BEST SHOT PARTY\n");
1868            type = CAM_SCENE_MODE_PARTY;
1869            break;
1870        case BESTSHOT_CANDLELIGHT:
1871            printf("\n BEST SHOT CANDLELIGHT\n");
1872            type = CAM_SCENE_MODE_CANDLELIGHT;
1873            break;
1874        case BESTSHOT_ASD:
1875            printf("\n BEST SHOT ASD\n");
1876            type = CAM_SCENE_MODE_AUTO;
1877            break;
1878        case BESTSHOT_BACKLIGHT:
1879            printf("\n BEST SHOT BACKLIGHT\n");
1880            type = CAM_SCENE_MODE_BACKLIGHT;
1881            break;
1882        case BESTSHOT_FLOWERS:
1883            printf("\n BEST SHOT FLOWERS\n");
1884            type = CAM_SCENE_MODE_FLOWERS;
1885            break;
1886        case BESTSHOT_AR:
1887            printf("\n BEST SHOT AR\n");
1888            type = CAM_SCENE_MODE_AR;
1889            break;
1890        case BESTSHOT_HDR:
1891            printf("\n BEST SHOT HDR\n");
1892            type = CAM_SCENE_MODE_OFF;
1893            break;
1894        default:
1895            break;
1896        }
1897        return mm_camera_lib_send_command(lib_handle,
1898                                          MM_CAMERA_LIB_BESTSHOT,
1899                                          &type,
1900                                          NULL);
1901}
1902/*===========================================================================
1903 * FUNCTION     - print_current_menu -
1904 *
1905 * DESCRIPTION:
1906 * ===========================================================================*/
1907int print_current_menu (menu_id_change_t current_menu_id) {
1908  if (current_menu_id == MENU_ID_MAIN) {
1909    print_menu_preview_video ();
1910  } else if (current_menu_id == MENU_ID_WHITEBALANCECHANGE) {
1911    camera_preview_video_wb_change_tbl();
1912  } else if (current_menu_id == MENU_ID_WHITEBALANCE_MANUAL){
1913    camera_preview_video_mn_wb_tbl();
1914  } else if (current_menu_id == MENU_ID_EXPMETERINGCHANGE) {
1915    camera_preview_video_exp_metering_change_tbl();
1916  } else if (current_menu_id == MENU_ID_GET_CTRL_VALUE) {
1917    camera_preview_video_get_ctrl_value_tbl();
1918  } else if (current_menu_id == MENU_ID_ISOCHANGE) {
1919    camera_preview_video_iso_change_tbl();
1920  } else if (current_menu_id == MENU_ID_BRIGHTNESSCHANGE) {
1921    camera_brightness_change_tbl ();
1922  } else if (current_menu_id == MENU_ID_CONTRASTCHANGE) {
1923    camera_contrast_change_tbl ();
1924  } else if (current_menu_id == MENU_ID_EVCHANGE) {
1925    camera_EV_change_tbl ();
1926  } else if (current_menu_id == MENU_ID_SATURATIONCHANGE) {
1927    camera_saturation_change_tbl ();
1928  } else if (current_menu_id == MENU_ID_ZOOMCHANGE) {
1929    camera_preview_video_zoom_change_tbl();
1930  } else if (current_menu_id == MENU_ID_SHARPNESSCHANGE) {
1931    camera_preview_video_sharpness_change_tbl();
1932  } else if (current_menu_id == MENU_ID_BESTSHOT) {
1933    camera_set_bestshot_tbl();
1934  } else if (current_menu_id == MENU_ID_FLASHMODE) {
1935    camera_set_flashmode_tbl();
1936  } else if (current_menu_id == MENU_ID_SENSORS ) {
1937    camera_sensors_tbl();
1938  } else if (current_menu_id == MENU_ID_SWITCH_RES ) {
1939    camera_resolution_change_tbl();
1940  } else if (current_menu_id == MENU_ID_SPECIAL_EFFECTS ) {
1941    camera_special_effects_tbl();
1942  } else if (current_menu_id == MENU_ID_ANTI_BANDING ) {
1943    camera_anti_banding_tbl();
1944  } else if (current_menu_id == MENU_ID_FLIP_MODE ) {
1945    camera_flip_tbl();
1946  }else
1947    print_menu_preview_video ();
1948
1949
1950  return 0;
1951}
1952
1953int filter_resolutions(mm_camera_lib_handle *lib_handle,
1954                       DIMENSION_TBL_T *tbl,
1955                       size_t tbl_size)
1956{
1957    size_t i, j;
1958    cam_capability_t camera_cap;
1959    int rc = 0;
1960
1961    if ( ( NULL == lib_handle ) || ( NULL == tbl ) ) {
1962        return -1;
1963    }
1964
1965    rc = mm_camera_lib_get_caps(lib_handle, &camera_cap);
1966    if ( MM_CAMERA_OK != rc ) {
1967        LOGE("mm_camera_lib_get_caps() err=%d\n",  rc);
1968        return -1;
1969    }
1970
1971    for( i = 0 ; i < tbl_size ; i++ ) {
1972        for( j = 0; j < camera_cap.picture_sizes_tbl_cnt; j++ ) {
1973            if ( ( tbl[i].width == camera_cap.picture_sizes_tbl[j].width ) &&
1974                 ( tbl[i].height == camera_cap.picture_sizes_tbl[j].height ) ) {
1975                tbl[i].supported = 1;
1976                rc = (int)i;
1977                break;
1978            }
1979        }
1980    }
1981
1982    return rc;
1983}
1984
1985/*===========================================================================
1986 * FUNCTION   : enableAFR
1987 *
1988 * DESCRIPTION: This function will go through the list
1989 *              of supported FPS ranges and select the
1990 *              one which has maximum range
1991 *
1992 * PARAMETERS :
1993 *   @lib_handle   : camera test library handle
1994 *
1995 * RETURN     : uint32_t type of stream handle
1996 *              MM_CAMERA_OK  -- Success
1997 *              !=MM_CAMERA_OK -- Error status
1998 *==========================================================================*/
1999int enableAFR(mm_camera_lib_handle *lib_handle)
2000{
2001    size_t i, j;
2002    float max_range = 0.0f;
2003    cam_capability_t cap;
2004    int rc = MM_CAMERA_OK;
2005
2006    if ( NULL == lib_handle ) {
2007        return MM_CAMERA_E_INVALID_INPUT;
2008    }
2009
2010    rc = mm_camera_lib_get_caps(lib_handle, &cap);
2011    if ( MM_CAMERA_OK != rc ) {
2012        LOGE("mm_camera_lib_get_caps() err=%d\n",  rc);
2013        return rc;
2014    }
2015
2016    for( i = 0, j = 0 ; i < cap.fps_ranges_tbl_cnt ; i++ ) {
2017        if ( max_range < (cap.fps_ranges_tbl[i].max_fps - cap.fps_ranges_tbl[i].min_fps) ) {
2018            j = i;
2019        }
2020    }
2021
2022    rc = mm_camera_lib_send_command(lib_handle,
2023                                    MM_CAMERA_LIB_FPS_RANGE,
2024                                    &cap.fps_ranges_tbl[j],
2025                                    NULL);
2026
2027    LOGE("FPS range [%5.2f:%5.2f] rc = %d\n",
2028              cap.fps_ranges_tbl[j].min_fps,
2029              cap.fps_ranges_tbl[j].max_fps,
2030              rc);
2031    LOGE("FPS range (video) [%5.2f:%5.2f] rc = %d\n",
2032              cap.fps_ranges_tbl[j].video_min_fps,
2033              cap.fps_ranges_tbl[j].video_max_fps,
2034              rc);
2035
2036    return rc;
2037}
2038
2039/*===========================================================================
2040 * FUNCTION     - submain -
2041 *
2042 * DESCRIPTION:
2043 * ===========================================================================*/
2044static int submain()
2045{
2046    int rc = 0;
2047    char tc_buf[3];
2048    menu_id_change_t current_menu_id = MENU_ID_MAIN, next_menu_id;
2049    camera_action_t action_id;
2050    int action_param;
2051    uint8_t previewing = 0;
2052    int isZSL = 0;
2053    int isezTune = 0;
2054    int curr_irmode = 0;
2055    int isshdrmode = 0;
2056    uint8_t wnr_enabled = 0;
2057    mm_camera_lib_handle lib_handle;
2058    int num_cameras;
2059    int available_sensors =
2060        (int)(sizeof(sensor_tbl) / sizeof(sensor_tbl[0]));
2061    int available_snap_sizes =
2062        (int)(sizeof(dimension_tbl)/sizeof(dimension_tbl[0]));
2063    int i,c;
2064    mm_camera_lib_snapshot_params snap_dim;
2065    snap_dim.width = DEFAULT_SNAPSHOT_WIDTH;
2066    snap_dim.height = DEFAULT_SNAPSHOT_HEIGHT;
2067    cam_scene_mode_type default_scene= CAM_SCENE_MODE_OFF;
2068    int set_tintless= 0;
2069
2070    mm_camera_test_obj_t test_obj;
2071    memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
2072    memset(&snap_dim, 0, sizeof(mm_camera_lib_snapshot_params));
2073    memset(&lib_handle, 0, sizeof(mm_camera_lib_handle));
2074    rc = mm_app_load_hal(&(lib_handle.app_ctx));
2075
2076    if (rc != MM_CAMERA_OK) {
2077        LOGE("Error loading HAL err=%d\n",  rc);
2078        return -1;
2079    }
2080
2081    num_cameras = mm_camera_lib_number_of_cameras(&lib_handle);
2082    if ( 0 >= num_cameras ) {
2083        LOGE(" No camera sensors reported!");
2084        rc = -1;
2085        goto ERROR;
2086    } else if ( 1 <= num_cameras ) {
2087        c = MIN(num_cameras, available_sensors);
2088        for ( i = 0 ; i < c ; i++ ) {
2089            sensor_tbl[i].present = 1;
2090        }
2091        current_menu_id = MENU_ID_SENSORS;
2092    } else {
2093        i = filter_resolutions(&lib_handle,
2094                                dimension_tbl,
2095                                (size_t)available_snap_sizes);
2096        if ( ( i < 0 ) || ( i >= available_snap_sizes ) ) {
2097            LOGE("filter_resolutions()\n");
2098            goto ERROR;
2099        }
2100        snap_dim.width = dimension_tbl[i].width;
2101        snap_dim.height = dimension_tbl[i].height;
2102
2103        rc = enableAFR(&lib_handle);
2104        if (rc != MM_CAMERA_OK) {
2105            LOGE("enableAFR() err=%d\n",  rc);
2106            goto ERROR;
2107        }
2108
2109        rc =  mm_camera_lib_send_command(&lib_handle,
2110                                         MM_CAMERA_LIB_BESTSHOT,
2111                                         &default_scene,
2112                                         NULL);
2113        if (rc != MM_CAMERA_OK) {
2114            LOGE("mm_camera_lib_send_command() err=%d\n",  rc);
2115            goto ERROR;
2116        }
2117    }
2118
2119    do {
2120        print_current_menu (current_menu_id);
2121        fgets(tc_buf, 3, stdin);
2122
2123        next_menu_id = next_menu(current_menu_id, tc_buf[0], & action_id, & action_param);
2124
2125        if (next_menu_id != MENU_ID_INVALID) {
2126          current_menu_id = next_menu_id;
2127        }
2128
2129        if (action_id == ACTION_NO_ACTION) {
2130          continue;
2131        }
2132
2133        switch(action_id) {
2134            case ACTION_START_PREVIEW:
2135                LOGE("ACTION_START_PREVIEW \n");
2136                rc = mm_camera_lib_start_stream(&lib_handle);
2137                if (rc != MM_CAMERA_OK) {
2138                    LOGE("mm_camera_lib_start_stream() err=%d\n",  rc);
2139                    goto ERROR;
2140                }
2141                previewing = 1;
2142                break;
2143
2144            case ACTION_STOP_PREVIEW:
2145                LOGD("ACTION_STOP_PREVIEW \n");
2146                rc = mm_camera_lib_stop_stream(&lib_handle);
2147                if (rc != MM_CAMERA_OK) {
2148                    LOGE("mm_camera_lib_stop_stream() err=%d\n",  rc);
2149                    goto ERROR;
2150                }
2151                previewing = 0;
2152                break;
2153
2154            case ACTION_SET_MN_WHITE_BALANCE:
2155                LOGE("Selection for the Manual White Balance changes\n");
2156                set_manual_whitebalance(&lib_handle, action_param);
2157                break;
2158
2159            case ACTION_SET_WHITE_BALANCE:
2160                LOGD("Selection for the White Balance changes\n");
2161                set_whitebalance(&lib_handle, action_param);
2162                break;
2163
2164            case ACTION_SET_TINTLESS_ENABLE:
2165                LOGD("Selection for the Tintless enable changes\n");
2166                set_tintless = 1;
2167                rc =  mm_camera_lib_send_command(&lib_handle,
2168                                                 MM_CAMERA_LIB_SET_TINTLESS,
2169                                                 &set_tintless,
2170                                                 NULL);
2171                if (rc != MM_CAMERA_OK) {
2172                    LOGE("mm_camera_lib_send_command() err=%d\n",  rc);
2173                    goto ERROR;
2174                }
2175                break;
2176
2177            case ACTION_SET_EXP_METERING:
2178                LOGD("Selection for the Exposure Metering changes\n");
2179                set_exp_metering(&lib_handle, action_param);
2180                break;
2181
2182            case ACTION_BRIGHTNESS_INCREASE:
2183                printf("Increase brightness\n");
2184                increase_brightness(&lib_handle);
2185                break;
2186
2187            case ACTION_BRIGHTNESS_DECREASE:
2188                printf("Decrease brightness\n");
2189                decrease_brightness(&lib_handle);
2190                break;
2191
2192            case ACTION_CONTRAST_INCREASE:
2193                LOGD("Selection for the contrast increase\n");
2194                increase_contrast (&lib_handle);
2195                break;
2196
2197            case ACTION_CONTRAST_DECREASE:
2198                LOGD("Selection for the contrast decrease\n");
2199                decrease_contrast (&lib_handle);
2200                break;
2201
2202            case ACTION_EV_INCREASE:
2203                LOGD("Selection for the EV increase\n");
2204                increase_EV (&lib_handle);
2205                break;
2206
2207            case ACTION_EV_DECREASE:
2208                LOGD("Selection for the EV decrease\n");
2209                decrease_EV (&lib_handle);
2210                break;
2211
2212            case ACTION_SATURATION_INCREASE:
2213                LOGD("Selection for the EV increase\n");
2214                increase_saturation (&lib_handle);
2215                break;
2216
2217            case ACTION_SATURATION_DECREASE:
2218                LOGD("Selection for the EV decrease\n");
2219                decrease_saturation (&lib_handle);
2220                break;
2221
2222            case ACTION_TOGGLE_AFR:
2223                LOGD("Select for auto frame rate toggling\n");
2224                toggle_afr();
2225                break;
2226
2227            case ACTION_TOGGLE_EZTUNE:
2228                LOGE("Select for EzTune");
2229                printf("EZTUNE Toggle\n");
2230                isezTune = !isezTune;
2231                if (isezTune) {
2232                    printf("EZ TUNE On !!!");
2233                } else {
2234                    printf("EZ TUNE Off !!!");
2235                }
2236
2237                rc = mm_camera_lib_send_command(&lib_handle,
2238                                      MM_CAMERA_LIB_EZTUNE_ENABLE,
2239                                      &isezTune,
2240                                      NULL);
2241                if (rc != MM_CAMERA_OK) {
2242                    LOGE("mm_camera_lib_send_command() err=%d\n",  rc);
2243                    goto ERROR;
2244                }
2245                break;
2246
2247            case ACTION_TOGGLE_IR_MODE:
2248                LOGE("Select for IR Mode");
2249                printf("IR Mode Toggle\n");
2250                curr_irmode ++;
2251                curr_irmode %= CAM_IR_MODE_MAX;
2252                printf("IR Mode %s !!!",curr_irmode==0?"Off":(curr_irmode==1?"On":"Auto"));
2253
2254                rc = mm_camera_lib_send_command(&lib_handle,
2255                                      MM_CAMERA_LIB_IRMODE,
2256                                      &curr_irmode,
2257                                      NULL);
2258                if (rc != MM_CAMERA_OK) {
2259                    LOGE("mm_camera_lib_send_command() err=%d\n",  rc);
2260                    goto ERROR;
2261                }
2262                break;
2263
2264
2265            case ACTION_TOGGLE_SHDR:
2266                LOGE("Select for SHDR Mode");
2267                printf("SHDR Mode Toggle\n");
2268                isshdrmode = !isshdrmode;
2269                if (!isshdrmode) {
2270                    printf("sHDR ON !!!");
2271                } else {
2272                    printf("sHDR OFF !!!");
2273                }
2274                rc = mm_camera_lib_send_command(&lib_handle,
2275                                       MM_CAMERA_LIB_SHDR_MODE,
2276                                       &isshdrmode,
2277                                       NULL);
2278                if (rc != MM_CAMERA_OK) {
2279                    LOGE("mm_camera_lib_send_command() err=%d\n", rc);
2280                    goto ERROR;
2281                }
2282                break;
2283
2284
2285            case ACTION_SET_ISO:
2286                LOGD("Select for ISO changes\n");
2287                set_iso(&lib_handle, action_param);
2288                break;
2289
2290            case ACTION_SET_ZOOM:
2291                LOGD("Selection for the zoom direction changes\n");
2292                set_zoom(&lib_handle, action_param);
2293                printf("\nCurrent Zoom Value = %d ,Max Zoom Value = %d\n",zoom_level,zoom_max_value);
2294                break;
2295
2296            case ACTION_SHARPNESS_INCREASE:
2297                LOGD("Selection for sharpness increase\n");
2298                increase_sharpness(&lib_handle);
2299                break;
2300
2301            case ACTION_SHARPNESS_DECREASE:
2302                LOGD("Selection for sharpness decrease\n");
2303                decrease_sharpness(&lib_handle);
2304                break;
2305
2306            case ACTION_SET_BESTSHOT_MODE:
2307                LOGD("Selection for bestshot\n");
2308                set_bestshot_mode(&lib_handle, action_param);
2309                break;
2310
2311            case ACTION_SET_FLASH_MODE:
2312                printf("\n Selection for flashmode\n");
2313                set_flash_mode(&lib_handle, action_param);
2314                break;
2315
2316            case ACTION_SWITCH_CAMERA:
2317
2318                if (lib_handle.test_obj.cam != NULL) {
2319                    rc = mm_camera_lib_close(&lib_handle);
2320                    if (rc != MM_CAMERA_OK) {
2321                        LOGE("mm_camera_lib_close() err=%d\n",  rc);
2322                        goto ERROR;
2323                    }
2324                }
2325
2326                rc = mm_camera_lib_open(&lib_handle, action_param);
2327                if (rc != MM_CAMERA_OK) {
2328                    LOGE("mm_camera_lib_open() err=%d\n",  rc);
2329                    goto ERROR;
2330                }
2331
2332                i = filter_resolutions(&lib_handle,
2333                                        dimension_tbl,
2334                                        sizeof(dimension_tbl)/sizeof(dimension_tbl[0]));
2335                if ( ( i < 0 ) || ( i >=  available_snap_sizes ) ) {
2336                    LOGE("filter_resolutions()\n");
2337                    goto ERROR;
2338                }
2339                snap_dim.width = dimension_tbl[i].width;
2340                snap_dim.height = dimension_tbl[i].height;
2341
2342                rc = enableAFR(&lib_handle);
2343                if (rc != MM_CAMERA_OK) {
2344                    LOGE("enableAFR() err=%d\n",  rc);
2345                    goto ERROR;
2346                }
2347
2348                rc =  mm_camera_lib_send_command(&lib_handle,
2349                                                 MM_CAMERA_LIB_BESTSHOT,
2350                                                 &default_scene,
2351                                                 NULL);
2352                if (rc != MM_CAMERA_OK) {
2353                    LOGE("mm_camera_lib_send_command() err=%d\n",  rc);
2354                    goto ERROR;
2355                }
2356                break;
2357
2358            case ACTION_TOGGLE_ZSL:
2359                printf("ZSL Toggle !!!\n");
2360                isZSL = !isZSL;
2361                if ( isZSL ) {
2362                    printf("ZSL on !!!\n");
2363                } else {
2364                    printf("ZSL off !!!\n");
2365                }
2366                snap_dim.isZSL = isZSL;
2367                rc = mm_camera_lib_send_command(&lib_handle,
2368                                                MM_CAMERA_LIB_ZSL_ENABLE,
2369                                                &snap_dim,
2370                                                NULL);
2371                if (rc != MM_CAMERA_OK) {
2372                    LOGE("mm_camera_lib_send_command() err=%d\n",  rc);
2373                    goto ERROR;
2374                }
2375                break;
2376
2377            case ACTION_TAKE_RAW_SNAPSHOT:
2378                LOGH("\n Take RAW snapshot\n");
2379                rc = mm_camera_lib_send_command(&lib_handle,
2380                                                MM_CAMERA_LIB_DO_AF,
2381                                                NULL,
2382                                                NULL);
2383
2384                if (rc != MM_CAMERA_OK) {
2385                    LOGE("mm_camera_lib_send_command() err=%d\n",  rc);
2386                    goto ERROR;
2387                }
2388                rc = mm_camera_lib_send_command(&lib_handle,
2389                                                MM_CAMERA_LIB_RAW_CAPTURE,
2390                                                NULL,
2391                                                NULL);
2392                if (rc != MM_CAMERA_OK) {
2393                    LOGE("mm_camera_lib_send_command() err=%d\n",  rc);
2394                    goto ERROR;
2395                }
2396                break;
2397
2398            case ACTION_TAKE_JPEG_SNAPSHOT:
2399                LOGH("\n Take JPEG snapshot\n");
2400
2401                rc = mm_camera_lib_send_command(&lib_handle,
2402                                                MM_CAMERA_LIB_JPEG_CAPTURE,
2403                                                &snap_dim,
2404                                                NULL);
2405                if (rc != MM_CAMERA_OK) {
2406                    LOGE("mm_camera_lib_send_command() err=%d\n",  rc);
2407                    goto ERROR;
2408                }
2409                break;
2410            case ACTION_SWITCH_RESOLUTION:
2411                printf("\n Switch snapshot resolution to %dx%d\n",
2412                       dimension_tbl[action_param].width,
2413                       dimension_tbl[action_param].height);
2414                snap_dim.width = dimension_tbl[action_param].width;
2415                snap_dim.height = dimension_tbl[action_param].height;
2416                break;
2417
2418           case ACTION_START_RECORDING:
2419             LOGD("Start recording action\n");
2420             mm_app_start_record_preview(&lib_handle.test_obj, &snap_dim);
2421             is_rec = 1;
2422             break;
2423
2424           case ACTION_STOP_RECORDING:
2425             LOGD("Stop recording action\n");
2426             if(is_rec) {
2427                 mm_app_stop_record_preview(&lib_handle.test_obj);
2428                 is_rec = 0;
2429             }
2430
2431             break;
2432      case ACTION_TAKE_LIVE_SNAPSHOT:
2433        printf("Selection for live shot\n");
2434#if 0
2435        if(is_rec)
2436           mm_app_take_live_snapshot(cam_id);
2437        else
2438           printf("\n !!! Use live snapshot option while recording only !!!\n");
2439#endif
2440        break;
2441
2442        case ACTION_TOGGLE_WNR:
2443          wnr_enabled = !wnr_enabled;
2444          printf("WNR Enabled = %d\n", wnr_enabled);
2445          rc = mm_camera_lib_send_command(&lib_handle,
2446                                          MM_CAMERA_LIB_WNR_ENABLE,
2447                                          &wnr_enabled,
2448                                          NULL);
2449          if (rc != MM_CAMERA_OK) {
2450              LOGE("mm_camera_lib_send_command() err=%d\n",  rc);
2451              goto ERROR;
2452          }
2453          break;
2454
2455         case ACTION_SPECIAL_EFFECTS:
2456          printf("Selection for special effects\n");
2457          rc = set_specialEffects(&lib_handle, action_param);
2458
2459          if (rc != MM_CAMERA_OK) {
2460              LOGE("set_specialEffects() err=%d\n",  rc);
2461              goto ERROR;
2462          }
2463          break;
2464
2465         case ACTION_ANTI_BANDING:
2466          printf("Selection for anti banding\n");
2467          rc = set_antiBanding(&lib_handle, action_param);
2468
2469          if (rc != MM_CAMERA_OK) {
2470              LOGE("set_antiBanding() err=%d\n",  rc);
2471              goto ERROR;
2472          }
2473          break;
2474
2475          case ACTION_FLIP_MODE:
2476          printf("Selection for anti banding\n");
2477          rc = set_flipMode(&lib_handle, action_param);
2478
2479          if (rc != MM_CAMERA_OK) {
2480              LOGE("set_flipMode() err=%d\n",  rc);
2481              goto ERROR;
2482          }
2483          break;
2484
2485         case ACTION_BURST_MODE_SNAPSHOT:
2486          printf("Selection for BURST_MODE_SNAPSHOT\n");
2487          break;
2488
2489        case ACTION_CONCURRENT_NDR_NONHDR:
2490          printf("Selection for CONCURRENT_NDR_NONHDR\n");
2491          break;
2492
2493        case ACTION_EXIT:
2494            printf("Exiting....\n");
2495            break;
2496        case ACTION_NO_ACTION:
2497            printf("Go back to main menu");
2498            break;
2499
2500        default:
2501            printf("\n\n!!!!!WRONG INPUT: %d!!!!\n", action_id);
2502            break;
2503    }
2504
2505    usleep(1000 * 1000);
2506    LOGD("action_id = %d\n", action_id);
2507
2508  } while (action_id != ACTION_EXIT);
2509  action_id = ACTION_NO_ACTION;
2510
2511    mm_camera_lib_close(&lib_handle);
2512    return 0;
2513
2514ERROR:
2515
2516    mm_camera_lib_close(&lib_handle);
2517
2518    return rc;
2519}
2520
2521