diff --git a/lib/src/main/java/com/otaliastudios/transcoder/internal/CustomSegments.kt b/lib/src/main/java/com/otaliastudios/transcoder/internal/CustomSegments.kt index c189b9e6..1c1d2435 100644 --- a/lib/src/main/java/com/otaliastudios/transcoder/internal/CustomSegments.kt +++ b/lib/src/main/java/com/otaliastudios/transcoder/internal/CustomSegments.kt @@ -52,6 +52,18 @@ class CustomSegments( } } + fun releaseSegment(id: String) { + val segment = segmentMap[id] + segment?.let { + it.release() + val source = sources[it.type][it.index] + if (tracks.active.has(it.type)) { + source.releaseTrack(it.type) + } + segmentMap[id] = null + } + } + fun release() = destroySegment(true) private fun tryCreateSegment(id: String): Segment? { 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 93544cad..74ff367c 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 @@ -233,6 +233,7 @@ class DefaultThumbnailsEngine( } override fun removeDataSource(dataSourceId: String) { + segments.releaseSegment(dataSourceId) dataSources.removeVideoDataSource(dataSourceId) tracks.updateTracksInfo() } @@ -285,6 +286,11 @@ class DefaultThumbnailsEngine( } override suspend fun removePosition(source: String, positionUs: Long) { + if (positionUs < 0) { + stubs.removeAll{ + it.request.sourceId() == source + } + } if (stubs.firstOrNull()?.request?.sourceId() == source && positionUs == stubs.firstOrNull()?.positionUs) { return } @@ -320,6 +326,7 @@ class DefaultThumbnailsEngine( } override fun cleanup() { + runCatching { stubs.clear() } runCatching { segments.release() } runCatching { dataSources.release() } }