brcm2708: update 3.10 patches with raspberrypi/rpi-3.10.y of 27 Apr. 2014
[openwrt/staging/dedeckeh.git] / target / linux / brcm2708 / patches-3.10 / 0141-V4L2-Fix-issue-when-switching-down-JPEG-resolution.patch
1 From 8a529de86bee2dd7e76fc77d0364ace6df3da685 Mon Sep 17 00:00:00 2001
2 From: Dave Stevenson <dsteve@broadcom.com>
3 Date: Mon, 9 Dec 2013 11:24:55 +0000
4 Subject: [PATCH 141/196] V4L2: Fix issue when switching down JPEG resolution.
5
6 JPEG buffer size calculation is based on input resolution.
7 Input resolution was being configured after output port
8 format. Caused failures if switching from one JPEG resolution
9 to a smaller one.
10
11 Signed-off-by: Dave Stevenson <dsteve@broadcom.com>
12 ---
13 drivers/media/platform/bcm2835/bcm2835-camera.c | 126 ++++++++++++++----------
14 1 file changed, 72 insertions(+), 54 deletions(-)
15
16 diff --git a/drivers/media/platform/bcm2835/bcm2835-camera.c b/drivers/media/platform/bcm2835/bcm2835-camera.c
17 index 9fc90a2..4780107 100644
18 --- a/drivers/media/platform/bcm2835/bcm2835-camera.c
19 +++ b/drivers/media/platform/bcm2835/bcm2835-camera.c
20 @@ -955,69 +955,87 @@ static int mmal_setup_components(struct bm2835_mmal_dev *dev,
21 camera_port->current_buffer.num =
22 camera_port->recommended_buffer.num;
23
24 - port->format.encoding = mfmt->mmal;
25 - port->format.encoding_variant = 0;
26 - /* Set any encoding specific parameters */
27 - switch (mfmt->mmal_component) {
28 - case MMAL_COMPONENT_VIDEO_ENCODE:
29 - port->format.bitrate =
30 - dev->capture.encode_bitrate;
31 - break;
32 - case MMAL_COMPONENT_IMAGE_ENCODE:
33 - /* Could set EXIF parameters here */
34 - break;
35 - default:
36 - break;
37 - }
38 - ret = vchiq_mmal_port_set_format(dev->instance, port);
39 -
40 + ret =
41 + vchiq_mmal_port_connect_tunnel(
42 + dev->instance,
43 + camera_port,
44 + &encode_component->input[0]);
45 if (ret) {
46 - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
47 - "%s failed to set format\n", __func__);
48 + v4l2_dbg(1, bcm2835_v4l2_debug,
49 + &dev->v4l2_dev,
50 + "%s failed to create connection\n",
51 + __func__);
52 + /* ensure capture is not going to be tried */
53 + dev->capture.port = NULL;
54 } else {
55 + port->es.video.width = f->fmt.pix.width;
56 + port->es.video.height = f->fmt.pix.height;
57 + port->es.video.crop.x = 0;
58 + port->es.video.crop.y = 0;
59 + port->es.video.crop.width = f->fmt.pix.width;
60 + port->es.video.crop.height = f->fmt.pix.height;
61 + port->es.video.frame_rate.num =
62 + dev->capture.timeperframe.denominator;
63 + port->es.video.frame_rate.den =
64 + dev->capture.timeperframe.numerator;
65 +
66 + port->format.encoding = mfmt->mmal;
67 + port->format.encoding_variant = 0;
68 + /* Set any encoding specific parameters */
69 + switch (mfmt->mmal_component) {
70 + case MMAL_COMPONENT_VIDEO_ENCODE:
71 + port->format.bitrate =
72 + dev->capture.encode_bitrate;
73 + break;
74 + case MMAL_COMPONENT_IMAGE_ENCODE:
75 + /* Could set EXIF parameters here */
76 + break;
77 + default:
78 + break;
79 + }
80 + ret = vchiq_mmal_port_set_format(dev->instance,
81 + port);
82 + if (ret)
83 + v4l2_dbg(1, bcm2835_v4l2_debug,
84 + &dev->v4l2_dev,
85 + "%s failed to set format\n",
86 + __func__);
87 + }
88 +
89 + if (!ret) {
90 ret = vchiq_mmal_component_enable(
91 dev->instance,
92 encode_component);
93 if (ret) {
94 v4l2_dbg(1, bcm2835_v4l2_debug,
95 - &dev->v4l2_dev,
96 - "%s Failed to enable encode components\n",
97 - __func__);
98 - } else {
99 - /* configure buffering */
100 - port->current_buffer.num = 1;
101 - port->current_buffer.size =
102 - f->fmt.pix.sizeimage;
103 - if (port->format.encoding ==
104 - MMAL_ENCODING_JPEG) {
105 - v4l2_dbg(1, bcm2835_v4l2_debug,
106 - &dev->v4l2_dev,
107 - "JPEG - fiddle buffer size\n");
108 - port->current_buffer.size =
109 - (f->fmt.pix.sizeimage <
110 - (100 << 10))
111 - ? (100 << 10) : f->fmt.pix.
112 - sizeimage;
113 - }
114 + &dev->v4l2_dev,
115 + "%s Failed to enable encode components\n",
116 + __func__);
117 + }
118 + }
119 + if (!ret) {
120 + /* configure buffering */
121 + port->current_buffer.num = 1;
122 + port->current_buffer.size =
123 + f->fmt.pix.sizeimage;
124 + if (port->format.encoding ==
125 + MMAL_ENCODING_JPEG) {
126 v4l2_dbg(1, bcm2835_v4l2_debug,
127 - &dev->v4l2_dev,
128 - "vid_cap - current_buffer.size being set to %d\n",
129 - f->fmt.pix.sizeimage);
130 - port->current_buffer.alignment = 0;
131 - ret =
132 - vchiq_mmal_port_connect_tunnel(
133 - dev->instance,
134 - camera_port,
135 - &encode_component->input[0]);
136 - if (ret) {
137 - v4l2_dbg(1, bcm2835_v4l2_debug,
138 - &dev->v4l2_dev,
139 - "%s failed to create connection\n",
140 - __func__);
141 - /* ensure capture is not going to be tried */
142 - dev->capture.port = NULL;
143 - }
144 + &dev->v4l2_dev,
145 + "JPG - buf size now %d was %d\n",
146 + f->fmt.pix.sizeimage,
147 + port->current_buffer.size);
148 + port->current_buffer.size =
149 + (f->fmt.pix.sizeimage <
150 + (100 << 10))
151 + ? (100 << 10) : f->fmt.pix.
152 + sizeimage;
153 }
154 + v4l2_dbg(1, bcm2835_v4l2_debug,
155 + &dev->v4l2_dev,
156 + "vid_cap - cur_buf.size set to %d\n",
157 + f->fmt.pix.sizeimage);
158 + port->current_buffer.alignment = 0;
159 }
160 } else {
161 /* configure buffering */
162 --
163 1.9.1
164