mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
120 lines
3.8 KiB
Diff
120 lines
3.8 KiB
Diff
diff -up xawtv-3.95/console/v4l-conf.c~ xawtv-3.95/console/v4l-conf.c
|
|
--- xawtv-3.95/console/v4l-conf.c~ 2008-08-03 22:22:01.000000000 +0200
|
|
+++ xawtv-3.95/console/v4l-conf.c 2008-08-03 22:34:33.000000000 +0200
|
|
@@ -221,6 +221,21 @@ displayinfo_x11(Display *dpy, struct DIS
|
|
}
|
|
}
|
|
|
|
+#ifdef HAVE_LIBXXF86DGA
|
|
+static int dga_error = 0;
|
|
+static int dga_error_base;
|
|
+static int (*orig_xfree_error_handler)(Display *, XErrorEvent *);
|
|
+
|
|
+static int dga_error_handler(Display *d, XErrorEvent *e)
|
|
+{
|
|
+ if (e->error_code == (dga_error_base + XF86DGANoDirectVideoMode)) {
|
|
+ dga_error = 1;
|
|
+ return 0;
|
|
+ }
|
|
+ return orig_xfree_error_handler(d, e);
|
|
+}
|
|
+#endif
|
|
+
|
|
static void
|
|
displayinfo_dga(Display *dpy, struct DISPLAYINFO *d)
|
|
{
|
|
@@ -228,7 +243,7 @@ displayinfo_dga(Display *dpy, struct DIS
|
|
int width,bar,foo,major,minor,flags=0;
|
|
void *base = NULL;
|
|
|
|
- if (!XF86DGAQueryExtension(dpy,&foo,&bar)) {
|
|
+ if (!XF86DGAQueryExtension(dpy,&foo,&dga_error_base)) {
|
|
fprintf(stderr,"WARNING: Your X-Server has no DGA support.\n");
|
|
return;
|
|
}
|
|
@@ -240,7 +255,14 @@ displayinfo_dga(Display *dpy, struct DIS
|
|
fprintf(stderr,"WARNING: No DGA support available for this display.\n");
|
|
return;
|
|
}
|
|
+ orig_xfree_error_handler = XSetErrorHandler(dga_error_handler);
|
|
XF86DGAGetVideoLL(dpy,XDefaultScreen(dpy),(void*)&base,&width,&foo,&bar);
|
|
+ XSync(dpy, 0);
|
|
+ XSetErrorHandler(orig_xfree_error_handler);
|
|
+ if (dga_error) {
|
|
+ fprintf(stderr,"WARNING: No DGA direct video mode for this display.\n");
|
|
+ return;
|
|
+ }
|
|
d->bpl = width * d->bpp/8;
|
|
d->base = base;
|
|
#else
|
|
diff -up xawtv-3.95/libng/plugins/drv0-v4l2.c~ xawtv-3.95/libng/plugins/drv0-v4l2.c
|
|
--- xawtv-3.95/libng/plugins/drv0-v4l2.c~ 2008-08-03 21:52:41.000000000 +0200
|
|
+++ xawtv-3.95/libng/plugins/drv0-v4l2.c 2008-08-03 22:23:01.000000000 +0200
|
|
@@ -618,7 +618,7 @@ v4l2_setupfb(void *handle, struct ng_vid
|
|
return -1;
|
|
|
|
/* double-check settings */
|
|
- if (NULL != base && h->ov_fb.base != base) {
|
|
+ if ((NULL != base && h->ov_fb.base != base) || h->ov_fb.base == NULL) {
|
|
fprintf(stderr,"v4l2: WARNING: framebuffer base address mismatch\n");
|
|
fprintf(stderr,"v4l2: me=%p v4l=%p\n",base,h->ov_fb.base);
|
|
h->ov_error = 1;
|
|
diff -up xawtv-3.95/x11/xt.c~ xawtv-3.95/x11/xt.c
|
|
--- xawtv-3.95/x11/xt.c~ 2008-08-03 22:22:11.000000000 +0200
|
|
+++ xawtv-3.95/x11/xt.c 2008-08-03 22:35:14.000000000 +0200
|
|
@@ -1247,18 +1247,21 @@ FilterAction(Widget widget, XEvent *even
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
+#ifdef HAVE_LIBXXF86DGA
|
|
+static int xfree_dga_error_base;
|
|
+#endif
|
|
|
|
void
|
|
xfree_dga_init(Display *dpy)
|
|
{
|
|
#ifdef HAVE_LIBXXF86DGA
|
|
- int flags,foo,bar,ma,mi;
|
|
+ int flags,foo,ma,mi;
|
|
|
|
if (!do_overlay)
|
|
return;
|
|
|
|
if (args.dga) {
|
|
- if (XF86DGAQueryExtension(dpy,&foo,&bar)) {
|
|
+ if (XF86DGAQueryExtension(dpy,&foo,&xfree_dga_error_base)) {
|
|
XF86DGAQueryDirectVideo(dpy,XDefaultScreen(dpy),&flags);
|
|
if (flags & XF86DGADirectPresent) {
|
|
XF86DGAQueryVersion(dpy,&ma,&mi);
|
|
@@ -1348,6 +1351,19 @@ xfree_xinerama_init(Display *dpy)
|
|
#endif
|
|
}
|
|
|
|
+#ifdef HAVE_LIBXXF86DGA
|
|
+static int (*orig_xfree_error_handler)(Display *, XErrorEvent *);
|
|
+
|
|
+static int xfree_dga_error_handler(Display *d, XErrorEvent *e)
|
|
+{
|
|
+ if (e->error_code == (xfree_dga_error_base + XF86DGANoDirectVideoMode)) {
|
|
+ have_dga = 0;
|
|
+ return 0;
|
|
+ }
|
|
+ return orig_xfree_error_handler(d, e);
|
|
+}
|
|
+#endif
|
|
+
|
|
void
|
|
grabber_init()
|
|
{
|
|
@@ -1358,8 +1374,11 @@ grabber_init()
|
|
#ifdef HAVE_LIBXXF86DGA
|
|
if (have_dga) {
|
|
int bar,fred;
|
|
+ orig_xfree_error_handler = XSetErrorHandler(xfree_dga_error_handler);
|
|
XF86DGAGetVideoLL(dpy,XDefaultScreen(dpy),(void*)&base,
|
|
&screen.bytesperline,&bar,&fred);
|
|
+ XSync(dpy, 0);
|
|
+ XSetErrorHandler(orig_xfree_error_handler);
|
|
}
|
|
#endif
|
|
if (!do_overlay) {
|