Blender Git Loki
Git Commits -> Revision 2522e0d
Revision 2522e0d by Richard Antalik (temp-vse-fast-scrubbing) February 26, 2021, 01:54 (GMT) |
VSE/FFmpeg: Scrubbing performance optimization Decode only I-frames when scrubbing This means, that scrubbing is as fast as possible, but not precise. With some files with extreme GOP lengths, this may be not optimal, as seeking would jump from one place to another. Another issue is, that when zoomed in to movie strip, fine scrubbing is not possible. Both issues can be resolved by decoding exact frame on second request. In first case this would cause UI to be laggy. In both cases this may also cause glitchy behavior. To eliminate glitchy behavior, there would have to be a buffer where previous frames are stored and determine if seek has to be precise or not. This analysis would have to be heuristic ultimately, and it could significantly increase code complexity. Also this analysis would be best done from VSE, because with imprecise seeking, cache needs to be disabled, because image does not correspond to what should be displayed. If analysis is done on VSE side, when switching to precise scrubbing, cache can remain active and scrubbing backwards, which is very likely can be aided by cache. FFmpeg can't seek backwards efficiently. Ultimately this patch assumes that files are encoded with fairly short GOP sizes. If file is not optimal, proxy system is best solution for achieving best performance. |
Commit Details:
Full Hash: 2522e0d05da8466f5f1f80c6ffa69d598fdba1bc
Parent Commit: 29a28a8
Lines Changed: +364, -129
9 Modified Paths:
/source/blender/editors/space_sequencer/sequencer_buttons.c (+1, -1) (Diff)
/source/blender/editors/space_sequencer/sequencer_draw.c (+20, -3) (Diff)
/source/blender/editors/space_sequencer/sequencer_intern.h (+2, -1) (Diff)
/source/blender/editors/util/ed_util_imbuf.c (+1, -1) (Diff)
/source/blender/imbuf/IMB_imbuf.h (+9, -0) (Diff)
/source/blender/imbuf/intern/anim_movie.c (+304, -119) (Diff)
/source/blender/imbuf/intern/indexer.c (+4, -0) (Diff)
/source/blender/sequencer/intern/render.c (+22, -4) (Diff)
/source/blender/sequencer/SEQ_render.h (+1, -0) (Diff)
/source/blender/editors/space_sequencer/sequencer_draw.c (+20, -3) (Diff)
/source/blender/editors/space_sequencer/sequencer_intern.h (+2, -1) (Diff)
/source/blender/editors/util/ed_util_imbuf.c (+1, -1) (Diff)
/source/blender/imbuf/IMB_imbuf.h (+9, -0) (Diff)
/source/blender/imbuf/intern/anim_movie.c (+304, -119) (Diff)
/source/blender/imbuf/intern/indexer.c (+4, -0) (Diff)
/source/blender/sequencer/intern/render.c (+22, -4) (Diff)
/source/blender/sequencer/SEQ_render.h (+1, -0) (Diff)