[FFmpeg-cvslog] x11grab: Check for XFixes availability at runtime

Luca Barbato git at videolan.org
Sun Oct 5 03:20:52 CEST 2014


ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Thu Sep 11 14:15:08 2014 +0200| [89fa2b5616274194d90bde0aeebf6adbd1245193] | committer: Luca Barbato

x11grab: Check for XFixes availability at runtime

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=89fa2b5616274194d90bde0aeebf6adbd1245193
---

 libavdevice/x11grab.c |   19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/libavdevice/x11grab.c b/libavdevice/x11grab.c
index 03fd567..ebc893b 100644
--- a/libavdevice/x11grab.c
+++ b/libavdevice/x11grab.c
@@ -168,6 +168,19 @@ static int setup_shm(AVFormatContext *s, Display *dpy, XImage **image)
     return 0;
 }
 
+static int setup_mouse(Display *dpy, int screen)
+{
+    int ev_ret, ev_err;
+
+    if (XFixesQueryExtension(dpy, &ev_ret, &ev_err)) {
+        Window root = RootWindow(dpy, screen);
+        XFixesSelectCursorInput(dpy, root, XFixesDisplayCursorNotifyMask);
+        return 0;
+    }
+
+    return AVERROR(ENOSYS);
+}
+
 static int pixfmt_from_image(AVFormatContext *s, XImage *image, int *pix_fmt)
 {
     av_log(s, AV_LOG_DEBUG,
@@ -318,6 +331,12 @@ static int x11grab_read_header(AVFormatContext *s1)
                           AllPlanes, ZPixmap);
     }
 
+    if (x11grab->draw_mouse && setup_mouse(dpy, screen) < 0) {
+        av_log(s1, AV_LOG_WARNING,
+               "XFixes not available, cannot draw the mouse cursor\n");
+        x11grab->draw_mouse = 0;
+    }
+
     x11grab->frame_size = x11grab->width * x11grab->height * image->bits_per_pixel / 8;
     x11grab->dpy        = dpy;
     x11grab->time_base  = (AVRational) { framerate.den, framerate.num };



More information about the ffmpeg-cvslog mailing list