aboutsummaryrefslogtreecommitdiff
path: root/app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java')
-rw-r--r--app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java53
1 files changed, 53 insertions, 0 deletions
diff --git a/app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java b/app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java
new file mode 100644
index 0000000..00b19a5
--- /dev/null
+++ b/app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java
@@ -0,0 +1,53 @@
+package invalid.lena.scrcpy;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+public class VideoQueueTest {
+
+ private static VideoQueue.Frame frame(int id, boolean config, boolean keyframe) {
+ return new VideoQueue.Frame(new byte[]{(byte) id}, id, config, keyframe);
+ }
+
+ @Test
+ public void rejectsDeltaUntilKeyframe() {
+ VideoQueue queue = new VideoQueue(4, 4);
+ assertFalse(queue.offer(frame(1, false, false)));
+ assertTrue(queue.offer(frame(2, false, true)));
+ assertTrue(queue.offer(frame(3, false, false)));
+ }
+
+ @Test
+ public void overflowKeepsQueuedDecoderGeneration() {
+ VideoQueue queue = new VideoQueue(3, 3);
+ VideoQueue.Frame keyframe = frame(1, false, true);
+ VideoQueue.Frame delta = frame(2, false, false);
+ assertTrue(queue.offer(keyframe));
+ assertTrue(queue.offer(delta));
+ assertTrue(queue.offer(frame(3, false, false)));
+ assertFalse(queue.offer(frame(4, false, false)));
+ assertTrue(queue.needsKeyframe());
+ assertFalse(queue.offer(frame(5, false, false)));
+ assertSame(keyframe, queue.poll());
+ assertSame(delta, queue.poll());
+ }
+
+ @Test
+ public void newKeyframeReplacesOldMediaButKeepsConfig() {
+ VideoQueue queue = new VideoQueue(4, 4);
+ VideoQueue.Frame config = frame(1, true, false);
+ VideoQueue.Frame nextKeyframe = frame(4, false, true);
+ assertTrue(queue.offer(config));
+ assertTrue(queue.offer(frame(2, false, true)));
+ assertTrue(queue.offer(frame(3, false, false)));
+
+ assertTrue(queue.offer(nextKeyframe));
+
+ assertSame(config, queue.poll());
+ assertSame(nextKeyframe, queue.poll());
+ assertTrue(queue.isEmpty());
+ }
+}