FFmpeg
Loading...
Searching...
No Matches
gdigrab.c File Reference

GDI frame device demuxer. More...

#include "config.h"
#include "libavformat/demux.h"
#include "libavformat/internal.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "libavutil/time.h"
#include "libavutil/wchar_filename.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)
 
#define REGION_WND_BORDER   3
 
#define CURSOR_ERROR(str)
 
#define OFFSET(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.
 
static DWORD WINAPI gdigrab_region_wnd_task (LPVOID opaque)
 Run the region outline window loop.
 
static int gdigrab_region_wnd_init (struct gdigrab *gdigrab)
 Start the region outline window thread.
 
static void gdigrab_region_wnd_destroy (AVFormatContext *s1, struct gdigrab *gdigrab)
 Cleanup/free the region outline window.
 
static int gdigrab_read_header (AVFormatContext *s1)
 Initializes the gdi grab device demuxer (public device demuxer API).
 
static void paint_mouse_pointer (AVFormatContext *s1, struct gdigrab *gdigrab)
 Paints a mouse pointer in a Win32 image.
 
static int gdigrab_read_packet (AVFormatContext *s1, AVPacket *pkt)
 Grabs a frame from gdi (public device demuxer API).
 
static int gdigrab_read_close (AVFormatContext *s1)
 Closes gdi frame grabber (public device demuxer API).
 

Variables

static const AVOption options []
 
static const AVClass gdigrab_class
 
const FFInputFormat ff_gdigrab_demuxer
 gdi grabber device demuxer declaration
 

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)
Value:
av_log(s1, AV_LOG_ERROR, str " (error %li)\n", GetLastError())
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
#define av_log(a,...)

Definition at line 75 of file gdigrab.c.

Referenced by gdigrab_read_header(), and gdigrab_read_packet().

◆ REGION_WND_BORDER

#define REGION_WND_BORDER   3

Definition at line 78 of file gdigrab.c.

Referenced by gdigrab_region_wnd_task().

◆ CURSOR_ERROR

#define CURSOR_ERROR ( str)
Value:
WIN32_API_ERROR(str); \
}
GDI Device Demuxer context.
Definition gdigrab.c:43
int cursor_error_printed
Definition gdigrab.c:72

Referenced by paint_mouse_pointer().

◆ OFFSET

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

Definition at line 688 of file gdigrab.c.

◆ DEC

#define DEC   AV_OPT_FLAG_DECODING_PARAM

Definition at line 689 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 92 of file gdigrab.c.

Referenced by gdigrab_region_wnd_task().

◆ gdigrab_region_wnd_task()

static DWORD WINAPI gdigrab_region_wnd_task ( LPVOID opaque)
static

Run the region outline window loop.

Parameters
opaquegdigrab context.
Returns
0

Definition at line 126 of file gdigrab.c.

Referenced by gdigrab_region_wnd_init().

◆ gdigrab_region_wnd_init()

static int gdigrab_region_wnd_init ( struct gdigrab * gdigrab)
static

Start the region outline window thread.

Parameters
gdigrabgdigrab context.
Returns
0 success, !0 failure

Definition at line 207 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 242 of file gdigrab.c.

Referenced by gdigrab_read_close().

◆ 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 256 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 501 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 589 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 669 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 },
}
#define NULL
Definition coverity.c:32
#define OFFSET(x)
@ AV_OPT_TYPE_IMAGE_SIZE
Underlying C type is two consecutive integers.
Definition opt.h:302
@ AV_OPT_TYPE_VIDEO_RATE
Underlying C type is AVRational.
Definition opt.h:314
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258
#define DEC
Definition librsvgdec.c:149
float framerate
Definition av1_levels.c:29
#define width
Definition dsp.h:89

Definition at line 690 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,
}
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:241
#define LIBAVUTIL_VERSION_INT
Definition version.h:85
@ AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT
Definition log.h:42

Definition at line 700 of file gdigrab.c.

◆ ff_gdigrab_demuxer

const FFInputFormat ff_gdigrab_demuxer
Initial value:
= {
.p.name = "gdigrab",
.p.long_name = NULL_IF_CONFIG_SMALL("GDI API Windows frame grabber"),
.p.flags = AVFMT_NOFILE,
.p.priv_class = &gdigrab_class,
.priv_data_size = sizeof(struct gdigrab),
.read_packet = gdigrab_read_packet,
.read_close = gdigrab_read_close,
}
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition avformat.h:488
static int read_header(FFV1Context *f, RangeCoder *c)
Definition ffv1dec.c:578
static int gdigrab_read_close(AVFormatContext *s1)
Closes gdi frame grabber (public device demuxer API).
Definition gdigrab.c:669
static int gdigrab_read_packet(AVFormatContext *s1, AVPacket *pkt)
Grabs a frame from gdi (public device demuxer API).
Definition gdigrab.c:589
static int gdigrab_read_header(AVFormatContext *s1)
Initializes the gdi grab device demuxer (public device demuxer API).
Definition gdigrab.c:256
static const AVClass gdigrab_class
Definition gdigrab.c:700
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88

gdi grabber device demuxer declaration

Definition at line 709 of file gdigrab.c.