| 1 | /* | 
|---|
| 2 | Copyright (c) 2013, Broadcom Europe Ltd | 
|---|
| 3 | Copyright (c) 2013, James Hughes | 
|---|
| 4 | All rights reserved. | 
|---|
| 5 |  | 
|---|
| 6 | Redistribution and use in source and binary forms, with or without | 
|---|
| 7 | modification, are permitted provided that the following conditions are met: | 
|---|
| 8 | * Redistributions of source code must retain the above copyright | 
|---|
| 9 | notice, this list of conditions and the following disclaimer. | 
|---|
| 10 | * Redistributions in binary form must reproduce the above copyright | 
|---|
| 11 | notice, this list of conditions and the following disclaimer in the | 
|---|
| 12 | documentation and/or other materials provided with the distribution. | 
|---|
| 13 | * Neither the name of the copyright holder nor the | 
|---|
| 14 | names of its contributors may be used to endorse or promote products | 
|---|
| 15 | derived from this software without specific prior written permission. | 
|---|
| 16 |  | 
|---|
| 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | 
|---|
| 18 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 
|---|
| 19 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 
|---|
| 20 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY | 
|---|
| 21 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 
|---|
| 22 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 
|---|
| 23 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 
|---|
| 24 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
|---|
| 25 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 
|---|
| 26 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|---|
| 27 | */ | 
|---|
| 28 |  | 
|---|
| 29 | #ifndef RASPICAMCONTROL_H_ | 
|---|
| 30 | #define RASPICAMCONTROL_H_ | 
|---|
| 31 |  | 
|---|
| 32 | /* Various parameters | 
|---|
| 33 | * | 
|---|
| 34 | * Exposure Mode | 
|---|
| 35 | *          MMAL_PARAM_EXPOSUREMODE_OFF, | 
|---|
| 36 | MMAL_PARAM_EXPOSUREMODE_AUTO, | 
|---|
| 37 | MMAL_PARAM_EXPOSUREMODE_NIGHT, | 
|---|
| 38 | MMAL_PARAM_EXPOSUREMODE_NIGHTPREVIEW, | 
|---|
| 39 | MMAL_PARAM_EXPOSUREMODE_BACKLIGHT, | 
|---|
| 40 | MMAL_PARAM_EXPOSUREMODE_SPOTLIGHT, | 
|---|
| 41 | MMAL_PARAM_EXPOSUREMODE_SPORTS, | 
|---|
| 42 | MMAL_PARAM_EXPOSUREMODE_SNOW, | 
|---|
| 43 | MMAL_PARAM_EXPOSUREMODE_BEACH, | 
|---|
| 44 | MMAL_PARAM_EXPOSUREMODE_VERYLONG, | 
|---|
| 45 | MMAL_PARAM_EXPOSUREMODE_FIXEDFPS, | 
|---|
| 46 | MMAL_PARAM_EXPOSUREMODE_ANTISHAKE, | 
|---|
| 47 | MMAL_PARAM_EXPOSUREMODE_FIREWORKS, | 
|---|
| 48 | * | 
|---|
| 49 | * Flicker Avoid Mode | 
|---|
| 50 | *          MMAL_PARAM_FLICKERAVOID_OFF, | 
|---|
| 51 | MMAL_PARAM_FLICKERAVOID_AUTO, | 
|---|
| 52 | MMAL_PARAM_FLICKERAVOID_50HZ, | 
|---|
| 53 | MMAL_PARAM_FLICKERAVOID_60HZ, | 
|---|
| 54 | * | 
|---|
| 55 | * AWB Mode | 
|---|
| 56 | *          MMAL_PARAM_AWBMODE_OFF, | 
|---|
| 57 | MMAL_PARAM_AWBMODE_AUTO, | 
|---|
| 58 | MMAL_PARAM_AWBMODE_SUNLIGHT, | 
|---|
| 59 | MMAL_PARAM_AWBMODE_CLOUDY, | 
|---|
| 60 | MMAL_PARAM_AWBMODE_SHADE, | 
|---|
| 61 | MMAL_PARAM_AWBMODE_TUNGSTEN, | 
|---|
| 62 | MMAL_PARAM_AWBMODE_FLUORESCENT, | 
|---|
| 63 | MMAL_PARAM_AWBMODE_INCANDESCENT, | 
|---|
| 64 | MMAL_PARAM_AWBMODE_FLASH, | 
|---|
| 65 | MMAL_PARAM_AWBMODE_HORIZON, | 
|---|
| 66 | MMAL_PARAM_AWBMODE_GREYWORLD | 
|---|
| 67 | * | 
|---|
| 68 | * Image FX | 
|---|
| 69 | MMAL_PARAM_IMAGEFX_NONE, | 
|---|
| 70 | MMAL_PARAM_IMAGEFX_NEGATIVE, | 
|---|
| 71 | MMAL_PARAM_IMAGEFX_SOLARIZE, | 
|---|
| 72 | MMAL_PARAM_IMAGEFX_POSTERIZE, | 
|---|
| 73 | MMAL_PARAM_IMAGEFX_WHITEBOARD, | 
|---|
| 74 | MMAL_PARAM_IMAGEFX_BLACKBOARD, | 
|---|
| 75 | MMAL_PARAM_IMAGEFX_SKETCH, | 
|---|
| 76 | MMAL_PARAM_IMAGEFX_DENOISE, | 
|---|
| 77 | MMAL_PARAM_IMAGEFX_EMBOSS, | 
|---|
| 78 | MMAL_PARAM_IMAGEFX_OILPAINT, | 
|---|
| 79 | MMAL_PARAM_IMAGEFX_HATCH, | 
|---|
| 80 | MMAL_PARAM_IMAGEFX_GPEN, | 
|---|
| 81 | MMAL_PARAM_IMAGEFX_PASTEL, | 
|---|
| 82 | MMAL_PARAM_IMAGEFX_WATERCOLOUR, | 
|---|
| 83 | MMAL_PARAM_IMAGEFX_FILM, | 
|---|
| 84 | MMAL_PARAM_IMAGEFX_BLUR, | 
|---|
| 85 | MMAL_PARAM_IMAGEFX_SATURATION, | 
|---|
| 86 | MMAL_PARAM_IMAGEFX_COLOURSWAP, | 
|---|
| 87 | MMAL_PARAM_IMAGEFX_WASHEDOUT, | 
|---|
| 88 | MMAL_PARAM_IMAGEFX_POSTERISE, | 
|---|
| 89 | MMAL_PARAM_IMAGEFX_COLOURPOINT, | 
|---|
| 90 | MMAL_PARAM_IMAGEFX_COLOURBALANCE, | 
|---|
| 91 | MMAL_PARAM_IMAGEFX_CARTOON, | 
|---|
| 92 |  | 
|---|
| 93 | */ | 
|---|
| 94 |  | 
|---|
| 95 | /// Annotate bitmask options | 
|---|
| 96 | /// Supplied by user on command line | 
|---|
| 97 | #define ANNOTATE_USER_TEXT          1 | 
|---|
| 98 | /// Supplied by app using this module | 
|---|
| 99 | #define ANNOTATE_APP_TEXT           2 | 
|---|
| 100 | /// Insert current date | 
|---|
| 101 | #define ANNOTATE_DATE_TEXT          4 | 
|---|
| 102 | // Insert current time | 
|---|
| 103 | #define ANNOTATE_TIME_TEXT          8 | 
|---|
| 104 |  | 
|---|
| 105 | #define ANNOTATE_SHUTTER_SETTINGS   16 | 
|---|
| 106 | #define ANNOTATE_CAF_SETTINGS       32 | 
|---|
| 107 | #define ANNOTATE_GAIN_SETTINGS      64 | 
|---|
| 108 | #define ANNOTATE_LENS_SETTINGS      128 | 
|---|
| 109 | #define ANNOTATE_MOTION_SETTINGS    256 | 
|---|
| 110 | #define ANNOTATE_FRAME_NUMBER       512 | 
|---|
| 111 | #define ANNOTATE_BLACK_BACKGROUND   1024 | 
|---|
| 112 |  | 
|---|
| 113 |  | 
|---|
| 114 | // There isn't actually a MMAL structure for the following, so make one | 
|---|
| 115 | typedef struct mmal_param_colourfx_s | 
|---|
| 116 | { | 
|---|
| 117 | int enable;       /// Turn colourFX on or off | 
|---|
| 118 | int u,v;          /// U and V to use | 
|---|
| 119 | } MMAL_PARAM_COLOURFX_T; | 
|---|
| 120 |  | 
|---|
| 121 | typedef struct mmal_param_thumbnail_config_s | 
|---|
| 122 | { | 
|---|
| 123 | int enable; | 
|---|
| 124 | int width,height; | 
|---|
| 125 | int quality; | 
|---|
| 126 | } MMAL_PARAM_THUMBNAIL_CONFIG_T; | 
|---|
| 127 |  | 
|---|
| 128 | typedef struct param_float_rect_s | 
|---|
| 129 | { | 
|---|
| 130 | double x; | 
|---|
| 131 | double y; | 
|---|
| 132 | double w; | 
|---|
| 133 | double h; | 
|---|
| 134 | } PARAM_FLOAT_RECT_T; | 
|---|
| 135 |  | 
|---|
| 136 | /// struct contain camera settings | 
|---|
| 137 | typedef struct raspicam_camera_parameters_s | 
|---|
| 138 | { | 
|---|
| 139 | int sharpness;             /// -100 to 100 | 
|---|
| 140 | int contrast;              /// -100 to 100 | 
|---|
| 141 | int brightness;            ///  0 to 100 | 
|---|
| 142 | int saturation;            ///  -100 to 100 | 
|---|
| 143 | int ISO;                   ///  TODO : what range? | 
|---|
| 144 | int videoStabilisation;    /// 0 or 1 (false or true) | 
|---|
| 145 | int exposureCompensation;  /// -10 to +10 ? | 
|---|
| 146 | MMAL_PARAM_EXPOSUREMODE_T exposureMode; | 
|---|
| 147 | MMAL_PARAM_EXPOSUREMETERINGMODE_T exposureMeterMode; | 
|---|
| 148 | MMAL_PARAM_AWBMODE_T awbMode; | 
|---|
| 149 | MMAL_PARAM_IMAGEFX_T imageEffect; | 
|---|
| 150 | MMAL_PARAMETER_IMAGEFX_PARAMETERS_T imageEffectsParameters; | 
|---|
| 151 | MMAL_PARAM_COLOURFX_T colourEffects; | 
|---|
| 152 | MMAL_PARAM_FLICKERAVOID_T flickerAvoidMode; | 
|---|
| 153 | int rotation;              /// 0-359 | 
|---|
| 154 | int hflip;                 /// 0 or 1 | 
|---|
| 155 | int vflip;                 /// 0 or 1 | 
|---|
| 156 | PARAM_FLOAT_RECT_T  roi;   /// region of interest to use on the sensor. Normalised [0,1] values in the rect | 
|---|
| 157 | int shutter_speed;         /// 0 = auto, otherwise the shutter speed in ms | 
|---|
| 158 | float awb_gains_r;         /// AWB red gain | 
|---|
| 159 | float awb_gains_b;         /// AWB blue gain | 
|---|
| 160 | MMAL_PARAMETER_DRC_STRENGTH_T drc_level;  // Strength of Dynamic Range compression to apply | 
|---|
| 161 | MMAL_BOOL_T stats_pass;    /// Stills capture statistics pass on/off | 
|---|
| 162 | int enable_annotate;       /// Flag to enable the annotate, 0 = disabled, otherwise a bitmask of what needs to be displayed | 
|---|
| 163 | char annotate_string[MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V2]; /// String to use for annotate - overrides certain bitmask settings | 
|---|
| 164 | int annotate_text_size;    // Text size for annotation | 
|---|
| 165 | int annotate_text_colour;  // Text colour for annotation | 
|---|
| 166 | int annotate_bg_colour;    // Background colour for annotation | 
|---|
| 167 | unsigned int annotate_justify; | 
|---|
| 168 | unsigned int annotate_x; | 
|---|
| 169 | unsigned int annotate_y; | 
|---|
| 170 |  | 
|---|
| 171 | MMAL_PARAMETER_STEREOSCOPIC_MODE_T stereo_mode; | 
|---|
| 172 | float analog_gain;         // Analog gain | 
|---|
| 173 | float digital_gain;        // Digital gain | 
|---|
| 174 |  | 
|---|
| 175 | int settings; | 
|---|
| 176 | } RASPICAM_CAMERA_PARAMETERS; | 
|---|
| 177 |  | 
|---|
| 178 | typedef enum | 
|---|
| 179 | { | 
|---|
| 180 | ZOOM_IN, ZOOM_OUT, ZOOM_RESET | 
|---|
| 181 | } ZOOM_COMMAND_T; | 
|---|
| 182 |  | 
|---|
| 183 |  | 
|---|
| 184 | void raspicamcontrol_check_configuration(int min_gpu_mem); | 
|---|
| 185 |  | 
|---|
| 186 | int raspicamcontrol_parse_cmdline(RASPICAM_CAMERA_PARAMETERS *params, const char *arg1, const char *arg2); | 
|---|
| 187 | void raspicamcontrol_display_help(); | 
|---|
| 188 | int raspicamcontrol_cycle_test(MMAL_COMPONENT_T *camera); | 
|---|
| 189 |  | 
|---|
| 190 | int raspicamcontrol_set_all_parameters(MMAL_COMPONENT_T *camera, const RASPICAM_CAMERA_PARAMETERS *params); | 
|---|
| 191 | int raspicamcontrol_get_all_parameters(MMAL_COMPONENT_T *camera, RASPICAM_CAMERA_PARAMETERS *params); | 
|---|
| 192 | void raspicamcontrol_dump_parameters(const RASPICAM_CAMERA_PARAMETERS *params); | 
|---|
| 193 |  | 
|---|
| 194 | void raspicamcontrol_set_defaults(RASPICAM_CAMERA_PARAMETERS *params); | 
|---|
| 195 |  | 
|---|
| 196 | void raspicamcontrol_check_configuration(int min_gpu_mem); | 
|---|
| 197 |  | 
|---|
| 198 | // Individual setting functions | 
|---|
| 199 | int raspicamcontrol_set_saturation(MMAL_COMPONENT_T *camera, int saturation); | 
|---|
| 200 | int raspicamcontrol_set_sharpness(MMAL_COMPONENT_T *camera, int sharpness); | 
|---|
| 201 | int raspicamcontrol_set_contrast(MMAL_COMPONENT_T *camera, int contrast); | 
|---|
| 202 | int raspicamcontrol_set_brightness(MMAL_COMPONENT_T *camera, int brightness); | 
|---|
| 203 | int raspicamcontrol_set_ISO(MMAL_COMPONENT_T *camera, int ISO); | 
|---|
| 204 | int raspicamcontrol_set_metering_mode(MMAL_COMPONENT_T *camera, MMAL_PARAM_EXPOSUREMETERINGMODE_T mode); | 
|---|
| 205 | int raspicamcontrol_set_video_stabilisation(MMAL_COMPONENT_T *camera, int vstabilisation); | 
|---|
| 206 | int raspicamcontrol_set_exposure_compensation(MMAL_COMPONENT_T *camera, int exp_comp); | 
|---|
| 207 | int raspicamcontrol_set_exposure_mode(MMAL_COMPONENT_T *camera, MMAL_PARAM_EXPOSUREMODE_T mode); | 
|---|
| 208 | int raspicamcontrol_set_flicker_avoid_mode(MMAL_COMPONENT_T *camera, MMAL_PARAM_FLICKERAVOID_T mode); | 
|---|
| 209 | int raspicamcontrol_set_awb_mode(MMAL_COMPONENT_T *camera, MMAL_PARAM_AWBMODE_T awb_mode); | 
|---|
| 210 | int raspicamcontrol_set_awb_gains(MMAL_COMPONENT_T *camera, float r_gain, float b_gain); | 
|---|
| 211 | int raspicamcontrol_set_imageFX(MMAL_COMPONENT_T *camera, MMAL_PARAM_IMAGEFX_T imageFX); | 
|---|
| 212 | int raspicamcontrol_set_colourFX(MMAL_COMPONENT_T *camera, const MMAL_PARAM_COLOURFX_T *colourFX); | 
|---|
| 213 | int raspicamcontrol_set_rotation(MMAL_COMPONENT_T *camera, int rotation); | 
|---|
| 214 | int raspicamcontrol_set_flips(MMAL_COMPONENT_T *camera, int hflip, int vflip); | 
|---|
| 215 | int raspicamcontrol_set_ROI(MMAL_COMPONENT_T *camera, PARAM_FLOAT_RECT_T rect); | 
|---|
| 216 | int raspicamcontrol_zoom_in_zoom_out(MMAL_COMPONENT_T *camera, ZOOM_COMMAND_T zoom_command, PARAM_FLOAT_RECT_T *roi); | 
|---|
| 217 | int raspicamcontrol_set_shutter_speed(MMAL_COMPONENT_T *camera, int speed_ms); | 
|---|
| 218 | int raspicamcontrol_set_DRC(MMAL_COMPONENT_T *camera, MMAL_PARAMETER_DRC_STRENGTH_T strength); | 
|---|
| 219 | int raspicamcontrol_set_stats_pass(MMAL_COMPONENT_T *camera, int stats_pass); | 
|---|
| 220 | int raspicamcontrol_set_annotate(MMAL_COMPONENT_T *camera, const int bitmask, const char *string, | 
|---|
| 221 | const int text_size, const int text_colour, const int bg_colour, | 
|---|
| 222 | const unsigned int justify, const unsigned int x, const unsigned int y); | 
|---|
| 223 | int raspicamcontrol_set_stereo_mode(MMAL_PORT_T *port, MMAL_PARAMETER_STEREOSCOPIC_MODE_T *stereo_mode); | 
|---|
| 224 | int raspicamcontrol_set_gains(MMAL_COMPONENT_T *camera, float analog, float digital); | 
|---|
| 225 |  | 
|---|
| 226 | //Individual getting functions | 
|---|
| 227 | int raspicamcontrol_get_saturation(MMAL_COMPONENT_T *camera); | 
|---|
| 228 | int raspicamcontrol_get_sharpness(MMAL_COMPONENT_T *camera); | 
|---|
| 229 | int raspicamcontrol_get_contrast(MMAL_COMPONENT_T *camera); | 
|---|
| 230 | int raspicamcontrol_get_brightness(MMAL_COMPONENT_T *camera); | 
|---|
| 231 | int raspicamcontrol_get_ISO(MMAL_COMPONENT_T *camera); | 
|---|
| 232 | MMAL_PARAM_EXPOSUREMETERINGMODE_T raspicamcontrol_get_metering_mode(MMAL_COMPONENT_T *camera); | 
|---|
| 233 | int raspicamcontrol_get_video_stabilisation(MMAL_COMPONENT_T *camera); | 
|---|
| 234 | int raspicamcontrol_get_exposure_compensation(MMAL_COMPONENT_T *camera); | 
|---|
| 235 | MMAL_PARAM_THUMBNAIL_CONFIG_T raspicamcontrol_get_thumbnail_parameters(MMAL_COMPONENT_T *camera); | 
|---|
| 236 | MMAL_PARAM_EXPOSUREMODE_T raspicamcontrol_get_exposure_mode(MMAL_COMPONENT_T *camera); | 
|---|
| 237 | MMAL_PARAM_FLICKERAVOID_T raspicamcontrol_get_flicker_avoid_mode(MMAL_COMPONENT_T *camera); | 
|---|
| 238 | MMAL_PARAM_AWBMODE_T raspicamcontrol_get_awb_mode(MMAL_COMPONENT_T *camera); | 
|---|
| 239 | MMAL_PARAM_IMAGEFX_T raspicamcontrol_get_imageFX(MMAL_COMPONENT_T *camera); | 
|---|
| 240 | MMAL_PARAM_COLOURFX_T raspicamcontrol_get_colourFX(MMAL_COMPONENT_T *camera); | 
|---|
| 241 |  | 
|---|
| 242 | /** Default camera callback function | 
|---|
| 243 | */ | 
|---|
| 244 | void default_camera_control_callback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer); | 
|---|
| 245 |  | 
|---|
| 246 |  | 
|---|
| 247 |  | 
|---|
| 248 | #endif /* RASPICAMCONTROL_H_ */ | 
|---|
| 249 |  | 
|---|