x11grab.c File Reference

X11 frame device demuxer. More...

#include "config.h"
#include "libavformat/internal.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/parseutils.h"
#include "libavutil/time.h"
#include <X11/cursorfont.h>
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/Xlibint.h>
#include <X11/Xproto.h>
#include <X11/Xutil.h>
#include <sys/shm.h>
#include <X11/extensions/shape.h>
#include <X11/extensions/XShm.h>
#include <X11/extensions/Xfixes.h>
#include "avdevice.h"
Include dependency graph for x11grab.c:

Go to the source code of this file.

Data Structures

struct  x11grab
 X11 Device Demuxer context. More...
 

Macros

#define REGION_WIN_BORDER   3
 
#define OFFSET(x)   offsetof(struct x11grab, x)
 
#define DEC   AV_OPT_FLAG_DECODING_PARAM
 

Functions

static void x11grab_draw_region_win (struct x11grab *s)
 Draw grabbing region window. More...
 
static void x11grab_region_win_init (struct x11grab *s)
 Initialize grabbing region window. More...
 
static int x11grab_read_header (AVFormatContext *s1)
 Initialize the x11 grab device demuxer (public device demuxer API). More...
 
static void paint_mouse_pointer (XImage *image, struct x11grab *s)
 Paint a mouse pointer in an X11 image. More...
 
static int xget_zpixmap (Display *dpy, Drawable d, XImage *image, int x, int y)
 Read new data in the image structure. More...
 
static int x11grab_read_packet (AVFormatContext *s1, AVPacket *pkt)
 Grab a frame from x11 (public device demuxer API). More...
 
static int x11grab_read_close (AVFormatContext *s1)
 Close x11 frame grabber (public device demuxer API). More...
 

Variables

static const AVOption options []
 
static const AVClass x11_class
 
AVInputFormat ff_x11grab_demuxer
 x11 grabber device demuxer declaration More...
 

Detailed Description

X11 frame device demuxer.

Author
Clemens Fruhwirth cleme.nosp@m.ns@e.nosp@m.ndorp.nosp@m.hin..nosp@m.org
Edouard Gomez ed.go.nosp@m.mez@.nosp@m.free..nosp@m.fr

Definition in file x11grab.c.

Macro Definition Documentation

#define DEC   AV_OPT_FLAG_DECODING_PARAM

Definition at line 596 of file x11grab.c.

#define OFFSET (   x)    offsetof(struct x11grab, x)

Definition at line 595 of file x11grab.c.

#define REGION_WIN_BORDER   3

Definition at line 84 of file x11grab.c.

Referenced by x11grab_draw_region_win(), x11grab_read_packet(), and x11grab_region_win_init().

Function Documentation

static void paint_mouse_pointer ( XImage *  image,
struct x11grab s 
)
static

Paint a mouse pointer in an X11 image.

Parameters
imageimage to paint the mouse pointer to
scontext used to retrieve original grabbing rectangle coordinates

Definition at line 339 of file x11grab.c.

Referenced by x11grab_read_packet().

static void x11grab_draw_region_win ( struct x11grab s)
static

Draw grabbing region window.

Parameters
sx11grab context

Definition at line 91 of file x11grab.c.

Referenced by x11grab_read_packet(), and x11grab_region_win_init().

static int x11grab_read_close ( AVFormatContext s1)
static

Close x11 frame grabber (public device demuxer API).

Parameters
s1Context from avformat core
Returns
0 success, !0 failure

Definition at line 569 of file x11grab.c.

static int x11grab_read_header ( AVFormatContext s1)
static

Initialize the x11 grab device demuxer (public device demuxer API).

Parameters
s1Context from avformat core
Returns

Definition at line 156 of file x11grab.c.

static int x11grab_read_packet ( AVFormatContext s1,
AVPacket pkt 
)
static

Grab a frame from x11 (public device demuxer API).

