Test video submission validation and retriever cleanup acknowledgements
This commit is contained in:
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)
|
||||
|
||||
+16
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user