FFmpeg
Data Structures | Macros | Functions | Variables
gdigrab.c File Reference
#include "config.h"
#include "libavformat/internal.h"
#include "libavutil/opt.h"
#include "libavutil/time.h"
#include <windows.h>

Go to the source code of this file.

Data Structures

struct  gdigrab
 GDI Device Demuxer context. More...
 

Macros

#define WIN32_API_ERROR(str)   av_log(s1, AV_LOG_ERROR, str " (error %li)\n", GetLastError())
 
#define REGION_WND_BORDER   3
 
#define CURSOR_ERROR(str)
 
#define OFFSET(x)   offsetof(struct gdigrab, x)
 
#define DEC   AV_OPT_FLAG_DECODING_PARAM
 

Functions

static LRESULT CALLBACK gdigrab_region_wnd_proc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
 Callback to handle Windows messages for the region outline window. More...
 
static int gdigrab_region_wnd_init (AVFormatContext *s1, struct gdigrab *gdigrab)
 Initialize the region outline window. More...
 
static void gdigrab_region_wnd_destroy (AVFormatContext *s1, struct gdigrab *gdigrab)
 Cleanup/free the region outline window. More...
 
static void gdigrab_region_wnd_update (AVFormatContext *s1, struct gdigrab *gdigrab)
 Process the Windows message queue. More...
 
static int gdigrab_read_header (AVFormatContext *s1)
 Initializes the gdi grab device demuxer (public device demuxer API). More...
 
static void paint_mouse_pointer (AVFormatContext *s1, struct gdigrab *gdigrab)
 Paints a mouse pointer in a Win32 image. More...
 
static int gdigrab_read_packet (AVFormatContext *s1, AVPacket *pkt)
 Grabs a frame from gdi (public device demuxer API). More...
 
static int gdigrab_read_close (AVFormatContext *s1)
 Closes gdi frame grabber (public device demuxer API). More...
 

Variables

static const AVOption options []
 
static const AVClass gdigrab_class
 
AVInputFormat ff_gdigrab_demuxer
 gdi grabber device demuxer declaration More...
 

Detailed Description

GDI frame device demuxer

Author
Calvin Walton calvi.nosp@m.n.wa.nosp@m.lton@.nosp@m.keps.nosp@m.tin.c.nosp@m.a
Christophe Gisquet word1.nosp@m..wor.nosp@m.d2@gm.nosp@m.ail..nosp@m.com

Definition in file gdigrab.c.

Macro Definition Documentation

◆ WIN32_API_ERROR

#define WIN32_API_ERROR (   str)    av_log(s1, AV_LOG_ERROR, str " (error %li)\n", GetLastError())

Definition at line 69 of file gdigrab.c.

◆ REGION_WND_BORDER

#define REGION_WND_BORDER   3

Definition at line 72 of file gdigrab.c.

◆ CURSOR_ERROR

#define CURSOR_ERROR (   str)
Value:
WIN32_API_ERROR(str); \
gdigrab->cursor_error_printed = 1; \
}

◆ OFFSET

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

Definition at line 633 of file gdigrab.c.

◆ DEC

#define DEC   AV_OPT_FLAG_DECODING_PARAM

Definition at line 634 of file gdigrab.c.

Function Documentation

◆ gdigrab_region_wnd_proc()

static LRESULT CALLBACK gdigrab_region_wnd_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wparam,
LPARAM  lparam 
)
static

Callback to handle Windows messages for the region outline window.

In particular, this handles painting the frame rectangle.

Parameters
hwndThe region outline window handle.
msgThe Windows message.
wparamFirst Windows message parameter.
lparamSecond Windows message parameter.
Returns
0 success, !0 failure

Definition at line 86 of file gdigrab.c.

Referenced by gdigrab_region_wnd_init().

◆ gdigrab_region_wnd_init()

static int gdigrab_region_wnd_init ( AVFormatContext s1,
struct gdigrab gdigrab 
)
static

Initialize the region outline window.

Parameters
s1The format context.
gdigrabgdigrab context.
Returns
0 success, !0 failure

Definition at line 121 of file gdigrab.c.

Referenced by gdigrab_read_header().

◆ gdigrab_region_wnd_destroy()

static void gdigrab_region_wnd_destroy ( AVFormatContext s1,
struct gdigrab gdigrab 
)
static

Cleanup/free the region outline window.

Parameters
s1The format context.
gdigrabgdigrab context.

