Skip to content

Commit f74cc53

Browse files
committed
drivers: video: controls: add the BASE and CAMERA controls
Add all the base controls present like they are in Linux into Zephyr, limited to those that can apply in the current system: - Buttons are left as integer for now. - Some description is modified to fit the Zephyr situation. - For the minimum number of buffer, Zephyr uses a different mechanism. - No audio support through the video subsystem. - Homogenize the wording Signed-off-by: Josuah Demangeon <me@josuah.net>
1 parent 5fb47cd commit f74cc53

File tree

2 files changed

+606
-16
lines changed

2 files changed

+606
-16
lines changed

drivers/video/video_ctrls.c

Lines changed: 188 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,61 @@ LOG_MODULE_REGISTER(video_ctrls, CONFIG_VIDEO_LOG_LEVEL);
1717

1818
static inline const char *const *video_get_std_menu_ctrl(uint32_t id)
1919
{
20-
static const char *const camera_power_line_frequency[] = {"Disabled", "50 Hz", "60 Hz",
21-
"Auto", NULL};
22-
static const char *const camera_exposure_auto[] = {"Auto Mode", "Manual Mode",
23-
"Shutter Priority Mode",
24-
"Aperture Priority Mode", NULL};
20+
static char const *const power_line_frequency[] = {
21+
"Disabled", "50 Hz", "60 Hz", "Auto", NULL,
22+
};
23+
static char const *const exposure_auto[] = {
24+
"Auto Mode", "Manual Mode", "Shutter Priority Mode", "Aperture Priority Mode", NULL,
25+
};
26+
static char const *const auto_focus_range[] = {
27+
"Auto", "Normal", "Macro", "Infinity", NULL,
28+
};
29+
static char const *const colorfx[] = {
30+
"None", "Black & White", "Sepia", "Negative", "Emboss", "Sketch", "Sky Blue",
31+
"Grass Green", "Skin Whiten", "Vivid", "Aqua", "Art Freeze", "Silhouette",
32+
"Solarization", "Antique", "Set Cb/Cr", NULL,
33+
};
34+
static char const *const auto_n_preset_white_balance[] = {
35+
"Manual", "Auto", "Incandescent", "Fluorescent", "Fluorescent H", "Horizon",
36+
"Daylight", "Flash", "Cloudy", "Shade", "Greyworld", NULL,
37+
};
38+
static char const *const iso_sensitivity_auto[] = {
39+
"Manual", "Auto", NULL,
40+
};
41+
static char const *const exposure_metering[] = {
42+
"Average", "Center Weighted", "Spot", "Matrix", NULL,
43+
};
44+
static char const *const scene_mode[] = {
45+
"None", "Backlight", "Beach/Snow", "Candle Light", "Dusk/Dawn", "Fall Colors",
46+
"Fireworks", "Landscape", "Night", "Party/Indoor", "Portrait", "Sports", "Sunset",
47+
"Text", NULL,
48+
};
49+
static char const *const camera_orientation[] = {
50+
"Front", "Back", "External", NULL,
51+
};
2552

2653
switch (id) {
54+
/* User control menus */
2755
case VIDEO_CID_POWER_LINE_FREQUENCY:
28-
return camera_power_line_frequency;
56+
return power_line_frequency;
57+
58+
/* Camera control menus */
2959
case VIDEO_CID_EXPOSURE_AUTO:
30-
return camera_exposure_auto;
60+
return exposure_auto;
61+
case VIDEO_CID_AUTO_FOCUS_RANGE:
62+
return auto_focus_range;
63+
case VIDEO_CID_COLORFX:
64+
return colorfx;
65+
case VIDEO_CID_AUTO_N_PRESET_WHITE_BALANCE:
66+
return auto_n_preset_white_balance;
67+
case VIDEO_CID_ISO_SENSITIVITY_AUTO:
68+
return iso_sensitivity_auto;
69+
case VIDEO_CID_EXPOSURE_METERING:
70+
return exposure_metering;
71+
case VIDEO_CID_SCENE_MODE:
72+
return scene_mode;
73+
case VIDEO_CID_CAMERA_ORIENTATION:
74+
return camera_orientation;
3175
default:
3276
return NULL;
3377
}
@@ -69,12 +113,35 @@ static inline void set_type_flag(uint32_t id, enum video_ctrl_type *type, uint32
69113
*flags = 0;
70114

71115
switch (id) {
116+
case VIDEO_CID_AUTO_WHITE_BALANCE:
117+
case VIDEO_CID_AUTOGAIN:
72118
case VIDEO_CID_HFLIP:
73119
case VIDEO_CID_VFLIP:
120+
case VIDEO_CID_HUE_AUTO:
121+
case VIDEO_CID_CHROMA_AGC:
122+
case VIDEO_CID_COLOR_KILLER:
123+
case VIDEO_CID_AUTOBRIGHTNESS:
124+
case VIDEO_CID_ILLUMINATORS_1:
125+
case VIDEO_CID_ILLUMINATORS_2:
126+
case VIDEO_CID_EXPOSURE_AUTO_PRIORITY:
127+
case VIDEO_CID_FOCUS_AUTO:
128+
case VIDEO_CID_PRIVACY:
129+
case VIDEO_CID_WIDE_DYNAMIC_RANGE:
130+
case VIDEO_CID_IMAGE_STABILIZATION:
74131
*type = VIDEO_CTRL_TYPE_BOOLEAN;
75132
break;
133+
76134
case VIDEO_CID_POWER_LINE_FREQUENCY:
135+
case VIDEO_CID_EXPOSURE_AUTO:
136+
case VIDEO_CID_AUTO_FOCUS_RANGE:
137+
case VIDEO_CID_COLORFX:
138+
case VIDEO_CID_AUTO_N_PRESET_WHITE_BALANCE:
139+
case VIDEO_CID_ISO_SENSITIVITY_AUTO:
140+
case VIDEO_CID_EXPOSURE_METERING:
141+
case VIDEO_CID_SCENE_MODE:
77142
case VIDEO_CID_TEST_PATTERN:
143+
case VIDEO_CID_CAMERA_ORIENTATION:
144+
case VIDEO_CID_HDR_SENSOR_MODE:
78145
*type = VIDEO_CTRL_TYPE_MENU;
79146
break;
80147
case VIDEO_CID_PIXEL_RATE:
@@ -388,6 +455,16 @@ static inline const char *video_get_ctrl_name(uint32_t id)
388455
return "Saturation";
389456
case VIDEO_CID_HUE:
390457
return "Hue";
458+
case VIDEO_CID_AUTO_WHITE_BALANCE:
459+
return "White Balance, Automatic";
460+
case VIDEO_CID_DO_WHITE_BALANCE:
461+
return "Do White Balance";
462+
case VIDEO_CID_RED_BALANCE:
463+
return "Red Balance";
464+
case VIDEO_CID_BLUE_BALANCE:
465+
return "Blue Balance";
466+
case VIDEO_CID_GAMMA:
467+
return "Gamma";
391468
case VIDEO_CID_EXPOSURE:
392469
return "Exposure";
393470
case VIDEO_CID_AUTOGAIN:
@@ -402,10 +479,114 @@ static inline const char *video_get_ctrl_name(uint32_t id)
402479
return "Vertical Flip";
403480
case VIDEO_CID_POWER_LINE_FREQUENCY:
404481
return "Power Line Frequency";
482+
case VIDEO_CID_HUE_AUTO:
483+
return "Hue, Automatic";
484+
case VIDEO_CID_WHITE_BALANCE_TEMPERATURE:
485+
return "White Balance Temperature";
486+
case VIDEO_CID_SHARPNESS:
487+
return "Sharpness";
488+
case VIDEO_CID_BACKLIGHT_COMPENSATION:
489+
return "Backlight Compensation";
490+
case VIDEO_CID_CHROMA_AGC:
491+
return "Chroma AGC";
492+
case VIDEO_CID_COLOR_KILLER:
493+
return "Color Killer";
494+
case VIDEO_CID_COLORFX:
495+
return "Color Effects";
496+
case VIDEO_CID_AUTOBRIGHTNESS:
497+
return "Brightness, Automatic";
498+
case VIDEO_CID_BAND_STOP_FILTER:
499+
return "Band-Stop Filter";
500+
case VIDEO_CID_ROTATE:
501+
return "Rotate";
502+
case VIDEO_CID_BG_COLOR:
503+
return "Background Color";
504+
case VIDEO_CID_CHROMA_GAIN:
505+
return "Chroma Gain";
506+
case VIDEO_CID_ILLUMINATORS_1:
507+
return "Illuminator 1";
508+
case VIDEO_CID_ILLUMINATORS_2:
509+
return "Illuminator 2";
510+
case VIDEO_CID_ALPHA_COMPONENT:
511+
return "Alpha Component";
512+
case VIDEO_CID_COLORFX_CBCR:
513+
return "Color Effects, CbCr";
514+
case VIDEO_CID_COLORFX_RGB:
515+
return "Color Effects, RGB";
405516

406517
/* Camera controls */
518+
case VIDEO_CID_EXPOSURE_AUTO:
519+
return "Auto Exposure";
520+
case VIDEO_CID_EXPOSURE_ABSOLUTE:
521+
return "Exposure Time, Absolute";
522+
case VIDEO_CID_EXPOSURE_AUTO_PRIORITY:
523+
return "Exposure, Dynamic Framerate";
524+
case VIDEO_CID_PAN_RELATIVE:
525+
return "Pan, Relative";
526+
case VIDEO_CID_TILT_RELATIVE:
527+
return "Tilt, Relative";
528+
case VIDEO_CID_PAN_RESET:
529+
return "Pan, Reset";
530+
case VIDEO_CID_TILT_RESET:
531+
return "Tilt, Reset";
532+
case VIDEO_CID_PAN_ABSOLUTE:
533+
return "Pan, Absolute";
534+
case VIDEO_CID_TILT_ABSOLUTE:
535+
return "Tilt, Absolute";
536+
case VIDEO_CID_FOCUS_ABSOLUTE:
537+
return "Focus, Absolute";
538+
case VIDEO_CID_FOCUS_RELATIVE:
539+
return "Focus, Relative";
540+
case VIDEO_CID_FOCUS_AUTO:
541+
return "Focus, Automatic Continuous";
407542
case VIDEO_CID_ZOOM_ABSOLUTE:
408543
return "Zoom, Absolute";
544+
case VIDEO_CID_ZOOM_RELATIVE:
545+
return "Zoom, Relative";
546+
case VIDEO_CID_ZOOM_CONTINUOUS:
547+
return "Zoom, Continuous";
548+
case VIDEO_CID_PRIVACY:
549+
return "Privacy";
550+
case VIDEO_CID_IRIS_ABSOLUTE:
551+
return "Iris, Absolute";
552+
case VIDEO_CID_IRIS_RELATIVE:
553+
return "Iris, Relative";
554+
case VIDEO_CID_AUTO_EXPOSURE_BIAS:
555+
return "Auto Exposure, Bias";
556+
case VIDEO_CID_AUTO_N_PRESET_WHITE_BALANCE:
557+
return "White Balance, Auto & Preset";
558+
case VIDEO_CID_WIDE_DYNAMIC_RANGE:
559+
return "Wide Dynamic Range";
560+
case VIDEO_CID_IMAGE_STABILIZATION:
561+
return "Image Stabilization";
562+
case VIDEO_CID_ISO_SENSITIVITY:
563+
return "ISO Sensitivity";
564+
case VIDEO_CID_ISO_SENSITIVITY_AUTO:
565+
return "ISO Sensitivity, Auto";
566+
case VIDEO_CID_EXPOSURE_METERING:
567+
return "Exposure, Metering Mode";
568+
case VIDEO_CID_SCENE_MODE:
569+
return "Scene Mode";
570+
case VIDEO_CID_3A_LOCK:
571+
return "3A Lock";
572+
case VIDEO_CID_AUTO_FOCUS_START:
573+
return "Auto Focus, Start";
574+
case VIDEO_CID_AUTO_FOCUS_STOP:
575+
return "Auto Focus, Stop";
576+
case VIDEO_CID_AUTO_FOCUS_STATUS:
577+
return "Auto Focus, Status";
578+
case VIDEO_CID_AUTO_FOCUS_RANGE:
579+
return "Auto Focus, Range";
580+
case VIDEO_CID_PAN_SPEED:
581+
return "Pan, Speed";
582+
case VIDEO_CID_TILT_SPEED:
583+
return "Tilt, Speed";
584+
case VIDEO_CID_CAMERA_ORIENTATION:
585+
return "Camera Orientation";
586+
case VIDEO_CID_CAMERA_SENSOR_ROTATION:
587+
return "Camera Sensor Rotation";
588+
case VIDEO_CID_HDR_SENSOR_MODE:
589+
return "HDR Sensor Mode";
409590

410591
/* JPEG encoder controls */
411592
case VIDEO_CID_JPEG_COMPRESSION_QUALITY:

0 commit comments

Comments
 (0)