https://news.ycombinator.com/item?id=11103016 "At Jumpshare, we use FFmpeg for screen recording. We noticed that the previous version of FFmpeg was not DPI aware. So we went ahead and fixed it. Now FFmpeg will show correct mouse location in hdpi screens. Unfortunately, it seems FFmpeg 3.0 does not ship with this fix. Nevertheless, we're happy to contribute to this open source project." diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c index 4428a34..7db587c 100644 --- a/libavdevice/gdigrab.c +++ b/libavdevice/gdigrab.c @@ -446,6 +446,8 @@ static void paint_mouse_pointer(AVFormatContext *s1, struct gdigrab *gdigrab) POINT pos; RECT clip_rect = gdigrab->clip_rect; HWND hwnd = gdigrab->hwnd; + int vertres = GetDeviceCaps(gdigrab->source_hdc, VERTRES); + int desktopvertres = GetDeviceCaps(gdigrab->source_hdc, DESKTOPVERTRES); info.hbmMask = NULL; info.hbmColor = NULL; @@ -479,6 +481,10 @@ static void paint_mouse_pointer(AVFormatContext *s1, struct gdigrab *gdigrab) } } + //that would keep the correct location of mouse with hidpi screens + pos.x = pos.x * desktopvertres / vertres; + pos.y = pos.y * desktopvertres / vertres; + av_log(s1, AV_LOG_DEBUG, "Cursor pos (%li,%li) -> (%li,%li)\n", ci.ptScreenPos.x, ci.ptScreenPos.y, pos.x, pos.y);