Kotlin-esque way to iterate w/ a different first step

#1: I got lucky because it is closeable, so I can use use. (which should close even if not fully consumed)

val frames = sequence<Frame> {
    FFmpegFrameGrabber("input.mp4").use { grabber ->
        grabber.start()
        println("Total frames: ${grabber.lengthInVideoFrames}")
        while (true) {
            yield(grabber.grabImage() ?: break)
        }
    }
}
1 Like