aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/usb/s2255
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2013-02-15 03:53:45 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-03-05 13:34:47 -0500
commit7041dec7a93039d1386ad0f5070dc2318d66a18d (patch)
treeb306986f4373030eed95a48ce1f5fd00c63c8be0 /drivers/media/usb/s2255
parent192f1e78cb9cbc1a2cee866f5e03a52857e648b6 (diff)
[media] s2255: add V4L2_CID_JPEG_COMPRESSION_QUALITY
The use of the V4L2_CID_JPEG_COMPRESSION_QUALITY control is recommended over the G/S_JPEGCOMP ioctls. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/usb/s2255')
-rw-r--r--drivers/media/usb/s2255/s2255drv.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/drivers/media/usb/s2255/s2255drv.c b/drivers/media/usb/s2255/s2255drv.c
index 2dcb29b647f0..42c3afe215b2 100644
--- a/drivers/media/usb/s2255/s2255drv.c
+++ b/drivers/media/usb/s2255/s2255drv.c
@@ -219,12 +219,13 @@ struct s2255_dev;
219struct s2255_channel { 219struct s2255_channel {
220 struct video_device vdev; 220 struct video_device vdev;
221 struct v4l2_ctrl_handler hdl; 221 struct v4l2_ctrl_handler hdl;
222 struct v4l2_ctrl *jpegqual_ctrl;
222 int resources; 223 int resources;
223 struct s2255_dmaqueue vidq; 224 struct s2255_dmaqueue vidq;
224 struct s2255_bufferi buffer; 225 struct s2255_bufferi buffer;
225 struct s2255_mode mode; 226 struct s2255_mode mode;
226 /* jpeg compression */ 227 /* jpeg compression */
227 struct v4l2_jpegcompression jc; 228 unsigned jpegqual;
228 /* capture parameters (for high quality mode full size) */ 229 /* capture parameters (for high quality mode full size) */
229 struct v4l2_captureparm cap_parm; 230 struct v4l2_captureparm cap_parm;
230 int cur_frame; 231 int cur_frame;
@@ -1015,7 +1016,7 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1015 case V4L2_PIX_FMT_MJPEG: 1016 case V4L2_PIX_FMT_MJPEG:
1016 mode.color &= ~MASK_COLOR; 1017 mode.color &= ~MASK_COLOR;
1017 mode.color |= COLOR_JPG; 1018 mode.color |= COLOR_JPG;
1018 mode.color |= (channel->jc.quality << 8); 1019 mode.color |= (channel->jpegqual << 8);
1019 break; 1020 break;
1020 case V4L2_PIX_FMT_YUV422P: 1021 case V4L2_PIX_FMT_YUV422P:
1021 mode.color &= ~MASK_COLOR; 1022 mode.color &= ~MASK_COLOR;
@@ -1185,7 +1186,7 @@ static int s2255_set_mode(struct s2255_channel *channel,
1185 mode->color &= ~MASK_COLOR; 1186 mode->color &= ~MASK_COLOR;
1186 mode->color |= COLOR_JPG; 1187 mode->color |= COLOR_JPG;
1187 mode->color &= ~MASK_JPG_QUALITY; 1188 mode->color &= ~MASK_JPG_QUALITY;
1188 mode->color |= (channel->jc.quality << 8); 1189 mode->color |= (channel->jpegqual << 8);
1189 } 1190 }
1190 /* save the mode */ 1191 /* save the mode */
1191 channel->mode = *mode; 1192 channel->mode = *mode;
@@ -1434,6 +1435,9 @@ static int s2255_s_ctrl(struct v4l2_ctrl *ctrl)
1434 mode.color &= ~MASK_INPUT_TYPE; 1435 mode.color &= ~MASK_INPUT_TYPE;
1435 mode.color |= !ctrl->val << 16; 1436 mode.color |= !ctrl->val << 16;
1436 break; 1437 break;
1438 case V4L2_CID_JPEG_COMPRESSION_QUALITY:
1439 channel->jpegqual = ctrl->val;
1440 return 0;
1437 default: 1441 default:
1438 return -EINVAL; 1442 return -EINVAL;
1439 } 1443 }
@@ -1451,7 +1455,9 @@ static int vidioc_g_jpegcomp(struct file *file, void *priv,
1451{ 1455{
1452 struct s2255_fh *fh = priv; 1456 struct s2255_fh *fh = priv;
1453 struct s2255_channel *channel = fh->channel; 1457 struct s2255_channel *channel = fh->channel;
1454 *jc = channel->jc; 1458
1459 memset(jc, 0, sizeof(*jc));
1460 jc->quality = channel->jpegqual;
1455 dprintk(2, "%s: quality %d\n", __func__, jc->quality); 1461 dprintk(2, "%s: quality %d\n", __func__, jc->quality);
1456 return 0; 1462 return 0;
1457} 1463}
@@ -1463,7 +1469,7 @@ static int vidioc_s_jpegcomp(struct file *file, void *priv,
1463 struct s2255_channel *channel = fh->channel; 1469 struct s2255_channel *channel = fh->channel;
1464 if (jc->quality < 0 || jc->quality > 100) 1470 if (jc->quality < 0 || jc->quality > 100)
1465 return -EINVAL; 1471 return -EINVAL;
1466 channel->jc.quality = jc->quality; 1472 v4l2_ctrl_s_ctrl(channel->jpegqual_ctrl, jc->quality);
1467 dprintk(2, "%s: quality %d\n", __func__, jc->quality); 1473 dprintk(2, "%s: quality %d\n", __func__, jc->quality);
1468 return 0; 1474 return 0;
1469} 1475}
@@ -1864,7 +1870,7 @@ static int s2255_probe_v4l(struct s2255_dev *dev)
1864 channel = &dev->channel[i]; 1870 channel = &dev->channel[i];
1865 INIT_LIST_HEAD(&channel->vidq.active); 1871 INIT_LIST_HEAD(&channel->vidq.active);
1866 1872
1867 v4l2_ctrl_handler_init(&channel->hdl, 5); 1873 v4l2_ctrl_handler_init(&channel->hdl, 6);
1868 v4l2_ctrl_new_std(&channel->hdl, &s2255_ctrl_ops, 1874 v4l2_ctrl_new_std(&channel->hdl, &s2255_ctrl_ops,
1869 V4L2_CID_BRIGHTNESS, -127, 127, 1, DEF_BRIGHT); 1875 V4L2_CID_BRIGHTNESS, -127, 127, 1, DEF_BRIGHT);
1870 v4l2_ctrl_new_std(&channel->hdl, &s2255_ctrl_ops, 1876 v4l2_ctrl_new_std(&channel->hdl, &s2255_ctrl_ops,
@@ -1873,6 +1879,10 @@ static int s2255_probe_v4l(struct s2255_dev *dev)
1873 V4L2_CID_SATURATION, 0, 255, 1, DEF_SATURATION); 1879 V4L2_CID_SATURATION, 0, 255, 1, DEF_SATURATION);
1874 v4l2_ctrl_new_std(&channel->hdl, &s2255_ctrl_ops, 1880 v4l2_ctrl_new_std(&channel->hdl, &s2255_ctrl_ops,
1875 V4L2_CID_HUE, 0, 255, 1, DEF_HUE); 1881 V4L2_CID_HUE, 0, 255, 1, DEF_HUE);
1882 channel->jpegqual_ctrl = v4l2_ctrl_new_std(&channel->hdl,
1883 &s2255_ctrl_ops,
1884 V4L2_CID_JPEG_COMPRESSION_QUALITY,
1885 0, 100, 1, S2255_DEF_JPEG_QUAL);
1876 if (dev->dsp_fw_ver >= S2255_MIN_DSP_COLORFILTER && 1886 if (dev->dsp_fw_ver >= S2255_MIN_DSP_COLORFILTER &&
1877 (dev->pid != 0x2257 || channel->idx <= 1)) 1887 (dev->pid != 0x2257 || channel->idx <= 1))
1878 v4l2_ctrl_new_custom(&channel->hdl, &color_filter_ctrl, NULL); 1888 v4l2_ctrl_new_custom(&channel->hdl, &color_filter_ctrl, NULL);
@@ -2238,7 +2248,7 @@ static int s2255_board_init(struct s2255_dev *dev)
2238 channel->mode = mode_def; 2248 channel->mode = mode_def;
2239 if (dev->pid == 0x2257 && j > 1) 2249 if (dev->pid == 0x2257 && j > 1)
2240 channel->mode.color |= (1 << 16); 2250 channel->mode.color |= (1 << 16);
2241 channel->jc.quality = S2255_DEF_JPEG_QUAL; 2251 channel->jpegqual = S2255_DEF_JPEG_QUAL;
2242 channel->width = LINE_SZ_4CIFS_NTSC; 2252 channel->width = LINE_SZ_4CIFS_NTSC;
2243 channel->height = NUM_LINES_4CIFS_NTSC * 2; 2253 channel->height = NUM_LINES_4CIFS_NTSC * 2;
2244 channel->fmt = &formats[0]; 2254 channel->fmt = &formats[0];