Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 274211 Details for
Bug 363469
media-video/setpwc fails to build with linux-headers 2.6.38
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch to convert setpwc from V4L1 to V4L2
setpwc-1.2-convert_to_v4l2.patch (text/plain), 9.66 KB, created by
Bruno
on 2011-05-21 16:51:15 UTC
(
hide
)
Description:
Patch to convert setpwc from V4L1 to V4L2
Filename:
MIME Type:
Creator:
Bruno
Created:
2011-05-21 16:51:15 UTC
Size:
9.66 KB
patch
obsolete
>Convert setpwc to use V4L2 API instead of deprecated V4L1. > >diff -NurP setpwc-1.2.orig/setpwc.c setpwc-1.2/setpwc.c >--- setpwc-1.2.orig/setpwc.c 2006-11-27 10:14:03.000000000 +0100 >+++ setpwc-1.2/setpwc.c 2011-05-21 16:23:38.127198157 +0200 >@@ -23,7 +23,7 @@ > #include <fcntl.h> > #include <unistd.h> > #define _LINUX_TIME_H 1 /* to get things compile on kernel 2.6.x */ >-#include <linux/videodev.h> >+#include <linux/videodev2.h> > > #include "pwc-ioctl.h" > >@@ -61,11 +61,120 @@ > printf("of your webcam and the driver.\n"); > } > >+void dump_current_settings_ctrl(int fd, const char *prefix, int id) >+{ >+ struct v4l2_control vctrl; >+ struct v4l2_queryctrl qctrl; >+ struct v4l2_querymenu qmenu; >+ const char *flags[10]; >+ int flags_cnt = 0; >+ memset(&vctrl, 0, sizeof(vctrl)); >+ memset(&qctrl, 0, sizeof(qctrl)); >+ vctrl.id = id; >+ qctrl.id = id; >+ if (ioctl(fd, VIDIOC_G_CTRL, &vctrl) == -1) { >+ printf("%s: VIDIOC_G_CTRL failed: %s\n", prefix, strerror(errno)); >+ return; >+ } >+ if (ioctl(fd, VIDIOC_QUERYCTRL, &qctrl) == -1) { >+ printf("%s: VIDIOC_QUERYCTRL failed: %s\n", prefix, strerror(errno)); >+ return; >+ } >+ if (qctrl.flags & V4L2_CTRL_FLAG_DISABLED) >+ flags[flags_cnt++] = "disabled"; >+ if (qctrl.flags & V4L2_CTRL_FLAG_GRABBED) >+ flags[flags_cnt++] = "grabbed"; >+ if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) >+ flags[flags_cnt++] = "read-only"; >+ if (qctrl.flags & V4L2_CTRL_FLAG_UPDATE) >+ flags[flags_cnt++] = "update"; >+ if (qctrl.flags & V4L2_CTRL_FLAG_INACTIVE) >+ flags[flags_cnt++] = "inactive"; >+ if (qctrl.flags & V4L2_CTRL_FLAG_SLIDER) >+ flags[flags_cnt++] = "slider"; >+ flags[flags_cnt] = NULL; >+ switch (qctrl.type) { >+ case V4L2_CTRL_TYPE_INTEGER: >+ printf("%s: %s\n", prefix, qctrl.name); >+ printf(" Value: %d\n", vctrl.value); >+ printf(" Minimum: %d\n", qctrl.minimum); >+ printf(" Maximum: %d\n", qctrl.maximum); >+ printf(" Step: %d\n", qctrl.step); >+ printf(" Default: %d\n", qctrl.default_value); >+ printf(" Flags: "); >+ for (flags_cnt = 0; flags[flags_cnt]; flags_cnt++) >+ printf("%s%s", flags_cnt ? "," : "", flags[flags_cnt]); >+ printf("\n"); >+ break; >+ case V4L2_CTRL_TYPE_BOOLEAN: >+ printf("%s: %s\n", prefix, qctrl.name); >+ printf(" Value: %s\n", vctrl.value ? "enabled" : "disabled"); >+ printf(" Default: %s\n", qctrl.default_value ? "enabled" : "disabled"); >+ printf(" Flags: "); >+ for (flags_cnt = 0; flags[flags_cnt]; flags_cnt++) >+ printf("%s%s", flags_cnt ? "," : "", flags[flags_cnt]); >+ printf("\n"); >+ break; >+ case V4L2_CTRL_TYPE_MENU: >+ printf("%s: %s\n", prefix, qctrl.name); >+ memset(&qmenu, 0, sizeof(qmenu)); >+ qmenu.id = id; >+ qmenu.index = vctrl.value; >+ if (ioctl(fd, VIDIOC_QUERYMENU, &qmenu) == -1) >+ printf(" Value: ??? (%d)\n", vctrl.value); >+ else >+ printf(" Value: %s (%d)\n", qmenu.name, vctrl.value); >+ memset(&qmenu, 0, sizeof(qmenu)); >+ qmenu.id = id; >+ qmenu.index = qctrl.default_value; >+ if (ioctl(fd, VIDIOC_QUERYMENU, &qmenu) == -1) >+ printf(" Default: ??? (%d)\n", qctrl.default_value); >+ else >+ printf(" Default: %s (%d)\n", qmenu.name, qctrl.default_value); >+ printf(" Flags: "); >+ for (flags_cnt = 0; flags[flags_cnt]; flags_cnt++) >+ printf("%s%s", flags_cnt ? "," : "", flags[flags_cnt]); >+ printf("\n"); >+ break; >+ case V4L2_CTRL_TYPE_BUTTON: >+ printf("%s: %s\n", prefix, qctrl.name); >+ printf(" Unsupport type: button\n"); >+ printf(" Flags: "); >+ for (flags_cnt = 0; flags[flags_cnt]; flags_cnt++) >+ printf("%s%s", flags_cnt ? "," : "", flags[flags_cnt]); >+ printf("\n"); >+ break; >+ case V4L2_CTRL_TYPE_INTEGER64: >+ printf("%s: %s\n", prefix, qctrl.name); >+ printf(" Unsupport type: integer64\n"); >+ printf(" Flags: "); >+ for (flags_cnt = 0; flags[flags_cnt]; flags_cnt++) >+ printf("%s%s", flags_cnt ? "," : "", flags[flags_cnt]); >+ printf("\n"); >+ break; >+ case V4L2_CTRL_TYPE_CTRL_CLASS: >+ printf("%s: %s\n", prefix, qctrl.name); >+ printf(" Unsupport type: class\n"); >+ printf(" Flags: "); >+ for (flags_cnt = 0; flags[flags_cnt]; flags_cnt++) >+ printf("%s%s", flags_cnt ? "," : "", flags[flags_cnt]); >+ printf("\n"); >+ break; >+ case V4L2_CTRL_TYPE_STRING: >+ printf("%s: %s\n", prefix, qctrl.name); >+ printf(" Unsupport type: string\n"); >+ printf(" Flags: "); >+ for (flags_cnt = 0; flags[flags_cnt]; flags_cnt++) >+ printf("%s%s", flags_cnt ? "," : "", flags[flags_cnt]); >+ printf("\n"); >+ break; >+ } >+} >+ > void dump_current_settings(int fd) > { >- struct video_capability vcap; >- struct video_window vwin; >- struct video_picture vpic; >+ struct v4l2_capability vcap; >+ struct v4l2_format pixfmt; > struct pwc_probe pwcp; > int dummy; > struct pwc_whitebalance pwcwb; >@@ -75,14 +184,14 @@ > struct pwc_serial ps; > > /* get name */ >- if (ioctl(fd, VIDIOCGCAP, &vcap) == -1) >- error_exit("VIDIOCGCAP"); >- printf("Current device: %s\n", vcap.name); >+ if (ioctl(fd, VIDIOC_QUERYCAP, &vcap) == -1) >+ error_exit("VIDIOC_QUERYCAP"); >+ printf("Current device: %s (%s @ %s)\n", (const char *)vcap.card, (const char *)vcap.driver, (const char *)vcap.bus_info); > > /* verify that it IS a Philips Webcam */ > if (ioctl(fd, VIDIOCPWCPROBE, &pwcp) == -1) > error_exit("VIDIOCPWCPROBE"); >- if (strcmp(vcap.name, pwcp.name) != 0) >+ if (strcmp((const char *)vcap.card, pwcp.name) != 0) > printf("Warning: this might not be a Philips compatible webcam!\n"); > printf("VIDIOCPWCPROBE returns: %s - %d\n", pwcp.name, pwcp.type); > >@@ -91,73 +200,63 @@ > printf("Serial number: %s\n", ps.serial); > > /* get resolution/framerate */ >- if (ioctl(fd, VIDIOCGWIN, &vwin) == -1) >- error_exit("VIDIOCGWIN"); >- printf("Resolution (x, y): %d, %d\n", vwin.width, vwin.height); >- printf("Offset: %d, %d\n", vwin.x, vwin.y); >- if (vwin.flags & PWC_FPS_FRMASK) >- printf("Framerate: %d\n", (vwin.flags & PWC_FPS_FRMASK) >> PWC_FPS_SHIFT); >+ memset(&pixfmt, 0, sizeof(pixfmt)); >+ pixfmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; >+ if (ioctl(fd, VIDIOC_G_FMT, &pixfmt) == -1) >+ error_exit("VIDIOC_G_FMT"); >+ printf("Resolution (x, y): %d, %d\n", pixfmt.fmt.pix.width, pixfmt.fmt.pix.height); >+ if (pixfmt.fmt.pix.priv & PWC_FPS_FRMASK) >+ printf("Framerate: %d\n", (pixfmt.fmt.pix.priv & PWC_FPS_FRMASK) >> PWC_FPS_SHIFT); > > /* color (etc.) settings */ >- if (ioctl(fd, VIDIOCGPICT, &vpic) == -1) >- error_exit("VIDIOCGPICT"); >- printf("Brightness: %d\n", vpic.brightness); >- printf("Hue: %d\n", vpic.hue); >- printf("Colour: %d\n", vpic.colour); >- printf("Contrast: %d\n", vpic.contrast); >- printf("Whiteness: %d\n", vpic.whiteness); >+ dump_current_settings_ctrl(fd, "Brightness", V4L2_CID_BRIGHTNESS); >+ dump_current_settings_ctrl(fd, "Hue", V4L2_CID_HUE); >+ dump_current_settings_ctrl(fd, "Colour", V4L2_CID_SATURATION); >+ dump_current_settings_ctrl(fd, "Contrast", V4L2_CID_CONTRAST); >+ dump_current_settings_ctrl(fd, "Whiteness", V4L2_CID_WHITENESS); > printf("Palette: "); >- switch(vpic.palette) { >- case VIDEO_PALETTE_GREY: >+ switch(pixfmt.fmt.pix.pixelformat) { >+ case V4L2_PIX_FMT_GREY: > printf("Linear intensity grey scale (255 is brightest).\n"); > break; >- case VIDEO_PALETTE_HI240: >+ case V4L2_PIX_FMT_HI240: > printf("The BT848 8bit colour cube.\n"); > break; >- case VIDEO_PALETTE_RGB565: >+ case V4L2_PIX_FMT_RGB565: > printf("RGB565 packed into 16 bit words.\n"); > break; >- case VIDEO_PALETTE_RGB555: >+ case V4L2_PIX_FMT_RGB555: > printf("RGV555 packed into 16 bit words, top bit undefined.\n"); > break; >- case VIDEO_PALETTE_RGB24: >+ case V4L2_PIX_FMT_BGR24: > printf("RGB888 packed into 24bit words.\n"); > break; >- case VIDEO_PALETTE_RGB32: >+ case V4L2_PIX_FMT_BGR32: > printf("RGB888 packed into the low 3 bytes of 32bit words. The top 8bits are undefined.\n"); > break; >- case VIDEO_PALETTE_YUV422: >+ case V4L2_PIX_FMT_YUYV: > printf("Video style YUV422 - 8bits packed 4bits Y 2bits U 2bits V\n"); > break; >- case VIDEO_PALETTE_YUYV: >- printf("Describe me\n"); >- break; >- case VIDEO_PALETTE_UYVY: >+ case V4L2_PIX_FMT_UYVY: > printf("Describe me\n"); > break; >- case VIDEO_PALETTE_YUV420: >- printf("YUV420 capture\n"); >- break; >- case VIDEO_PALETTE_YUV411: >+ case V4L2_PIX_FMT_Y41P: > printf("YUV411 capture\n"); > break; >- case VIDEO_PALETTE_RAW: >- printf("RAW capture (BT848)\n"); >- break; >- case VIDEO_PALETTE_YUV422P: >+ case V4L2_PIX_FMT_YUV422P: > printf("YUV 4:2:2 Planar\n"); > break; >- case VIDEO_PALETTE_YUV411P: >+ case V4L2_PIX_FMT_YUV411P: > printf("YUV 4:1:1 Planar\n"); > break; >- case VIDEO_PALETTE_YUV420P: >+ case V4L2_PIX_FMT_YVU420: > printf("YUV 4:2:0 Planar\n"); > break; >- case VIDEO_PALETTE_YUV410P: >+ case V4L2_PIX_FMT_YVU410: > printf("YUV 4:1:0 Planar\n"); > break; > default: >- printf("Unknown! (%d)\n", vpic.palette); >+ printf("Unknown! (%d - %c%c%c%c)\n", pixfmt.fmt.pix.pixelformat, pixfmt.fmt.pix.pixelformat & 0xff, (pixfmt.fmt.pix.pixelformat >> 8) & 0xff, (pixfmt.fmt.pix.pixelformat >> 16) & 0xff, (pixfmt.fmt.pix.pixelformat >> 24) & 0xff); > } > > if (ioctl(fd, VIDIOCPWCGCQUAL, &dummy) == -1) >@@ -285,26 +384,26 @@ > > void set_dimensions_and_framerate(int fd, int w, int h, int framerate) > { >- struct video_window vwin; >+ struct v4l2_format pixfmt; > > /* get resolution/framerate */ >- if (ioctl(fd, VIDIOCGWIN, &vwin) == -1) >- error_exit("VIDIOCGWIN"); >+ if (ioctl(fd, VIDIOC_G_FMT, &pixfmt) == -1) >+ error_exit("VIDIOC_G_FMT"); > > if (w > 0 && h > 0) > { >- vwin.width = w; >- vwin.height = h; >+ pixfmt.fmt.pix.width = w; >+ pixfmt.fmt.pix.height = h; > } > >- if (vwin.flags & PWC_FPS_FRMASK) >+ if (pixfmt.fmt.pix.priv & PWC_FPS_FRMASK) > { > /* set new framerate */ >- vwin.flags &= ~PWC_FPS_FRMASK; >- vwin.flags |= (framerate << PWC_FPS_SHIFT); >+ pixfmt.fmt.pix.priv &= ~PWC_FPS_FRMASK; >+ pixfmt.fmt.pix.priv |= (framerate << PWC_FPS_SHIFT); > >- if (ioctl(fd, VIDIOCSWIN, &vwin) == -1) >- error_exit("VIDIOCSWIN"); >+ if (ioctl(fd, VIDIOC_S_FMT, &pixfmt) == -1) >+ error_exit("VIDIOC_S_FMT"); > } > else > {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 363469
:
269793
| 274211