Definition at line 187 of file gdigrab.c.

Referenced by gdigrab_read_close().

◆ gdigrab_region_wnd_update()

static void gdigrab_region_wnd_update ( AVFormatContext s1,
struct gdigrab gdigrab 
)
static

Process the Windows message queue.

This is important to prevent Windows from thinking the window has become unresponsive. As well, things like WM_PAINT (to actually draw the window contents) are handled from the message queue context.

Parameters
s1The format context.
gdigrabgdigrab context.

Definition at line 205 of file gdigrab.c.

Referenced by gdigrab_read_packet().

◆ gdigrab_read_header()

static int gdigrab_read_header ( AVFormatContext s1)
static

Initializes the gdi grab device demuxer (public device demuxer API).

Parameters
s1Context from avformat core
Returns
AVERROR_IO error, 0 success

Definition at line 222 of file gdigrab.c.

◆ paint_mouse_pointer()

static void paint_mouse_pointer ( AVFormatContext s1,
struct gdigrab gdigrab 
)
static

Paints a mouse pointer in a Win32 image.

Parameters
s1Context of the log information
sCurrent grad structure

Definition at line 442 of file gdigrab.c.

Referenced by gdigrab_read_packet().

◆ gdigrab_read_packet()

static int gdigrab_read_packet ( AVFormatContext s1,
AVPacket pkt 
)
static

Grabs a frame from gdi (public device demuxer API).

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

Definition at line 530 of file gdigrab.c.

◆ gdigrab_read_close()

static int gdigrab_read_close ( AVFormatContext s1)
static

Closes gdi frame grabber (public device demuxer API).

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

Definition at line 614 of file gdigrab.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{ "draw_mouse", "draw the mouse pointer", OFFSET(draw_mouse), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, DEC },
{ "show_region", "draw border around capture area", OFFSET(show_region), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, DEC },
{ "framerate", "set video frame rate", OFFSET(framerate), AV_OPT_TYPE_VIDEO_RATE, {.str = "ntsc"}, 0, INT_MAX, DEC },
{ "video_size", "set video frame size", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, 0, 0, DEC },
{ "offset_x", "capture area x offset", OFFSET(offset_x), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC },
{ "offset_y", "capture area y offset", OFFSET(offset_y), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC },
{ NULL },
}

Definition at line 635 of file gdigrab.c.

◆ gdigrab_class

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

Definition at line 645 of file gdigrab.c.

◆ ff_gdigrab_demuxer

AVInputFormat ff_gdigrab_demuxer
Initial value:
= {
.name = "gdigrab",
.long_name = NULL_IF_CONFIG_SMALL("GDI API Windows frame grabber"),
.priv_data_size = sizeof(struct gdigrab),
.read_packet = gdigrab_read_packet,
.read_close = gdigrab_read_close,
.flags = AVFMT_NOFILE,
.priv_class = &gdigrab_class,
}

gdi grabber device demuxer declaration

Definition at line 654 of file gdigrab.c.

gdigrab_read_packet
static int gdigrab_read_packet(AVFormatContext *s1, AVPacket *pkt)
Grabs a frame from gdi (public device demuxer API).
Definition: gdigrab.c:530
AV_OPT_TYPE_VIDEO_RATE
@ AV_OPT_TYPE_VIDEO_RATE
offset must point to AVRational
Definition: opt.h:236
OFFSET
#define OFFSET(x)
Definition: gdigrab.c:633
gdigrab::cursor_error_printed
int cursor_error_printed
Definition: gdigrab.c:66
DEC
#define DEC
Definition: gdigrab.c:634
framerate
int framerate
Definition: h264_levels.c:65
width
#define width
gdigrab_read_close
static int gdigrab_read_close(AVFormatContext *s1)
Closes gdi frame grabber (public device demuxer API).
Definition: gdigrab.c:614
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
read_header
static int read_header(FFV1Context *f)
Definition: ffv1dec.c:530
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:233
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT
@ AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT
Definition: log.h:42
gdigrab_read_header
static int gdigrab_read_header(AVFormatContext *s1)
Initializes the gdi grab device demuxer (public device demuxer API).
Definition: gdigrab.c:222
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:188
gdigrab_class
static const AVClass gdigrab_class
Definition: gdigrab.c:645
AVFMT_NOFILE
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:463
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:223
gdigrab
GDI Device Demuxer context.
Definition: gdigrab.c:40
options
static const AVOption options[]
Definition: gdigrab.c:635