On 10/28/15, Matt Oliver <protogo...@gmail.com> wrote: > On 5 October 2015 at 20:05, Matt Oliver <protogo...@gmail.com> wrote: > >> On 5 October 2015 at 19:29, Matt Oliver <protogo...@gmail.com> wrote: >> >>> On 30 September 2015 at 02:48, wm4 <nfx...@googlemail.com> wrote: >>> >>>> On Wed, 23 Sep 2015 12:04:43 -0600 >>>> Roger Pack <rogerdpa...@gmail.com> wrote: >>>> >>>> > From 6a972dda58bd5ab31524cd4e5326b4bcdeaeaa8c Mon Sep 17 00:00:00 2001 >>>> > From: rogerdpack <rogerpack2...@gmail.com> >>>> > Date: Wed, 23 Sep 2015 12:03:27 -0600 >>>> > Subject: [PATCH] gdigrab: grab right desktop size if DPI in use, based >>>> on >>>> > patch from Alexander Brotzge >>>> > >>>> > Signed-off-by: rogerdpack <rogerpack2...@gmail.com> >>>> > --- >>>> > libavdevice/gdigrab.c | 44 >>>> +++++++++++++++++++++++++++++--------------- >>>> > 1 file changed, 29 insertions(+), 15 deletions(-) >>>> > >>>> > diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c >>>> > index 9a185d4..b0faf45 100644 >>>> > --- a/libavdevice/gdigrab.c >>>> > +++ b/libavdevice/gdigrab.c >>>> > @@ -235,6 +235,9 @@ gdigrab_read_header(AVFormatContext *s1) >>>> > AVStream *st = NULL; >>>> > >>>> > int bpp; >>>> > + int vertres; >>>> > + int desktopvertres; >>>> > + float scale; >>>> > RECT virtual_rect; >>>> > RECT clip_rect; >>>> > BITMAP bmp; >>>> > @@ -263,14 +266,34 @@ gdigrab_read_header(AVFormatContext *s1) >>>> > goto error; >>>> > } >>>> > >>>> > - if (hwnd) { >>>> > - GetClientRect(hwnd, &virtual_rect); >>>> > - } else { >>>> > + /* This will get the device context for the selected window, or >>>> > if >>>> > + * none, the primary screen */ >>>> > + source_hdc = GetDC(hwnd); >>>> > + if (!source_hdc) { >>>> > + WIN32_API_ERROR("Couldn't get window device context"); >>>> > + ret = AVERROR(EIO); >>>> > + goto error; >>>> > + } >>>> > + bpp = GetDeviceCaps(source_hdc, BITSPIXEL); >>>> > + >>>> > + scale = 1.0; >>>> > + if (hwnd == NULL) { >>>> > + /* desktop -- get the right height and width for scaling DPI */ >>>> > + vertres = GetDeviceCaps(source_hdc, VERTRES); >>>> > + desktopvertres = GetDeviceCaps(source_hdc, DESKTOPVERTRES); >>>> > + scale = (float) desktopvertres / (float) vertres; >>>> > + } >>>> >>> >>> This seems a little redundant as scale is only being set when hwnd is >>> null however in the below lines its then being used in the opposite >>> conditional. Since this checks for hwnd essentially being non null then >>> scale is always going to be the inital value of 1. >>> >>> >>>> > + if (hwnd) { >>>> > + GetClientRect(hwnd, &virtual_rect); >>>> > + virtual_rect.right = virtual_rect.right * scale; >>>> > + virtual_rect.bottom = virtual_rect.bottom * scale; >>>> > + } else { >>>> > virtual_rect.left = GetSystemMetrics(SM_XVIRTUALSCREEN); >>>> > virtual_rect.top = GetSystemMetrics(SM_YVIRTUALSCREEN); >>>> > - virtual_rect.right = virtual_rect.left + >>>> GetSystemMetrics(SM_CXVIRTUALSCREEN); >>>> > - virtual_rect.bottom = virtual_rect.top + >>>> GetSystemMetrics(SM_CYVIRTUALSCREEN); >>>> > - } >>>> > + virtual_rect.right = (virtual_rect.left + >>>> GetSystemMetrics(SM_CXVIRTUALSCREEN)) * scale; >>>> > + virtual_rect.bottom = (virtual_rect.top + >>>> GetSystemMetrics(SM_CYVIRTUALSCREEN)) * scale; >>>> > + } >>>> >>> >>> This if else could be combined with the above if as scale is only a value >>> different to 1 in the 'else' case. Also as wm4 said it would probably be >>> better to keep the scale factors as ints. >>> >>> >>>> > >>>> > /* If no width or height set, use full screen/window area */ >>>> > if (!gdigrab->width || !gdigrab->height) { >>>> > @@ -299,15 +322,6 @@ gdigrab_read_header(AVFormatContext *s1) >>>> > goto error; >>>> > } >>>> > >>>> > - /* This will get the device context for the selected window, or >>>> > if >>>> > - * none, the primary screen */ >>>> > - source_hdc = GetDC(hwnd); >>>> > - if (!source_hdc) { >>>> > - WIN32_API_ERROR("Couldn't get window device context"); >>>> > - ret = AVERROR(EIO); >>>> > - goto error; >>>> > - } >>>> > - bpp = GetDeviceCaps(source_hdc, BITSPIXEL); >>>> > >>>> > if (name) { >>>> > av_log(s1, AV_LOG_INFO, >>> >>> >>> However I think the basic dpi scaling technique is correct. However I >>> would think it should be more along the lines of the modifications Ive >>> attached. >>> >> >> Woops, allow me to try that again without windows messing up the patches >> line endings. >> > > Does anyone have any issues with the updated patch or can it be pushed?
OK sorry for the delay finally got around to testing it and LGTM recommend commit (I'm a gdigrab maintainer). Cheers! -roger- _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel