FFmpeg
Data Structures | Macros | Functions | Variables
xcbgrab.c File Reference
#include "config.h"
#include <stdlib.h>
#include <string.h>
#include <xcb/xcb.h>
#include "libavutil/internal.h"
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "libavutil/parseutils.h"
#include "libavutil/time.h"
#include "libavformat/avformat.h"
#include "libavformat/internal.h"

Go to the source code of this file.

Data Structures

struct  XCBGrabContext
 

Macros

#define FOLLOW_CENTER   -1
 
#define OFFSET(x)   offsetof(XCBGrabContext, x)
 
#define D   AV_OPT_FLAG_DECODING_PARAM
 
#define CROSSHAIR_CURSOR   34
 

Functions

static int xcbgrab_reposition (AVFormatContext *s, xcb_query_pointer_reply_t *p, xcb_get_geometry_reply_t *geo)
 
static void xcbgrab_image_reply_free (void *opaque, uint8_t *data)
 
static int xcbgrab_frame (AVFormatContext *s, AVPacket *pkt)
 
static int64_t wait_frame (AVFormatContext *s, AVPacket *pkt)
 
static void xcbgrab_update_region (AVFormatContext *s, int win_x, int win_y)
 
static int xcbgrab_read_packet (AVFormatContext *s, AVPacket *pkt)
 
static av_cold int xcbgrab_read_close (AVFormatContext *s)
 
static xcb_screen_t * get_screen (const xcb_setup_t *setup, int screen_num)
 
static int pixfmt_from_pixmap_format (AVFormatContext *s, int depth, int *pix_fmt, int *bpp)
 
static int create_stream (AVFormatContext *s)
 
static void draw_rectangle (AVFormatContext *s)
 
static void setup_window (AVFormatContext *s)
 
static xcb_rectangle_t rectangle_from_corners (xcb_point_t *corner_a, xcb_point_t *corner_b)
 
static int select_region (AVFormatContext *s)
 
static av_cold int xcbgrab_read_header (AVFormatContext *s)
 

Variables

static const AVOption options []
 
static const AVClass xcbgrab_class
 
const AVInputFormat ff_xcbgrab_demuxer
 

Macro Definition Documentation

◆ FOLLOW_CENTER

#define FOLLOW_CENTER   -1

Definition at line 81 of file xcbgrab.c.

◆ OFFSET

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

Definition at line 83 of file xcbgrab.c.

◆ D

Definition at line 84 of file xcbgrab.c.

◆ CROSSHAIR_CURSOR

#define CROSSHAIR_CURSOR   34

Definition at line 706 of file xcbgrab.c.

Function Documentation

◆ xcbgrab_reposition()

static int xcbgrab_reposition ( AVFormatContext s,
xcb_query_pointer_reply_t *  p,
xcb_get_geometry_reply_t *  geo 
)
static

Definition at line 111 of file xcbgrab.c.

Referenced by xcbgrab_read_packet().

◆ xcbgrab_image_reply_free()

static void xcbgrab_image_reply_free ( void *  opaque,
uint8_t *  data 
)
static

Definition at line 152 of file xcbgrab.c.

Referenced by xcbgrab_frame().

◆ xcbgrab_frame()

static int xcbgrab_frame ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 157 of file xcbgrab.c.

Referenced by xcbgrab_read_packet().

◆ wait_frame()

static int64_t wait_frame ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 201 of file xcbgrab.c.

Referenced by xcbgrab_read_packet().

◆ xcbgrab_update_region()

static void xcbgrab_update_region ( AVFormatContext s,
int  win_x,
int  win_y 
)
static

Definition at line 402 of file xcbgrab.c.

Referenced by xcbgrab_read_packet().

◆ xcbgrab_read_packet()

static int xcbgrab_read_packet ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 414 of file xcbgrab.c.

◆ xcbgrab_read_close()

static av_cold int xcbgrab_read_close ( AVFormatContext s)
static

Definition at line 487 of file xcbgrab.c.

Referenced by xcbgrab_read_header().

◆ get_screen()

static xcb_screen_t* get_screen ( const xcb_setup_t *  setup,
int  screen_num 
)
static

Definition at line 500 of file xcbgrab.c.

Referenced by xcbgrab_read_header().

◆ pixfmt_from_pixmap_format()

static int pixfmt_from_pixmap_format ( AVFormatContext s,
int  depth,
int pix_fmt,
int bpp 
)
static

Definition at line 517 of file xcbgrab.c.

Referenced by create_stream().

◆ create_stream()

static int create_stream ( AVFormatContext s)
static

Definition at line 572 of file xcbgrab.c.

