On date Thursday 2023-12-14 11:32:44 +0100, Lena wrote: > Updated the wording of the documentation, and added error checking for strtol. > > I looked at how other parts of the codebase check for errors on strtol and > implemented it that way (iec61883, filter_units_bsf, etc). > > As for checking if the string value is larger/smaller than a long, i don't > think there's a need, as the documentation says it'd just get set to > LONG_MIN/LONG_MAX and fail anyway. > > > x11grab can capture windows by their ID, but gdigrab can only capture windows > by their names, internally calling FindWindowW to lookup its handle. > > This patch simply allows the user to specify a window handle directly. > Signed-off-by: Lena <l...@nihil.gay> > --- > doc/indevs.texi | 8 ++++++-- > libavdevice/gdigrab.c | 15 ++++++++++++++- > 2 files changed, 20 insertions(+), 3 deletions(-) > > 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..3153b6f711 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.\n"); Here you can provide some context: "Invalid window handle '%s', must be an valid integer.", name Looks good otherwise, thanks. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".