Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
gdigrab: grab right desktop size if DPI in use, based on patch from A…
…lexander Brotzge

Signed-off-by: Matt Oliver <protogonoi@gmail.com>
  • Loading branch information
Sibras committed Oct 31, 2015
1 parent 8d9f86b commit e82883a
Showing 1 changed file with 17 additions and 11 deletions.
28 changes: 17 additions & 11 deletions libavdevice/gdigrab.c
Expand Up @@ -235,6 +235,8 @@ gdigrab_read_header(AVFormatContext *s1)
AVStream *st = NULL;

int bpp;
int vertres;
int desktopvertres;
RECT virtual_rect;
RECT clip_rect;
BITMAP bmp;
Expand Down Expand Up @@ -263,13 +265,26 @@ 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 (hwnd) {
GetClientRect(hwnd, &virtual_rect);
} else {
/* desktop -- get the right height and width for scaling DPI */
vertres = GetDeviceCaps(source_hdc, VERTRES);
desktopvertres = GetDeviceCaps(source_hdc, DESKTOPVERTRES);
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)) * desktopvertres / vertres;
virtual_rect.bottom = (virtual_rect.top + GetSystemMetrics(SM_CYVIRTUALSCREEN)) * desktopvertres / vertres;
}

/* If no width or height set, use full screen/window area */
Expand Down Expand Up @@ -299,15 +314,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,
Expand Down

0 comments on commit e82883a

Please sign in to comment.