提交 dccdcccd 编写于 作者: J Jean-François Moine 提交者: Mauro Carvalho Chehab

[media] gspca - sonixj: Have the same JPEG quality for encoding and decoding

Signed-off-by: NJean-François Moine <moinejf@free.fr>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 a4a3076f
...@@ -63,7 +63,6 @@ struct sd { ...@@ -63,7 +63,6 @@ struct sd {
#define QUALITY_MIN 60 #define QUALITY_MIN 60
#define QUALITY_MAX 95 #define QUALITY_MAX 95
#define QUALITY_DEF 80 #define QUALITY_DEF 80
u8 jpegqual; /* webcam quality */
u8 reg01; u8 reg01;
u8 reg17; u8 reg17;
...@@ -1786,7 +1785,6 @@ static int sd_config(struct gspca_dev *gspca_dev, ...@@ -1786,7 +1785,6 @@ static int sd_config(struct gspca_dev *gspca_dev,
sd->ag_cnt = -1; sd->ag_cnt = -1;
sd->quality = QUALITY_DEF; sd->quality = QUALITY_DEF;
sd->jpegqual = 80;
return 0; return 0;
} }
...@@ -2273,18 +2271,12 @@ static void setfreq(struct gspca_dev *gspca_dev) ...@@ -2273,18 +2271,12 @@ static void setfreq(struct gspca_dev *gspca_dev)
static void setjpegqual(struct gspca_dev *gspca_dev) static void setjpegqual(struct gspca_dev *gspca_dev)
{ {
struct sd *sd = (struct sd *) gspca_dev; struct sd *sd = (struct sd *) gspca_dev;
int i, sc;
if (sd->jpegqual < 50) jpeg_set_qual(sd->jpeg_hdr, sd->quality);
sc = 5000 / sd->jpegqual;
else
sc = 200 - sd->jpegqual * 2;
#if USB_BUF_SZ < 64 #if USB_BUF_SZ < 64
#error "No room enough in usb_buf for quantization table" #error "No room enough in usb_buf for quantization table"
#endif #endif
for (i = 0; i < 64; i++) memcpy(gspca_dev->usb_buf, &sd->jpeg_hdr[JPEG_QT0_OFFSET], 64);
gspca_dev->usb_buf[i] =
(jpeg_head[JPEG_QT0_OFFSET + i] * sc + 50) / 100;
usb_control_msg(gspca_dev->dev, usb_control_msg(gspca_dev->dev,
usb_sndctrlpipe(gspca_dev->dev, 0), usb_sndctrlpipe(gspca_dev->dev, 0),
0x08, 0x08,
...@@ -2292,9 +2284,7 @@ static void setjpegqual(struct gspca_dev *gspca_dev) ...@@ -2292,9 +2284,7 @@ static void setjpegqual(struct gspca_dev *gspca_dev)
0x0100, 0, 0x0100, 0,
gspca_dev->usb_buf, 64, gspca_dev->usb_buf, 64,
500); 500);
for (i = 0; i < 64; i++) memcpy(gspca_dev->usb_buf, &sd->jpeg_hdr[JPEG_QT1_OFFSET], 64);
gspca_dev->usb_buf[i] =
(jpeg_head[JPEG_QT1_OFFSET + i] * sc + 50) / 100;
usb_control_msg(gspca_dev->dev, usb_control_msg(gspca_dev->dev,
usb_sndctrlpipe(gspca_dev->dev, 0), usb_sndctrlpipe(gspca_dev->dev, 0),
0x08, 0x08,
...@@ -2340,7 +2330,6 @@ static int sd_start(struct gspca_dev *gspca_dev) ...@@ -2340,7 +2330,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
/* create the JPEG header */ /* create the JPEG header */
jpeg_define(sd->jpeg_hdr, gspca_dev->height, gspca_dev->width, jpeg_define(sd->jpeg_hdr, gspca_dev->height, gspca_dev->width,
0x21); /* JPEG 422 */ 0x21); /* JPEG 422 */
jpeg_set_qual(sd->jpeg_hdr, sd->quality);
/* initialize the bridge */ /* initialize the bridge */
sn9c1xx = sn_tb[sd->sensor]; sn9c1xx = sn_tb[sd->sensor];
...@@ -2901,7 +2890,7 @@ static int sd_set_jcomp(struct gspca_dev *gspca_dev, ...@@ -2901,7 +2890,7 @@ static int sd_set_jcomp(struct gspca_dev *gspca_dev,
else else
sd->quality = jcomp->quality; sd->quality = jcomp->quality;
if (gspca_dev->streaming) if (gspca_dev->streaming)
jpeg_set_qual(sd->jpeg_hdr, sd->quality); setjpegqual(gspca_dev);
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册