1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#define V4L2_CTRL_COUNT 29
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
41 struct v4l2_device v4l2_dev;
42 struct video_device vdev;
43 struct mutex mutex;
44
45
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
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
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;
73 unsigned int height;
74 unsigned int stride;
75 unsigned int buffersize;
76 struct mmal_fmt *fmt;
77 struct v4l2_fract timeperframe;
78
79
80 int encode_bitrate;
81
82 int encode_bitrate_mode;
83
84 enum v4l2_mpeg_video_h264_profile enc_profile;
85
86 enum v4l2_mpeg_video_h264_level enc_level;
87
88 int q_factor;
89
90 struct vb2_queue vb_vidq;
91
92
93 s64 vc_start_timestamp;
94
95 struct timeval kernel_start_ts;
96
97 struct vchiq_mmal_port *port;
98
99 struct vchiq_mmal_port *camera_port;
100
101 struct vchiq_mmal_component *encode_component;
102
103 unsigned int frame_count;
104
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
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