aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/spca500.c
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2009-03-02 04:40:52 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-30 11:43:22 -0400
commit77ac0baf24d1a43498f7bdf6efa2ee6c4ed0ebaa (patch)
treed5a6108117df3bbf9f93ce5e69bd29ee386c9945 /drivers/media/video/gspca/spca500.c
parent71cb2764fcc51bd9e1b95be5b0f2da6f026634c7 (diff)
V4L/DVB (11040): gspca - most jpeg subdrivers: Have the JPEG quality settable.
The JPEG quality of the images (quantization tables) is now settable by the VIDIOC_S_JPEGCOMP ioctl. Signed-off-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca/spca500.c')
-rw-r--r--drivers/media/video/gspca/spca500.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/drivers/media/video/gspca/spca500.c b/drivers/media/video/gspca/spca500.c
index 2176ac6850e3..6f38fa6d86b6 100644
--- a/drivers/media/video/gspca/spca500.c
+++ b/drivers/media/video/gspca/spca500.c
@@ -39,6 +39,9 @@ struct sd {
39 unsigned char contrast; 39 unsigned char contrast;
40 unsigned char colors; 40 unsigned char colors;
41 u8 quality; 41 u8 quality;
42#define QUALITY_MIN 70
43#define QUALITY_MAX 95
44#define QUALITY_DEF 85
42 45
43 char subtype; 46 char subtype;
44#define AgfaCl20 0 47#define AgfaCl20 0
@@ -642,7 +645,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
642 sd->brightness = BRIGHTNESS_DEF; 645 sd->brightness = BRIGHTNESS_DEF;
643 sd->contrast = CONTRAST_DEF; 646 sd->contrast = CONTRAST_DEF;
644 sd->colors = COLOR_DEF; 647 sd->colors = COLOR_DEF;
645 sd->quality = 85; 648 sd->quality = QUALITY_DEF;
646 return 0; 649 return 0;
647} 650}
648 651
@@ -1021,6 +1024,34 @@ static int sd_getcolors(struct gspca_dev *gspca_dev, __s32 *val)
1021 return 0; 1024 return 0;
1022} 1025}
1023 1026
1027static int sd_set_jcomp(struct gspca_dev *gspca_dev,
1028 struct v4l2_jpegcompression *jcomp)
1029{
1030 struct sd *sd = (struct sd *) gspca_dev;
1031
1032 if (jcomp->quality < QUALITY_MIN)
1033 sd->quality = QUALITY_MIN;
1034 else if (jcomp->quality > QUALITY_MAX)
1035 sd->quality = QUALITY_MAX;
1036 else
1037 sd->quality = jcomp->quality;
1038 if (gspca_dev->streaming)
1039 jpeg_set_qual(sd->jpeg_hdr, sd->quality);
1040 return 0;
1041}
1042
1043static int sd_get_jcomp(struct gspca_dev *gspca_dev,
1044 struct v4l2_jpegcompression *jcomp)
1045{
1046 struct sd *sd = (struct sd *) gspca_dev;
1047
1048 memset(jcomp, 0, sizeof *jcomp);
1049 jcomp->quality = sd->quality;
1050 jcomp->jpeg_markers = V4L2_JPEG_MARKER_DHT
1051 | V4L2_JPEG_MARKER_DQT;
1052 return 0;
1053}
1054
1024/* sub-driver description */ 1055/* sub-driver description */
1025static struct sd_desc sd_desc = { 1056static struct sd_desc sd_desc = {
1026 .name = MODULE_NAME, 1057 .name = MODULE_NAME,
@@ -1032,6 +1063,8 @@ static struct sd_desc sd_desc = {
1032 .stopN = sd_stopN, 1063 .stopN = sd_stopN,
1033 .stop0 = sd_stop0, 1064 .stop0 = sd_stop0,
1034 .pkt_scan = sd_pkt_scan, 1065 .pkt_scan = sd_pkt_scan,
1066 .get_jcomp = sd_get_jcomp,
1067 .set_jcomp = sd_set_jcomp,
1035}; 1068};
1036 1069
1037/* -- module initialisation -- */ 1070/* -- module initialisation -- */