for Each
suspend fun forEach(context: Context, item: MediaRef, px: Int = Px, skipSame: Boolean = true, perSecond: Int = 1, onFrame: suspend (atMs: Long, frame: Bitmap) -> Boolean)(source)
Calls onFrame with each frame's time (0 for a photo) and pixels, at most px on their long side; stops if it returns false. skipSame: leave out frames that look like the last one (Smart Search, faces); the text pass wants them all, since a new caption over the same shot barely changes a small thumbnail, and it skips unchanged lines itself.