seekToKeyframe
Moves the read cursor to a keyframe at or before target.
This call moves the cursor and nothing else. It does not flush queues and it does not flush decoders, because only the engine knows the generation those flushes belong to. A source that flushes on the caller's behalf makes the engine's seek ordering rules impossible to honour.
Return
where the cursor actually landed, when the source can tell. Null means unknown, and the engine then discovers it from the first decoded frame.
Moves the read cursor to the keyframe choice names around target, under the same rules as the call without a choice.
The engine resolves KeyframeChoice.InSeekDirection itself, so choice is one of Before, After and Closest. After and Closest fall back to the keyframe before target when none follows it.
The default serves every choice as Before, which is what a source that cannot look for a keyframe after the target can honestly do.