diff options
author | Jean-Francois Moine <moinejf@free.fr> | 2009-03-02 04:40:52 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-03-30 11:43:22 -0400 |
commit | 77ac0baf24d1a43498f7bdf6efa2ee6c4ed0ebaa (patch) | |
tree | d5a6108117df3bbf9f93ce5e69bd29ee386c9945 /drivers/media/video/gspca/spca500.c | |
parent | 71cb2764fcc51bd9e1b95be5b0f2da6f026634c7 (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.c | 35 |
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 | ||
1027 | static 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 | |||
1043 | static 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 */ |
1025 | static struct sd_desc sd_desc = { | 1056 | static 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 -- */ |