gdigrab: grab right desktop size if DPI in use, based on patch from Alexander Brotzge
Signed-off-by: Matt Oliver <protogonoi@gmail.com>
This commit is contained in:
parent
8d9f86bd37
commit
e82883aa88
@ -235,6 +235,8 @@ gdigrab_read_header(AVFormatContext *s1)
|
|||||||
AVStream *st = NULL;
|
AVStream *st = NULL;
|
||||||
|
|
||||||
int bpp;
|
int bpp;
|
||||||
|
int vertres;
|
||||||
|
int desktopvertres;
|
||||||
RECT virtual_rect;
|
RECT virtual_rect;
|
||||||
RECT clip_rect;
|
RECT clip_rect;
|
||||||
BITMAP bmp;
|
BITMAP bmp;
|
||||||
@ -263,13 +265,26 @@ gdigrab_read_header(AVFormatContext *s1)
|
|||||||
goto error;
|
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) {
|
if (hwnd) {
|
||||||
GetClientRect(hwnd, &virtual_rect);
|
GetClientRect(hwnd, &virtual_rect);
|
||||||
} else {
|
} 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.left = GetSystemMetrics(SM_XVIRTUALSCREEN);
|
||||||
virtual_rect.top = GetSystemMetrics(SM_YVIRTUALSCREEN);
|
virtual_rect.top = GetSystemMetrics(SM_YVIRTUALSCREEN);
|
||||||
virtual_rect.right = virtual_rect.left + GetSystemMetrics(SM_CXVIRTUALSCREEN);
|
virtual_rect.right = (virtual_rect.left + GetSystemMetrics(SM_CXVIRTUALSCREEN)) * desktopvertres / vertres;
|
||||||
virtual_rect.bottom = virtual_rect.top + GetSystemMetrics(SM_CYVIRTUALSCREEN);
|
virtual_rect.bottom = (virtual_rect.top + GetSystemMetrics(SM_CYVIRTUALSCREEN)) * desktopvertres / vertres;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If no width or height set, use full screen/window area */
|
/* If no width or height set, use full screen/window area */
|
||||||
@ -299,15 +314,6 @@ gdigrab_read_header(AVFormatContext *s1)
|
|||||||
goto error;
|
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) {
|
if (name) {
|
||||||
av_log(s1, AV_LOG_INFO,
|
av_log(s1, AV_LOG_INFO,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user