[FFmpeg-trac] #10383(undetermined:new): GDI grab mouse vertical offset

FFmpeg trac at avcodec.org
Wed May 24 12:05:21 EEST 2023


#10383: GDI grab mouse vertical offset
-------------------------------------+-------------------------------------
             Reporter:  zboubida     |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:  git-
  undetermined                       |  master
             Keywords:  gdigrab,     |               Blocked By:
  mouse                              |
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 Summary of the bug:
 When using gdi grab on Windows, the mouse cursor Y position is wrong. It
 seems to be offset by the size of the window decoration. All the reports
 I've seen about gdi mouse issues are about high DPI: I think the problem
 here is different (I'm not using high DPI).

 In the following example, capturing calc.exe gives a video without the
 window header/title nor the application menu. That's about 50px height.
 The cursor is offset down by this amount.
 It's like the cursor coordinates are relative to the source window rather
 than the video output.

 Ffmpeg version:
 {{{
 ffmpeg version 2023-04-24-git-2aad9765ef-full_build-www.gyan.dev Copyright
 (c) 2000-2023 the FFmpeg developers
 built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
 configuration: --enable-gpl --enable-version3 --enable-static --disable-
 w32threads --disable-autodetect --enable-fontconfig --enable-iconv
 --enable-gnutls --enable-libxml2 --enab
 le-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib
 --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-
 avisynth --enable-libbluray --enabl
 e-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption
 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi
 --enable-librav1e --enable-libsvtav1 -
 -enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2
 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg
 --enable-libvpx --enable-mediafoundation
  --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi
 --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg
 --enable-amf --enable-cuda-llv
 m --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc
 --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc
 --enable-vulkan --enable-libplacebo --enable
 -opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-
 libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-
 libshine --enable-libtheora --enable-libt
 wolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc
 --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-
 libspeex --enable-libvorbis --enable-ladsp
 a --enable-libbs2b --enable-libflite --enable-libmysofa --enable-
 librubberband --enable-libsoxr --enable-chromaprint
 libavutil      58.  6.100 / 58.  6.100
 libavcodec     60. 10.100 / 60. 10.100
 libavformat    60.  5.100 / 60.  5.100
 libavdevice    60.  2.100 / 60.  2.100
 libavfilter     9.  5.100 /  9.  5.100
 libswscale      7.  2.100 /  7.  2.100
 libswresample   4. 11.100 /  4. 11.100
 libpostproc    57.  2.100 / 57.  2.100
 }}}

 How to reproduce:
 Capturing 3 different applications, as they exhibit different behaviours.
 - calc.exe (title bar + menu removed)
 - blender.exe (only title bar removed)
 - explorer.exe (nothing removed, the video size is the same as the input
 size)

 With calc, the removed header is about 50px and the mouse offset is about
 the same. With blender, only the title bar is removed (about 25px), which
 correspond to the mouse offset. With explorer, the window size and video
 size match, and the cursor is positioned correctly.

 {{{
 % ffmpeg -y -t 10 -f gdigrab -framerate 30 -i title="Calculator" -c:v
 libx264 -crf 22 calc.mkv

 [gdigrab @ 000001d2e68e2940] Found window Calculator, capturing 407x264x32
 at (0,0)
 Input #0, gdigrab, from 'title=Calculator':
   Duration: N/A, start: 1684916015.520521, bitrate: 103163 kb/s
   Stream #0:0: Video: bmp, bgra, 407x264, 103163 kb/s, 30 fps, 30 tbr,
 1000k tbn
 Stream mapping:
   Stream #0:0 -> #0:0 (bmp (native) -> h264 (libx264))
 Press [q] to stop, [?] for help
 [libx264 @ 000001d2e6ea7380] using cpu capabilities: MMX2 SSE2Fast SSSE3
 SSE4.2 AVX FMA3 BMI2 AVX2
 [libx264 @ 000001d2e6ea7380] profile High 4:4:4 Predictive, level 2.1,
 4:4:4, 8-bit
 [libx264 @ 000001d2e6ea7380] 264 - core 164 r3106 eaa68fa - H.264/MPEG-4
 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html -
 options: cabac=1 ref=3 deblock=1:0:0
  analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1
 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11
 fast_pskip=1 chroma_qp_offset=4 threads=8 loo
 kahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0
 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=
 2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40
 rc=crf mbtree=1 crf=22.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4
 ip_ratio=1.40 aq=1:1.00
 Output #0, matroska, to 'calc.mkv':
   Metadata:
     encoder         : Lavf60.5.100
   Stream #0:0: Video: h264 (H264 / 0x34363248), yuv444p(tv, progressive),
 407x264, q=2-31, 30 fps, 1k tbn
     Metadata:
       encoder         : Lavc60.10.100 libx264
     Side data:
       cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
 [out#0/matroska @ 000001d2e6912dc0] video:77kB audio:0kB subtitle:0kB
 other streams:0kB global headers:0kB muxing overhead: 3.277654%
 frame=  300 fps= 31 q=-1.0 Lsize=      80kB time=00:00:09.93 bitrate=
 65.9kbits/s speed=1.03x
 [libx264 @ 000001d2e6ea7380] frame I:2     Avg QP:19.09  size: 18290
 [libx264 @ 000001d2e6ea7380] frame P:100   Avg QP:21.27  size:   329
 [libx264 @ 000001d2e6ea7380] frame B:198   Avg QP:28.77  size:    46
 [libx264 @ 000001d2e6ea7380] consecutive B-frames:  6.7% 13.3%  8.0% 72.0%
 [libx264 @ 000001d2e6ea7380] mb I  I16..4: 21.9%  9.3% 68.8%
 [libx264 @ 000001d2e6ea7380] mb P  I16..4:  0.1%  0.0%  0.4%  P16..4:
 2.7%  0.5%  0.3%  0.0%  0.0%    skip:96.1%
 [libx264 @ 000001d2e6ea7380] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:
 1.8%  0.1%  0.0%  direct: 0.0%  skip:98.1%  L0:37.1% L1:62.2% BI: 0.7%
 [libx264 @ 000001d2e6ea7380] 8x8 transform intra:7.7% inter:48.1%
 [libx264 @ 000001d2e6ea7380] coded y,u,v intra: 48.3% 32.3% 28.5% inter:
 0.4% 0.3% 0.2%
 [libx264 @ 000001d2e6ea7380] i16 v,h,dc,p:  3% 94%  0%  3%
 [libx264 @ 000001d2e6ea7380] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 46% 47%  6%
 0%  0%  0%  0%  0%  1%
 [libx264 @ 000001d2e6ea7380] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 33% 50%  6%
 1%  2%  2%  2%  2%  2%
 [libx264 @ 000001d2e6ea7380] Weighted P-Frames: Y:0.0% UV:0.0%
 [libx264 @ 000001d2e6ea7380] ref P L0: 49.9%  5.7% 29.3% 15.0%
 [libx264 @ 000001d2e6ea7380] ref B L0: 80.5% 16.8%  2.7%
 [libx264 @ 000001d2e6ea7380] ref B L1: 93.5%  6.5%
 [libx264 @ 000001d2e6ea7380] kb/s:62.60
 }}}

 {{{
 % ffmpeg -y -t 10 -f gdigrab -framerate 30 -i title='Blender' -c:v libx264
 -crf 22 blender.mkv

 [gdigrab @ 0000024eb8312940] Found window Blender, capturing 1468x808x32
 at (0,0)
 }}}

 {{{
 % ffmpeg -y -t 10 -f gdigrab -framerate 30 -i title='H:\share\test' -c:v
 libx264 -crf 22 explorer.mkv

 [gdigrab @ 000002117ed62940] Found window H:\share\test, capturing
 1231x772x32 at (0,0)
 }}}

 Side note: with explorer.exe, the window decoration is black instead of
 white, for some reason. But that's another issue.

 The attached files show both a screenshot of the application window and
 the result of gdigrab capture.
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/10383>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list