root/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * Broadcom BM2835 V4L2 driver
   4  *
   5  * Copyright © 2013 Raspberry Pi (Trading) Ltd.
   6  *
   7  * Authors: Vincent Sanders @ Collabora
   8  *          Dave Stevenson @ Broadcom
   9  *              (now dave.stevenson@raspberrypi.org)
  10  *          Simon Mellor @ Broadcom
  11  *          Luke Diamand @ Broadcom
  12  *
  13  * core driver device
  14  */
  15 
  16 #define V4L2_CTRL_COUNT 29 /* number of v4l controls */
  17 
  18 enum {
  19         COMP_CAMERA = 0,
  20         COMP_PREVIEW,
  21         COMP_IMAGE_ENCODE,
  22         COMP_VIDEO_ENCODE,
  23         COMP_COUNT
  24 };
  25 
  26 enum {
  27         CAM_PORT_PREVIEW = 0,
  28         CAM_PORT_VIDEO,
  29         CAM_PORT_CAPTURE,
  30         CAM_PORT_COUNT
  31 };
  32 
  33 #define PREVIEW_LAYER      2
  34 
  35 extern int bcm2835_v4l2_debug;
  36 
  37 struct bm2835_mmal_dev {
  38         /* v4l2 devices */
  39         struct v4l2_device     v4l2_dev;
  40         struct video_device    vdev;
  41         struct mutex           mutex;
  42 
  43         /* controls */
  44         struct v4l2_ctrl_handler  ctrl_handler;
  45         struct v4l2_ctrl          *ctrls[V4L2_CTRL_COUNT];
  46         enum v4l2_scene_mode      scene_mode;
  47         struct mmal_colourfx      colourfx;
  48         int                       hflip;
  49         int                       vflip;
  50         int                       red_gain;
  51         int                       blue_gain;
  52         enum mmal_parameter_exposuremode exposure_mode_user;
  53         enum v4l2_exposure_auto_type exposure_mode_v4l2_user;
  54         /* active exposure mode may differ if selected via a scene mode */
  55         enum mmal_parameter_exposuremode exposure_mode_active;
  56         enum mmal_parameter_exposuremeteringmode metering_mode;
  57         unsigned int              manual_shutter_speed;
  58         bool                      exp_auto_priority;
  59         bool manual_iso_enabled;
  60         u32 iso;
  61 
  62         /* allocated mmal instance and components */
  63         struct vchiq_mmal_instance   *instance;
  64         struct vchiq_mmal_component  *component[COMP_COUNT];
  65         int camera_use_count;
  66 
  67         struct v4l2_window overlay;
  68 
  69         struct {
  70                 unsigned int     width;  /* width */
  71                 unsigned int     height;  /* height */
  72                 unsigned int     stride;  /* stride */
  73                 unsigned int     buffersize; /* buffer size with padding */
  74                 struct mmal_fmt  *fmt;
  75                 struct v4l2_fract timeperframe;
  76 
  77                 /* H264 encode bitrate */
  78                 int         encode_bitrate;
  79                 /* H264 bitrate mode. CBR/VBR */
  80                 int         encode_bitrate_mode;
  81                 /* H264 profile */
  82                 enum v4l2_mpeg_video_h264_profile enc_profile;
  83                 /* H264 level */
  84                 enum v4l2_mpeg_video_h264_level enc_level;
  85                 /* JPEG Q-factor */
  86                 int         q_factor;
  87 
  88                 struct vb2_queue        vb_vidq;
  89 
  90                 /* VC start timestamp for streaming */
  91                 s64         vc_start_timestamp;
  92                 /* Kernel start timestamp for streaming */
  93                 ktime_t kernel_start_ts;
  94                 /* Sequence number of last buffer */
  95                 u32             sequence;
  96 
  97                 struct vchiq_mmal_port  *port; /* port being used for capture */
  98                 /* camera port being used for capture */
  99                 struct vchiq_mmal_port  *camera_port;
 100                 /* component being used for encode */
 101                 struct vchiq_mmal_component *encode_component;
 102                 /* number of frames remaining which driver should capture */
 103                 unsigned int  frame_count;
 104                 /* last frame completion */
 105                 struct completion  frame_cmplt;
 106 
 107         } capture;
 108 
 109         unsigned int camera_num;
 110         unsigned int max_width;
 111         unsigned int max_height;
 112         unsigned int rgb_bgr_swapped;
 113 };
 114 
 115 int bm2835_mmal_init_controls(
 116                         struct bm2835_mmal_dev *dev,
 117                         struct v4l2_ctrl_handler *hdl);
 118 
 119 int bm2835_mmal_set_all_camera_controls(struct bm2835_mmal_dev *dev);
 120 int set_framerate_params(struct bm2835_mmal_dev *dev);
 121 
 122 /* Debug helpers */
 123 
 124 #define v4l2_dump_pix_format(level, debug, dev, pix_fmt, desc)  \
 125 {       \
 126         v4l2_dbg(level, debug, dev,     \
 127 "%s: w %u h %u field %u pfmt 0x%x bpl %u sz_img %u colorspace 0x%x priv %u\n", \
 128                 desc,   \
 129                 (pix_fmt)->width, (pix_fmt)->height, (pix_fmt)->field,  \
 130                 (pix_fmt)->pixelformat, (pix_fmt)->bytesperline,        \
 131                 (pix_fmt)->sizeimage, (pix_fmt)->colorspace, (pix_fmt)->priv); \
 132 }
 133 
 134 #define v4l2_dump_win_format(level, debug, dev, win_fmt, desc)  \
 135 {       \
 136         v4l2_dbg(level, debug, dev,     \
 137 "%s: w %u h %u l %u t %u  field %u chromakey %06X clip %p " \
 138 "clipcount %u bitmap %p\n", \
 139                 desc,   \
 140                 (win_fmt)->w.width, (win_fmt)->w.height, \
 141                 (win_fmt)->w.left, (win_fmt)->w.top, \
 142                 (win_fmt)->field,       \
 143                 (win_fmt)->chromakey,   \
 144                 (win_fmt)->clips, (win_fmt)->clipcount, \
 145                 (win_fmt)->bitmap); \
 146 }

/* [<][>][^][v][top][bottom][index][help] */