Parameters
s1Context from avformat core
pktPacket holding the brabbed frame
Returns
frame size in bytes

Definition at line 459 of file x11grab.c.

static void x11grab_region_win_init ( struct x11grab s)
static

Initialize grabbing region window.

Parameters
sx11grab context

Definition at line 116 of file x11grab.c.

Referenced by x11grab_read_packet().

static int xget_zpixmap ( Display *  dpy,
Drawable  d,
XImage *  image,
int  x,
int  y 
)
static

Read new data in the image structure.

Parameters
dpyX11 display to grab from
d
imageImage where the grab will be put
xTop-Left grabbing rectangle horizontal coordinate
yTop-Left grabbing rectangle vertical coordinate
Returns
0 if error, !0 if successful

Definition at line 415 of file x11grab.c.

Referenced by x11grab_read_packet().

Variable Documentation

AVInputFormat ff_x11grab_demuxer
Initial value:
= {
.name = "x11grab",
.long_name = NULL_IF_CONFIG_SMALL("X11grab"),
.priv_data_size = sizeof(struct x11grab),
.read_packet = x11grab_read_packet,
.read_close = x11grab_read_close,
.flags = AVFMT_NOFILE,
.priv_class = &x11_class,
}
static int x11grab_read_header(AVFormatContext *s1)
Initialize the x11 grab device demuxer (public device demuxer API).
Definition: x11grab.c:156
static int x11grab_read_packet(AVFormatContext *s1, AVPacket *pkt)
Grab a frame from x11 (public device demuxer API).
Definition: x11grab.c:459
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static const AVClass x11_class
Definition: x11grab.c:611
static int x11grab_read_close(AVFormatContext *s1)
Close x11 frame grabber (public device demuxer API).
Definition: x11grab.c:569
static int read_header(FFV1Context *f)
Definition: ffv1dec.c:517
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:345
X11 Device Demuxer context.
Definition: x11grab.c:61

x11 grabber device demuxer declaration

Definition at line 619 of file x11grab.c.

const AVOption options[]
static
Initial value:
= {
{ "draw_mouse", "draw the mouse pointer", OFFSET(draw_mouse), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, DEC },
{ "follow_mouse", "move the grabbing region when the mouse pointer reaches within specified amount of pixels to the edge of region",
OFFSET(follow_mouse), AV_OPT_TYPE_INT, {.i64 = 0}, -1, INT_MAX, DEC, "follow_mouse" },
{ "centered", "keep the mouse pointer at the center of grabbing region when following",
0, AV_OPT_TYPE_CONST, {.i64 = -1}, INT_MIN, INT_MAX, DEC, "follow_mouse" },
{ "framerate", "set video frame rate", OFFSET(framerate), AV_OPT_TYPE_STRING, {.str = "ntsc"}, 0, 0, DEC },
{ "show_region", "show the grabbing region", OFFSET(show_region), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, DEC },
{ "video_size", "set video frame size", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str = "vga"}, 0, 0, DEC },
{ NULL },
}
int show_region
set by a private option.
Definition: x11grab.c:78
#define OFFSET(x)
Definition: x11grab.c:595
#define DEC
Definition: x11grab.c:596
int draw_mouse
Set by a private option.
Definition: x11grab.c:76
int follow_mouse
Set by a private option.
Definition: x11grab.c:77
NULL
Definition: eval.c:55
static int width
Definition: tests/utils.c:158
char * framerate
Set by a private option.
Definition: x11grab.c:79
offset must point to two consecutive integers
Definition: opt.h:230

Definition at line 597 of file x11grab.c.

const AVClass x11_class
static
Initial value:
= {
.class_name = "X11grab indev",
.item_name = av_default_item_name,
.option = options,
}
av_default_item_name
static const AVOption options[]
Definition: x11grab.c:597
LIBAVUTIL_VERSION_INT
Definition: eval.c:55

Definition at line 611 of file x11grab.c.