From d006f3f47398d1a2365505fcc72c18c3fa7862c2 Mon Sep 17 00:00:00 2001 From: Dustin Date: Mon, 31 Jan 2022 10:51:52 -0700 Subject: [PATCH] Beef up readIdx1 tests --- .../extractor/avi/AviExtractor.java | 5 +++ .../extractor/avi/AviExtractorTest.java | 31 +++++++++++++++++++ .../exoplayer2/extractor/avi/DataHelper.java | 9 +++++- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviExtractor.java index 33380cadd9..4163d1d2f8 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviExtractor.java @@ -629,6 +629,11 @@ public class AviExtractor implements Extractor { chunkHandler = aviTrack; } + @VisibleForTesting(otherwise = VisibleForTesting.NONE) + long getMoviOffset() { + return moviOffset; + } + private static void w(String message) { try { Log.w(TAG, message); diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/avi/AviExtractorTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/avi/AviExtractorTest.java index 0a2fac3603..a93354ee7f 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/avi/AviExtractorTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/avi/AviExtractorTest.java @@ -265,6 +265,29 @@ public class AviExtractorTest { Assert.assertSame(AviTrack.ALL_KEY_FRAMES, videoTrack.keyFrames); } + @Test + public void readIdx1_givenBufferToShort() throws IOException { + final AviExtractor aviExtractor = setupVideoAviExtractor(); + final FakeExtractorInput fakeExtractorInput = new FakeExtractorInput.Builder(). + setData(new byte[12]).build(); + + aviExtractor.readIdx1(fakeExtractorInput, 12); + final FakeExtractorOutput fakeExtractorOutput = (FakeExtractorOutput) aviExtractor.output; + Assert.assertTrue(fakeExtractorOutput.seekMap instanceof SeekMap.Unseekable); + } + + @Test + public void readIdx1_givenBadOffset() throws IOException { + final AviExtractor aviExtractor = setupVideoAviExtractor(); + final int secs = 4; + final ByteBuffer idx1 = DataHelper.getIndex(secs, 1, (int)aviExtractor.getMoviOffset() + 4); + + final FakeExtractorInput fakeExtractorInput = new FakeExtractorInput.Builder(). + setData(idx1.array()).build(); + aviExtractor.readIdx1(fakeExtractorInput, (int) fakeExtractorInput.getLength()); + Assert.assertEquals(0, aviExtractor.aviSeekMap.seekOffset); + } + @Test public void alignPositionHolder_givenOddPosition() { final FakeExtractorInput fakeExtractorInput = new FakeExtractorInput.Builder(). @@ -471,4 +494,12 @@ public class AviExtractorTest { aviExtractor.setAviTracks(new AviTrack[]{null, aviTrack}); Assert.assertSame(aviTrack, aviExtractor.getAviTrack(aviTrack.chunkId)); } + + @Test + public void release() { + //Shameless way to get 100% method coverage + final AviExtractor aviExtractor = new AviExtractor(); + aviExtractor.release(); + //Nothing to assert on a method that does nothing + } } \ No newline at end of file diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/avi/DataHelper.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/avi/DataHelper.java index c1da51da3b..268716a36b 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/avi/DataHelper.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/avi/DataHelper.java @@ -129,10 +129,17 @@ public class DataHelper { * @param keyFrameRate Key frame rate 1= every frame, 2=every other, ... */ public static ByteBuffer getIndex(final int secs, final int keyFrameRate) { + return getIndex(secs, keyFrameRate, 4); + } + /** + * + * @param secs Number of seconds + * @param keyFrameRate Key frame rate 1= every frame, 2=every other, ... + */ + public static ByteBuffer getIndex(final int secs, final int keyFrameRate, int offset) { final int videoFrames = secs * FPS; final int videoChunkId = AviTrack.getVideoChunkId(0); final int audioChunkId = AviTrack.getAudioChunkId(1); - int offset = 4; final ByteBuffer byteBuffer = AviExtractor.allocate((videoFrames + videoFrames*AUDIO_PER_VIDEO) * 16); for (int v=0;v