exit=0
sequential decode: 60 frames

from   seek(n)  branch   returned   reports frame  next read() is frame
1      0        keyframe true       0              1     <-- MISMATCH
50     0        keyframe true       0              1     <-- MISMATCH
50     5        keyframe true       5              6     <-- MISMATCH
50     29       keyframe true       29             30    <-- MISMATCH
50     30       keyframe true       30             31    <-- MISMATCH
50     35       keyframe true       35             36    <-- MISMATCH
50     45       keyframe true       45             46    <-- MISMATCH
40     35       keyframe true       35             36    <-- MISMATCH
1      5        scan     true       5              5     
1      29       scan     true       29             29    
1      45       scan     true       45             45    
35     31       keyframe true       31             32    <-- MISMATCH

Reproduce:
  ffmpeg -f rawvideo -pix_fmt yuv420p -s 64x64 -r 30 -i raw.yuv \
         -c:v libx264 -qp 0 -g 30 -keyint_min 30 -sc_threshold 0 numbered.mp4
  (raw.yuv: 60 frames, Y plane filled with 16 + 4*frame_index, U/V = 128)
  Keyframes land at 0 and 30.

  c++ -std=c++17 seek_probe.cpp -o seek_probe -I<repo>/include \
      $(pkg-config --cflags --libs opencv4 libavformat libavcodec libavutil libswscale) \
      -lframewright
  ./seek_probe numbered.mp4
