diff --git a/lib/src/main/java/com/otaliastudios/transcoder/internal/thumbnails/DefaultThumbnailsEngine.kt b/lib/src/main/java/com/otaliastudios/transcoder/internal/thumbnails/DefaultThumbnailsEngine.kt index 123748ac..e2b63eb4 100644 --- a/lib/src/main/java/com/otaliastudios/transcoder/internal/thumbnails/DefaultThumbnailsEngine.kt +++ b/lib/src/main/java/com/otaliastudios/transcoder/internal/thumbnails/DefaultThumbnailsEngine.kt @@ -253,10 +253,28 @@ class DefaultThumbnailsEngine( positions.mapNotNull { (positionUs, request) -> val localizedUs = timer.localize(TrackType.VIDEO, index, positionUs) localizedUs?.let { Stub(request, positionUs, localizedUs) } - }.toMutableList().sortedBy { it.positionUs } +// }.toMutableList().sortedBy { it.positionUs } + }.toMutableList().reorder(dataSources[TrackType.VIDEO][0]) ) } + private fun List.reorder(source: DataSource): Collection { + val bucketListMap = LinkedHashMap>() + val finalList = ArrayList() + + forEach { + val nextKeyFrameIndex = source.search(it.positionUs) + val previousKeyFrameUs = source.keyFrameAt(nextKeyFrameIndex - 1) { source.lastKeyFrame() } + + val list = bucketListMap.getOrPut(previousKeyFrameUs) { ArrayList() } + list.add(it) + } + bucketListMap.forEach { + finalList.addAll(it.value.sortedBy { it.positionUs }) + } + return finalList + } + private val fetchPosition: () -> VideoSnapshots.Request? = { if (stubs.isEmpty()) null else VideoSnapshots.Request(stubs.first().localizedUs, stubs.first().request.threshold())