FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions | Variables
x11grab.c File Reference

X11 frame device demuxer. More...

#include "config.h"
#include <time.h>
#include <sys/shm.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 <X11/extensions/shape.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/XShm.h>
#include "avdevice.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/parseutils.h"
#include "libavformat/internal.h"

Go to the source code of this file.

Data Structures

struct  X11GrabContext
 X11 device demuxer context. More...
 

Macros

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

Functions

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

Variables

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

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 REGION_WIN_BORDER   3

Definition at line 91 of file x11grab.c.

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

#define OFFSET (   x)    offsetof(X11GrabContext, x)

Definition at line 644 of file x11grab.c.

#define DEC   AV_OPT_FLAG_DECODING_PARAM

Definition at line 645 of file x11grab.c.

Function Documentation

static void x11grab_draw_region_win ( X11GrabContext s)
static

Draw grabbing region window.

Parameters
sx11grab context

Definition at line 98 of file x11grab.c.

Referenced by x11grab_read_packet(), and x11grab_region_win_init().

static void x11grab_region_win_init ( X11GrabContext s)
static

Initialize grabbing region window.

Parameters
sx11grab context

Definition at line 119 of file x11grab.c.

Referenced by x11grab_read_packet().

static int setup_shm ( AVFormatContext s,
Display *  dpy,
XImage **  image 
)
static

Definition at line 146 of file x11grab.c.

Referenced by x11grab_read_header().

static int pixfmt_from_image ( AVFormatContext s,
XImage *  image,
int *  pix_fmt 
)
static

Definition at line 175 of file x11grab.c.

Referenced by x11grab_read_header().

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 245 of file x11grab.c.

static void paint_mouse_pointer ( XImage *  image,
AVFormatContext s1 
)
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 374 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 462 of file x11grab.c.

Referenced by x11grab_read_packet().

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 504 of file x11grab.c.

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 619 of file x11grab.c.

Variable Documentation

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_VIDEO_RATE, {.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 },
{ "use_shm", "use MIT-SHM extension", OFFSET(use_shm), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, DEC },
{ NULL },
}

Definition at line 646 of file x11grab.c.

const AVClass x11_class
static
Initial value:
= {
.class_name = "X11grab indev",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 661 of file x11grab.c.

AVInputFormat ff_x11grab_demuxer
Initial value:
= {
.name = "x11grab",
.long_name = NULL_IF_CONFIG_SMALL("X11grab"),
.priv_data_size = sizeof(X11GrabContext),
.priv_class = &x11_class,
}

x11 grabber device demuxer declaration

Definition at line 670 of file x11grab.c.