aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Changelog1
-rw-r--r--doc/indevs.texi8
-rw-r--r--libavdevice/gdigrab.c15
3 files changed, 21 insertions, 3 deletions
diff --git a/Changelog b/Changelog
index 67ef92eb02..a1b09027bb 100644
--- a/Changelog
+++ b/Changelog
@@ -9,6 +9,7 @@ version <next>:
- aap filter
- demuxing, decoding, filtering, encoding, and muxing in the
ffmpeg CLI now all run in parallel
+- enable gdigrab device to grab a window using the hwnd=HANDLER syntax
version 6.1:
- libaribcaption decoder
diff --git a/doc/indevs.texi b/doc/indevs.texi
index 863536a34d..a0c684f545 100644
--- a/doc/indevs.texi
+++ b/doc/indevs.texi
@@ -722,7 +722,7 @@ Win32 GDI-based screen capture device.
This device allows you to capture a region of the display on Windows.
-There are two options for the input filename:
+Amongst options for the imput filenames are such elements as:
@example
desktop
@end example
@@ -730,9 +730,13 @@ or
@example
title=@var{window_title}
@end example
+or
+@example
+hwnd=@var{window_hwnd}
+@end example
The first option will capture the entire desktop, or a fixed region of the
-desktop. The second option will instead capture the contents of a single
+desktop. The second and third options will instead capture the contents of a single
window, regardless of its position on the screen.
For example, to grab the entire desktop using @command{ffmpeg}:
diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c
index c069232472..41ef370f2b 100644
--- a/libavdevice/gdigrab.c
+++ b/libavdevice/gdigrab.c
@@ -273,9 +273,22 @@ gdigrab_read_header(AVFormatContext *s1)
}
} else if (!strcmp(filename, "desktop")) {
hwnd = NULL;
+ } else if (!strncmp(filename, "hwnd=", 5)) {
+ name = filename + 5;
+ char *p;
+
+ hwnd = strtol(name, &p, 0);
+
+ if (p == NULL || p == name || p[0] == '\0')
+ {
+ av_log(s1, AV_LOG_ERROR,
+ "Invalid window handle '%s', must be a valid integer.\n", name);
+ ret = AVERROR(EINVAL);
+ goto error;
+ }
} else {
av_log(s1, AV_LOG_ERROR,
- "Please use \"desktop\" or \"title=<windowname>\" to specify your target.\n");
+ "Please use \"desktop\", \"title=<windowname>\" or \"hwnd=<hwnd>\" to specify your target.\n");
ret = AVERROR(EIO);
goto error;
}