Consume Android batches with independent track completion
This commit is contained in:
1 parent
a538f99bf0
commit
c887780022
3 files changed
+139
-10
No files matched your search
@@ -0,0 +1,55 @@
|
||||
package com.utun.chat.data
|
||||
|
||||
import org.junit.Assert.*
|
||||
import org.junit.Test
|
||||
import java.nio.ByteBuffer
|
||||
|
||||
class StreamReadQueueTest {
|
||||
private fun record(kind: Int, pts: Long = 0, bytes: ByteArray = byteArrayOf()): ByteArray =
|
||||
ByteBuffer.allocate(28 + bytes.size).apply {
|
||||
put(0, kind.toByte()); putLong(8, pts); putInt(16, bytes.size); position(28); put(bytes)
|
||||
}.array()
|
||||
|
||||
@Test fun videoEndPassesBlockedAudioButPreservesVideoOrder() {
|
||||
val queue = StreamReadQueue()
|
||||
queue.add(record(2, 20) + record(1, 40) + record(7) + record(8) + record(5))
|
||||
assertNull(queue.take(video = false, audio = false))
|
||||
assertEquals(1, queue.take(video = true, audio = false)!![0].toInt())
|
||||
assertEquals(7, queue.take(video = false, audio = false)!![0].toInt())
|
||||
assertNull(queue.take(video = false, audio = false))
|
||||
assertEquals(2, queue.take(video = false, audio = true)!![0].toInt())
|
||||
assertEquals(8, queue.take(video = false, audio = false)!![0].toInt())
|
||||
assertEquals(5, queue.take(video = false, audio = false)!![0].toInt())
|
||||
assertEquals(0, queue.size)
|
||||
}
|
||||
|
||||
@Test fun audioEndPassesBlockedVideo() {
|
||||
val queue = StreamReadQueue()
|
||||
queue.add(record(1) + record(2) + record(8) + record(7) + record(5))
|
||||
assertEquals(2, queue.take(video = false, audio = true)!![0].toInt())
|
||||
assertEquals(8, queue.take(video = false, audio = false)!![0].toInt())
|
||||
assertNull(queue.take(video = false, audio = false))
|
||||
assertEquals(1, queue.take(video = true, audio = false)!![0].toInt())
|
||||
assertEquals(7, queue.take(video = false, audio = false)!![0].toInt())
|
||||
assertEquals(5, queue.take(video = false, audio = false)!![0].toInt())
|
||||
}
|
||||
|
||||
@Test fun gapAndCloseImmediatelyCancelBlockedTracks() {
|
||||
for (kind in listOf(3, 6)) {
|
||||
val queue = StreamReadQueue()
|
||||
queue.add(record(1) + record(2))
|
||||
queue.add(record(kind))
|
||||
assertEquals(kind, queue.take(video = false, audio = false)!![0].toInt())
|
||||
assertEquals(0, queue.size)
|
||||
}
|
||||
}
|
||||
|
||||
@Test fun variablePayloadsKeepRecordBoundaries() {
|
||||
val queue = StreamReadQueue()
|
||||
val video = record(1, 42, byteArrayOf(1, 2, 3))
|
||||
val audio = record(2, 43, byteArrayOf(4))
|
||||
assertEquals(2, queue.add(video + audio))
|
||||
assertArrayEquals(audio, queue.take(video = false, audio = true))
|
||||
assertArrayEquals(video, queue.take(video = true, audio = false))
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user