linux/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.h
<<
>>
Prefs
   1/*
   2 * Broadcom BM2835 V4L2 driver
   3 *
   4 * Copyright © 2013 Raspberry Pi (Trading) Ltd.
   5 *
   6 * This file is subject to the terms and conditions of the GNU General Public
   7 * License.  See the file COPYING in the main directory of this archive
   8 * for more details.
   9 *
  10 * Authors: Vincent Sanders <vincent.sanders@collabora.co.uk>
  11 *          Dave Stevenson <dsteve@broadcom.com>
  12 *          Simon Mellor <simellor@broadcom.com>
  13 *          Luke Diamand <luked@broadcom.com>
  14 *
  15 * core driver device
  16 */
  17
  18#define V4L2_CTRL_COUNT 29 /* number of v4l controls */
  19
  20enum {
  21        MMAL_COMPONENT_CAMERA = 0,
  22        MMAL_COMPONENT_PREVIEW,
  23        MMAL_COMPONENT_IMAGE_ENCODE,
  24        MMAL_COMPONENT_VIDEO_ENCODE,
  25        MMAL_COMPONENT_COUNT
  26};
  27
  28enum {
  29        MMAL_CAMERA_PORT_PREVIEW = 0,
  30        MMAL_CAMERA_PORT_VIDEO,
  31        MMAL_CAMERA_PORT_CAPTURE,
  32        MMAL_CAMERA_PORT_COUNT
  33};
  34
  35#define PREVIEW_LAYER      2
  36
  37extern int bcm2835_v4l2_debug;
  38
  39struct bm2835_mmal_dev {
  40        /* v4l2 devices */
  41        struct v4l2_device     v4l2_dev;
  42        struct video_device    vdev;
  43        struct mutex           mutex;
  44
  45        /* controls */
  46        struct v4l2_ctrl_handler  ctrl_handler;
  47        struct v4l2_ctrl          *ctrls[V4L2_CTRL_COUNT];
  48        enum v4l2_scene_mode      scene_mode;
  49        struct mmal_colourfx      colourfx;
  50        int                       hflip;
  51        int                       vflip;
  52        int                       red_gain;
  53        int                       blue_gain;
  54        enum mmal_parameter_exposuremode exposure_mode_user;
  55        enum v4l2_exposure_auto_type exposure_mode_v4l2_user;
  56        /* active exposure mode may differ if selected via a scene mode */
  57        enum mmal_parameter_exposuremode exposure_mode_active;
  58        enum mmal_parameter_exposuremeteringmode metering_mode;
  59        unsigned int              manual_shutter_speed;
  60        bool                      exp_auto_priority;
  61        bool manual_iso_enabled;
  62        u32 iso;
  63
  64        /* allocated mmal instance and components */
  65        struct vchiq_mmal_instance   *instance;
  66        struct vchiq_mmal_component  *component[MMAL_COMPONENT_COUNT];
  67        int camera_use_count;
  68
  69        struct v4l2_window overlay;
  70
  71        struct {
  72                unsigned int     width;  /* width */
  73                unsigned int     height;  /* height */
  74                unsigned int     stride;  /* stride */
  75                unsigned int     buffersize; /* buffer size with padding */
  76                struct mmal_fmt  *fmt;
  77                struct v4l2_fract timeperframe;
  78
  79                /* H264 encode bitrate */
  80                int         encode_bitrate;
  81                /* H264 bitrate mode. CBR/VBR */
  82                int         encode_bitrate_mode;
  83                /* H264 profile */
  84                enum v4l2_mpeg_video_h264_profile enc_profile;
  85                /* H264 level */
  86                enum v4l2_mpeg_video_h264_level enc_level;
  87                /* JPEG Q-factor */
  88                int         q_factor;
  89
  90                struct vb2_queue        vb_vidq;
  91
  92                /* VC start timestamp for streaming */
  93                s64         vc_start_timestamp;
  94                /* Kernel start timestamp for streaming */
  95                struct timeval kernel_start_ts;
  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
 115int bm2835_mmal_init_controls(
 116                        struct bm2835_mmal_dev *dev,
 117                        struct v4l2_ctrl_handler *hdl);
 118
 119int bm2835_mmal_set_all_camera_controls(struct bm2835_mmal_dev *dev);
 120int 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#define v4l2_dump_win_format(level, debug, dev, win_fmt, desc)  \
 134{       \
 135        v4l2_dbg(level, debug, dev,     \
 136"%s: w %u h %u l %u t %u  field %u chromakey %06X clip %p " \
 137"clipcount %u bitmap %p\n", \
 138                desc,   \
 139                (win_fmt)->w.width, (win_fmt)->w.height, \
 140                (win_fmt)->w.left, (win_fmt)->w.top, \
 141                (win_fmt)->field,       \
 142                (win_fmt)->chromakey,   \
 143                (win_fmt)->clips, (win_fmt)->clipcount, \
 144                (win_fmt)->bitmap); \
 145}
 146