Hi,
Here is a diff on the pwc-20051228-042701 snapshot.
It includes b&w/colour mode selection (needed by my Quickcam Zoom) and
adds private controls to v4l2 interface (flickerless, contour, backlight
compensation and noise reduction).
diff pwc-v4l2-20051228-042701/pwc-ctrl.c pwc-mine/pwc-ctrl.c
1002c1002
< static inline int pwc_set_contour(struct pwc_device *pdev, int contour)
---
> inline int pwc_set_contour(struct pwc_device *pdev, int contour)
1027c1027
< static inline int pwc_get_contour(struct pwc_device *pdev, int *contour)
---
> inline int pwc_get_contour(struct pwc_device *pdev, int *contour)
1049c1049
< static inline int pwc_set_backlight(struct pwc_device *pdev, int backlight)
---
> inline int pwc_set_backlight(struct pwc_device *pdev, int backlight)
1060c1060
< static inline int pwc_get_backlight(struct pwc_device *pdev, int *backlight)
---
> inline int pwc_get_backlight(struct pwc_device *pdev, int *backlight)
1071a1072,1094
> int pwc_set_colour_mode(struct pwc_device *pdev, int colour)
> {
> unsigned char buf;
>
> if (colour)
> buf = 0xff;
> else
> buf = 0x0;
> return SendControlMsg(SET_CHROM_CTL, COLOUR_MODE_FORMATTER, 1);
> }
>
> int pwc_get_colour_mode(struct pwc_device *pdev, int *colour)
> {
> int ret;
> unsigned char buf;
>
> ret = RecvControlMsg(GET_CHROM_CTL, COLOUR_MODE_FORMATTER, 1);
> if (ret < 0)
> return ret;
> *colour = buf;
> return 0;
> }
>
1073c1096
< static inline int pwc_set_flicker(struct pwc_device *pdev, int flicker)
---
> inline int pwc_set_flicker(struct pwc_device *pdev, int flicker)
1084c1107
< static inline int pwc_get_flicker(struct pwc_device *pdev, int *flicker)
---
> inline int pwc_get_flicker(struct pwc_device *pdev, int *flicker)
1097c1120
< static inline int pwc_set_dynamic_noise(struct pwc_device *pdev, int noise)
---
> inline int pwc_set_dynamic_noise(struct pwc_device *pdev, int noise)
1109c1132
< static inline int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise)
---
> inline int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise)
diff pwc-v4l2-20051228-042701/pwc.h pwc-mine/pwc.h
290a291,301
> extern int pwc_set_colour_mode(struct pwc_device *pdev, int colour);
> extern int pwc_get_colour_mode(struct pwc_device *pdev, int *colour);
> extern int pwc_set_contour(struct pwc_device *pdev, int contour);
> extern int pwc_get_contour(struct pwc_device *pdev, int *contour);
> extern int pwc_set_backlight(struct pwc_device *pdev, int backlight);
> extern int pwc_get_backlight(struct pwc_device *pdev, int *backlight);
> extern int pwc_set_flicker(struct pwc_device *pdev, int flicker);
> extern int pwc_get_flicker(struct pwc_device *pdev, int *flicker);
> extern int pwc_set_dynamic_noise(struct pwc_device *pdev, int noise);
> extern int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise);
>
diff pwc-v4l2-20051228-042701/pwc-ioctl.h pwc-mine/pwc-ioctl.h
304a305,310
> #define V4L2_CID_PRIVATE_COLOUR_MODE (V4L2_CID_PRIVATE_BASE + 3)
> #define V4L2_CID_PRIVATE_AUTOCONTOUR (V4L2_CID_PRIVATE_BASE + 4)
> #define V4L2_CID_PRIVATE_CONTOUR (V4L2_CID_PRIVATE_BASE + 5)
> #define V4L2_CID_PRIVATE_BACKLIGHT (V4L2_CID_PRIVATE_BASE + 6)
> #define V4L2_CID_PRIVATE_FLICKERLESS (V4L2_CID_PRIVATE_BASE + 7)
> #define V4L2_CID_PRIVATE_NOISE_REDUCTION (V4L2_CID_PRIVATE_BASE + 8)
diff pwc-v4l2-20051228-042701/pwc-v4l.c pwc-mine/pwc-v4l.c
130a131
> #define XAWTV_HAS_BEEN_FIXED 1
158c159,213
< },
---
> },
> {
> .id = V4L2_CID_PRIVATE_COLOUR_MODE,
> .type = V4L2_CTRL_TYPE_BOOLEAN,
> .name = "Colour mode",
> .minimum = 0,
> .maximum = 1,
> .step = 1,
> .default_value = 0,
> },
> {
> .id = V4L2_CID_PRIVATE_AUTOCONTOUR,
> .type = V4L2_CTRL_TYPE_BOOLEAN,
> .name = "Auto contour",
> .minimum = 0,
> .maximum = 1,
> .step = 1,
> .default_value = 0,
> },
> {
> .id = V4L2_CID_PRIVATE_CONTOUR,
> .type = V4L2_CTRL_TYPE_INTEGER,
> .name = "Contour",
> .minimum = 0,
> .maximum = 63,
> .step = 1,
> .default_value = 0,
> },
> {
> .id = V4L2_CID_PRIVATE_BACKLIGHT,
> .type = V4L2_CTRL_TYPE_BOOLEAN,
> .name = "Backlight compensation",
> .minimum = 0,
> .maximum = 1,
> .step = 1,
> .default_value = 0,
> },
> {
> .id = V4L2_CID_PRIVATE_FLICKERLESS,
> .type = V4L2_CTRL_TYPE_BOOLEAN,
> .name = "Flickerless",
> .minimum = 0,
> .maximum = 1,
> .step = 1,
> .default_value = 0,
> },
> {
> .id = V4L2_CID_PRIVATE_NOISE_REDUCTION,
> .type = V4L2_CTRL_TYPE_INTEGER,
> .name = "Noise reduction",
> .minimum = 0,
> .maximum = 3,
> .step = 1,
> .default_value = 0,
> },
660c715,751
< case V4L2_CID_PRIVATE_SAVE_USER:
---
> case V4L2_CID_PRIVATE_COLOUR_MODE:
> ret = pwc_get_colour_mode(pdev, &c->value);
> if (ret < 0)
> return -EINVAL;
> c->value=(c->value?1:0);
> return 0;
>
> case V4L2_CID_PRIVATE_AUTOCONTOUR:
> ret = pwc_get_contour(pdev, &c->value);
> if (ret < 0)
> return -EINVAL;
> c->value=(c->value == -1?1:0);
> return 0;
> case V4L2_CID_PRIVATE_CONTOUR:
> ret = pwc_get_contour(pdev, &c->value);
> if (ret < 0)
> return -EINVAL;
> c->value >>= 10;
> return 0;
> case V4L2_CID_PRIVATE_BACKLIGHT:
> ret = pwc_get_backlight(pdev, &c->value);
> if (ret < 0)
> return -EINVAL;
> c->value=(c->value?1:0);
> return 0;
> case V4L2_CID_PRIVATE_FLICKERLESS:
> ret = pwc_get_flicker(pdev, &c->value);
> if (ret < 0)
> return -EINVAL;
> c->value=(c->value?1:0);
> case V4L2_CID_PRIVATE_NOISE_REDUCTION:
> ret = pwc_get_dynamic_noise(pdev, &c->value);
> if (ret < 0)
> return -EINVAL;
> return 0;
>
> case V4L2_CID_PRIVATE_SAVE_USER:
675c766
< c->value <<= 8;
---
> c->value <<= 9;
681c772
< c->value <<= 8;
---
> c->value <<= 10;
685a777,782
> case V4L2_CID_SATURATION:
> c->value = 32768 + c->value * 327;
> ret = pwc_set_saturation(pdev, c->value);
> if (ret<0)
> return -EINVAL;
> return 0;
687c784
< c->value <<= 8;
---
> c->value <<= 11;
741a839,869
> case V4L2_CID_PRIVATE_COLOUR_MODE:
> ret = pwc_set_colour_mode(pdev, c->value);
> if (ret < 0)
> return -EINVAL;
> return 0;
> case V4L2_CID_PRIVATE_AUTOCONTOUR:
> c->value=(c->value == 1)?-1:0;
> ret = pwc_set_contour(pdev, c->value);
> if (ret < 0)
> return -EINVAL;
> return 0;
> case V4L2_CID_PRIVATE_CONTOUR:
> c->value <<= 10;
> ret = pwc_set_contour(pdev, c->value);
> if (ret < 0)
> return -EINVAL;
> return 0;
> case V4L2_CID_PRIVATE_BACKLIGHT:
> ret = pwc_set_backlight(pdev, c->value);
> if (ret < 0)
> return -EINVAL;
> return 0;
> case V4L2_CID_PRIVATE_FLICKERLESS:
> ret = pwc_set_flicker(pdev, c->value);
> if (ret < 0)
> return -EINVAL;
> case V4L2_CID_PRIVATE_NOISE_REDUCTION:
> ret = pwc_set_dynamic_noise(pdev, c->value);
> if (ret < 0)
> return -EINVAL;
> return 0;
_______________________________________________
pwc mailing list
[email protected]
http://lists.saillard.org/mailman/listinfo/pwc