Commit 3886f5f0 by Dustin

Code Review Changes

(cherry picked from commit 135e103faa1bd829df0542a7062e67ebcfc8638f)
parent ed2c8148
...@@ -56,6 +56,8 @@ public final class MimeTypes { ...@@ -56,6 +56,8 @@ public final class MimeTypes {
public static final String VIDEO_OGG = BASE_TYPE_VIDEO + "/ogg"; public static final String VIDEO_OGG = BASE_TYPE_VIDEO + "/ogg";
public static final String VIDEO_AVI = BASE_TYPE_VIDEO + "/x-msvideo"; public static final String VIDEO_AVI = BASE_TYPE_VIDEO + "/x-msvideo";
public static final String VIDEO_MJPEG = BASE_TYPE_VIDEO + "/mjpeg"; public static final String VIDEO_MJPEG = BASE_TYPE_VIDEO + "/mjpeg";
public static final String VIDEO_MP42 = BASE_TYPE_VIDEO + "/mp42";
public static final String VIDEO_MP43 = BASE_TYPE_VIDEO + "/mp43";
public static final String VIDEO_UNKNOWN = BASE_TYPE_VIDEO + "/x-unknown"; public static final String VIDEO_UNKNOWN = BASE_TYPE_VIDEO + "/x-unknown";
// audio/ MIME types // audio/ MIME types
......
...@@ -19,11 +19,6 @@ android { ...@@ -19,11 +19,6 @@ android {
testCoverageEnabled = true testCoverageEnabled = true
} }
} }
testOptions{
unitTests.all {
jvmArgs '-noverify'
}
}
sourceSets.test.assets.srcDir '../../testdata/src/test/assets/' sourceSets.test.assets.srcDir '../../testdata/src/test/assets/'
} }
......
...@@ -26,13 +26,13 @@ import java.util.Arrays; ...@@ -26,13 +26,13 @@ import java.util.Arrays;
* Consists of Video chunk offsets and indexes for all streams * Consists of Video chunk offsets and indexes for all streams
*/ */
public class AviSeekMap implements SeekMap { public class AviSeekMap implements SeekMap {
final int videoId; private final int videoId;
final long videoUsPerChunk; private final long videoUsPerChunk;
final long duration; private final long duration;
//These are ints / 2 //These are ints / 2
final int[] keyFrameOffsetsDiv2; private final int[] keyFrameOffsetsDiv2;
//Seek chunk indexes by streamId //Seek chunk indexes by streamId
final int[][] seekIndexes; private final int[][] seekIndexes;
/** /**
* Usually the same as moviOffset, but sometimes 0 (muxer bug) * Usually the same as moviOffset, but sometimes 0 (muxer bug)
*/ */
...@@ -118,4 +118,19 @@ public class AviSeekMap implements SeekMap { ...@@ -118,4 +118,19 @@ public class AviSeekMap implements SeekMap {
} }
return indexes; return indexes;
} }
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
public long getKeyFrameOffsets(int streamId) {
return keyFrameOffsetsDiv2[streamId] * 2L;
}
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
public int[] getSeekIndexes(int streamId) {
return seekIndexes[streamId];
}
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
public long getVideoUsPerChunk() {
return videoUsPerChunk;
}
} }
...@@ -35,8 +35,8 @@ public class ChunkHandler { ...@@ -35,8 +35,8 @@ public class ChunkHandler {
*/ */
public static final int[] ALL_KEY_FRAMES = new int[0]; public static final int[] ALL_KEY_FRAMES = new int[0];
public static int TYPE_VIDEO = ('d' << 16) | ('c' << 24); public static final int TYPE_VIDEO = ('d' << 16) | ('c' << 24);
public static int TYPE_AUDIO = ('w' << 16) | ('b' << 24); public static final int TYPE_AUDIO = ('w' << 16) | ('b' << 24);
@NonNull @NonNull
ChunkClock clock; ChunkClock clock;
......
...@@ -37,7 +37,7 @@ public class ListBox extends Box { ...@@ -37,7 +37,7 @@ public class ListBox extends Box {
final List<Box> children; final List<Box> children;
ListBox(int size, int listType, List<Box> children) { public ListBox(int size, int listType, List<Box> children) {
super(LIST, size); super(LIST, size);
this.listType = listType; this.listType = listType;
this.children = children; this.children = children;
......
...@@ -32,12 +32,11 @@ public class VideoFormat { ...@@ -32,12 +32,11 @@ public class VideoFormat {
static { static {
//Although other types are technically supported, AVI is almost exclusively MP4V and MJPEG //Although other types are technically supported, AVI is almost exclusively MP4V and MJPEG
final String mimeType = MimeTypes.VIDEO_MP4V; final String mimeType = MimeTypes.VIDEO_MP4V;
//final String mimeType = MimeTypes.VIDEO_H263;
//I've never seen an Android devices that actually supports MP42 //I've never seen an Android devices that actually supports MP42
STREAM_MAP.put('M' | ('P' << 8) | ('4' << 16) | ('2' << 24), MimeTypes.BASE_TYPE_VIDEO+"/mp42"); STREAM_MAP.put('M' | ('P' << 8) | ('4' << 16) | ('2' << 24), MimeTypes.VIDEO_MP42);
//Samsung seems to support the rare MP43. //Samsung seems to support the rare MP43.
STREAM_MAP.put('M' | ('P' << 8) | ('4' << 16) | ('3' << 24), MimeTypes.BASE_TYPE_VIDEO+"/mp43"); STREAM_MAP.put('M' | ('P' << 8) | ('4' << 16) | ('3' << 24), MimeTypes.VIDEO_MP43);
STREAM_MAP.put('H' | ('2' << 8) | ('6' << 16) | ('4' << 24), MimeTypes.VIDEO_H264); STREAM_MAP.put('H' | ('2' << 8) | ('6' << 16) | ('4' << 24), MimeTypes.VIDEO_H264);
STREAM_MAP.put('a' | ('v' << 8) | ('c' << 16) | ('1' << 24), MimeTypes.VIDEO_H264); STREAM_MAP.put('a' | ('v' << 8) | ('c' << 16) | ('1' << 24), MimeTypes.VIDEO_H264);
STREAM_MAP.put('A' | ('V' << 8) | ('C' << 16) | ('1' << 24), MimeTypes.VIDEO_H264); STREAM_MAP.put('A' | ('V' << 8) | ('C' << 16) | ('1' << 24), MimeTypes.VIDEO_H264);
......
...@@ -176,10 +176,10 @@ public class AviExtractorTest { ...@@ -176,10 +176,10 @@ public class AviExtractorTest {
Assert.assertEquals(2 * framesPerKeyFrame, videoTrack.keyFrames[2]); Assert.assertEquals(2 * framesPerKeyFrame, videoTrack.keyFrames[2]);
Assert.assertEquals(2 * keyFrameRate * DataHelper.AUDIO_PER_VIDEO, Assert.assertEquals(2 * keyFrameRate * DataHelper.AUDIO_PER_VIDEO,
aviSeekMap.seekIndexes[DataHelper.AUDIO_ID][2]); aviSeekMap.getSeekIndexes(DataHelper.AUDIO_ID)[2]);
Assert.assertEquals(4L + 2 * keyFrameRate * DataHelper.VIDEO_SIZE + Assert.assertEquals(4L + 2 * keyFrameRate * DataHelper.VIDEO_SIZE +
2 * keyFrameRate * DataHelper.AUDIO_SIZE * DataHelper.AUDIO_PER_VIDEO, 2 * keyFrameRate * DataHelper.AUDIO_SIZE * DataHelper.AUDIO_PER_VIDEO,
aviSeekMap.keyFrameOffsetsDiv2[2] * 2L); aviSeekMap.getKeyFrameOffsets(2));
} }
...@@ -471,9 +471,10 @@ public class AviExtractorTest { ...@@ -471,9 +471,10 @@ public class AviExtractorTest {
final AviSeekMap aviSeekMap = DataHelper.getAviSeekMap(); final AviSeekMap aviSeekMap = DataHelper.getAviSeekMap();
aviExtractor.aviSeekMap = aviSeekMap; aviExtractor.aviSeekMap = aviSeekMap;
final ChunkHandler chunkHandler = aviExtractor.getVideoTrack(); final ChunkHandler chunkHandler = aviExtractor.getVideoTrack();
final long position = DataHelper.MOVI_OFFSET + aviSeekMap.keyFrameOffsetsDiv2[1] * 2L; final long position = DataHelper.MOVI_OFFSET + aviSeekMap.getKeyFrameOffsets(DataHelper.AUDIO_ID);
aviExtractor.seek(position, 0L); aviExtractor.seek(position, 0L);
Assert.assertEquals(aviSeekMap.seekIndexes[chunkHandler.getId()][1], chunkHandler.getClock().getIndex()); Assert.assertEquals(aviSeekMap.getSeekIndexes(chunkHandler.getId())[1],
chunkHandler.getClock().getIndex());
} }
@Test @Test
......
...@@ -24,14 +24,14 @@ public class AviSeekMapTest { ...@@ -24,14 +24,14 @@ public class AviSeekMapTest {
@Test @Test
public void getFrames_givenExactSeekPointMatch() { public void getFrames_givenExactSeekPointMatch() {
final AviSeekMap aviSeekMap = DataHelper.getAviSeekMap(); final AviSeekMap aviSeekMap = DataHelper.getAviSeekMap();
final long position = aviSeekMap.keyFrameOffsetsDiv2[1] * 2L + aviSeekMap.seekOffset; final long position = aviSeekMap.getKeyFrameOffsets(DataHelper.AUDIO_ID) + aviSeekMap.seekOffset;
final int secs = 4; final int secs = 4;
final ChunkHandler[] chunkHandlers = new ChunkHandler[]{DataHelper.getVideoChunkHandler(secs), final ChunkHandler[] chunkHandlers = new ChunkHandler[]{DataHelper.getVideoChunkHandler(secs),
DataHelper.getAudioChunkHandler(secs)}; DataHelper.getAudioChunkHandler(secs)};
int[] indexes = aviSeekMap.getIndexes(position); int[] indexes = aviSeekMap.getIndexes(position);
for (int i=0;i<chunkHandlers.length;i++) { for (int i=0;i<chunkHandlers.length;i++) {
Assert.assertEquals(aviSeekMap.seekIndexes[i][1], indexes[i]); Assert.assertEquals(aviSeekMap.getSeekIndexes(i)[1], indexes[i]);
} }
} }
...@@ -51,12 +51,13 @@ public class AviSeekMapTest { ...@@ -51,12 +51,13 @@ public class AviSeekMapTest {
public void getSeekPoints_givenNonKeyFrameUs() { public void getSeekPoints_givenNonKeyFrameUs() {
final AviSeekMap aviSeekMap = DataHelper.getAviSeekMap(); final AviSeekMap aviSeekMap = DataHelper.getAviSeekMap();
//Time before the 1st keyFrame //Time before the 1st keyFrame
final long us = aviSeekMap.seekIndexes[0][1] * aviSeekMap.videoUsPerChunk - 100L; final long videoUsPerChunk = aviSeekMap.getVideoUsPerChunk();
final long us = aviSeekMap.getSeekIndexes(DataHelper.VIDEO_ID)[1] * videoUsPerChunk - 100L;
final SeekMap.SeekPoints seekPoints = aviSeekMap.getSeekPoints(us); final SeekMap.SeekPoints seekPoints = aviSeekMap.getSeekPoints(us);
Assert.assertEquals(aviSeekMap.seekIndexes[0][0] * aviSeekMap.videoUsPerChunk, Assert.assertEquals(aviSeekMap.getSeekIndexes(DataHelper.VIDEO_ID)[0] * videoUsPerChunk,
seekPoints.first.timeUs); seekPoints.first.timeUs);
Assert.assertEquals(aviSeekMap.seekIndexes[0][1] * aviSeekMap.videoUsPerChunk, Assert.assertEquals(aviSeekMap.getSeekIndexes(DataHelper.VIDEO_ID)[1] * videoUsPerChunk,
seekPoints.second.timeUs); seekPoints.second.timeUs);
} }
......
...@@ -31,6 +31,7 @@ public class DataHelper { ...@@ -31,6 +31,7 @@ public class DataHelper {
static final int AUDIO_PER_VIDEO = 4; static final int AUDIO_PER_VIDEO = 4;
static final int VIDEO_SIZE = 4096; static final int VIDEO_SIZE = 4096;
static final int AUDIO_SIZE = 256; static final int AUDIO_SIZE = 256;
static final int VIDEO_ID = 0;
static final int AUDIO_ID = 1; static final int AUDIO_ID = 1;
static final int MOVI_OFFSET = 4096; static final int MOVI_OFFSET = 4096;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment