Test video submission validation and retriever cleanup acknowledgements

This commit is contained in:
evgeny committed 2026-10-29 13:34:26 +01:00
1 parent 3df64b6744
commit 6eb865242b
2 files changed
+19 -2

No files matched your search

@@ -48,7 +48,7 @@ class MediaPlayer {
class MediaMetadataRetriever {
companion object {
const val METADATA_KEY_VIDEO_WIDTH = 18; const val METADATA_KEY_VIDEO_HEIGHT = 19; const val METADATA_KEY_VIDEO_ROTATION = 24
const val METADATA_KEY_DURATION = 9; const val OPTION_CLOSEST_SYNC = 2
const val METADATA_KEY_DURATION = 9; const val METADATA_KEY_MIMETYPE = 12; const val OPTION_CLOSEST_SYNC = 2
val created = mutableListOf<MediaMetadataRetriever>()
var nextFailures = emptySet<String>()
}
@@ -56,13 +56,14 @@ class MediaMetadataRetriever {
var released = false
var releases = 0
var width = "1280"; var height = "720"; var rotation = "90"
var duration = "10000"; var mime = "video/mp4"
var lastFrame: android.graphics.Bitmap? = null
var scaledReads = 0
init { created.add(this) }
fun setDataSource(path: String) { check("source" !in failures) { "Metadata source failed" } }
fun extractMetadata(key: Int): String? = when (key) {
METADATA_KEY_VIDEO_WIDTH -> width; METADATA_KEY_VIDEO_HEIGHT -> height; METADATA_KEY_VIDEO_ROTATION -> rotation
METADATA_KEY_DURATION -> "10000"; else -> null
METADATA_KEY_DURATION -> duration; METADATA_KEY_MIMETYPE -> mime; else -> null
}
fun getFrameAtTime(time: Long): android.graphics.Bitmap? {
check("frame" !in failures)
@@ -67,4 +67,20 @@ class VideoFileMetadataTest {
assertTrue(runCatching { VideoFileMetadata().use { it.preview("file.mp4") } }.isFailure)
assertTrue(MediaMetadataRetriever.created.single().released)
}
@Test fun submissionRejectsInvalidDurationAndMimeBeforeTransferringTheSource() {
for ((duration, mime) in listOf("0" to "video/mp4", "86400001" to "video/mp4", "1000" to "video/webm")) {
val reader = VideoFileMetadata()
val sdk = MediaMetadataRetriever.created.last().also { it.duration = duration; it.mime = mime }
assertTrue(runCatching { reader.use { it.submission("file.mp4") } }.isFailure)
assertTrue(sdk.released)
}
}
@Test fun submissionRetainsFailedReleaseAndPreservesCodedGeometry() {
val reader = VideoFileMetadata()
val sdk = MediaMetadataRetriever.created.single().also { it.failures = setOf("release") }
val metadata = reader.submission("file.mp4")
assertEquals(1280, metadata.width); assertEquals(720, metadata.height); assertEquals(10_000, metadata.durationMs)
assertTrue(runCatching { reader.close() }.isFailure); assertFalse(sdk.released)
sdk.failures = emptySet(); Looper.getMainLooper().advanceBy(250); assertTrue(sdk.released)
}
}