Referenced by xcbgrab_read_header().

◆ draw_rectangle()

static void draw_rectangle ( AVFormatContext s)
static

Definition at line 647 of file xcbgrab.c.

Referenced by setup_window().

◆ setup_window()

static void setup_window ( AVFormatContext s)
static

Definition at line 670 of file xcbgrab.c.

Referenced by xcbgrab_read_header().

◆ rectangle_from_corners()

static xcb_rectangle_t rectangle_from_corners ( xcb_point_t *  corner_a,
xcb_point_t *  corner_b 
)
static

Definition at line 708 of file xcbgrab.c.

Referenced by select_region().

◆ select_region()

static int select_region ( AVFormatContext s)
static

Definition at line 719 of file xcbgrab.c.

Referenced by xcbgrab_read_header().

◆ xcbgrab_read_header()

static av_cold int xcbgrab_read_header ( AVFormatContext s)
static

Definition at line 817 of file xcbgrab.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{ "window_id", "Window to capture.", OFFSET(window_id), AV_OPT_TYPE_INT, { .i64 = XCB_NONE }, 0, UINT32_MAX, D },
{ "x", "Initial x coordinate.", OFFSET(x), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, D },
{ "y", "Initial y coordinate.", OFFSET(y), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, D },
{ "grab_x", "Initial x coordinate.", OFFSET(x), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, D },
{ "grab_y", "Initial y coordinate.", OFFSET(y), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, D },
{ "video_size", "A string describing frame size, such as 640x480 or hd720.", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL }, 0, 0, D },
{ "framerate", "", OFFSET(framerate), AV_OPT_TYPE_STRING, {.str = "ntsc" }, 0, 0, D },
{ "draw_mouse", "Draw the mouse pointer.", OFFSET(draw_mouse), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, D },
{ "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 }, FOLLOW_CENTER, INT_MAX, D, "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, D, "follow_mouse" },
{ "show_region", "Show the grabbing region.", OFFSET(show_region), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, D },
{ "region_border", "Set the region border thickness.", OFFSET(region_border), AV_OPT_TYPE_INT, { .i64 = 3 }, 1, 128, D },
{ "select_region", "Select the grabbing region graphically using the pointer.", OFFSET(select_region), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, D },
{ NULL },
}

Definition at line 85 of file xcbgrab.c.

◆ xcbgrab_class

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

Definition at line 103 of file xcbgrab.c.

◆ ff_xcbgrab_demuxer

const AVInputFormat ff_xcbgrab_demuxer
Initial value:
= {
.name = "x11grab",
.long_name = NULL_IF_CONFIG_SMALL("X11 screen capture, using XCB"),
.priv_data_size = sizeof(XCBGrabContext),
.priv_class = &xcbgrab_class,
}

Definition at line 903 of file xcbgrab.c.

FOLLOW_CENTER
#define FOLLOW_CENTER
Definition: xcbgrab.c:81
xcbgrab_class
static const AVClass xcbgrab_class
Definition: xcbgrab.c:103
read_close
static av_cold int read_close(AVFormatContext *ctx)
Definition: libcdio.c:143
read_packet
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
Definition: avio_read_callback.c:41
options
static const AVOption options[]
Definition: xcbgrab.c:85
width
#define width
framerate
float framerate
Definition: av1_levels.c:29
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
read_header
static int read_header(FFV1Context *f)
Definition: ffv1dec.c:550
NULL
#define NULL
Definition: coverity.c:32
AV_OPT_TYPE_IMAGE_SIZE
@ AV_OPT_TYPE_IMAGE_SIZE
offset must point to two consecutive integers
Definition: opt.h:235
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:237
AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT
@ AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT
Definition: log.h:41
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:106
AVFMT_NOFILE
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:469
D
#define D
Definition: xcbgrab.c:84
xcbgrab_read_close
static av_cold int xcbgrab_read_close(AVFormatContext *s)
Definition: xcbgrab.c:487
xcbgrab_read_packet
static int xcbgrab_read_packet(AVFormatContext *s, AVPacket *pkt)
Definition: xcbgrab.c:414
select_region
static int select_region(AVFormatContext *s)
Definition: xcbgrab.c:719
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:225
xcbgrab_read_header
static av_cold int xcbgrab_read_header(AVFormatContext *s)
Definition: xcbgrab.c:817
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:244
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:474
OFFSET
#define OFFSET(x)
Definition: xcbgrab.c:83
AV_OPT_TYPE_STRING
@ AV_OPT_TYPE_STRING
Definition: opt.h:229
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:234
XCBGrabContext
Definition: xcbgrab.c:50