Commit 2380857b by olly Committed by Oliver Woodman

Clip the skip length in DefaultExtractorInput.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117141509
parent a6ba84ad
......@@ -34,6 +34,7 @@ public class DefaultExtractorInputTest extends TestCase {
private static final String TEST_URI = "http://www.google.com";
private static final byte[] TEST_DATA = new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8};
private static final int LARGE_TEST_DATA_LENGTH = 8192;
public void testInitialPosition() throws IOException {
FakeDataSource testDataSource = buildDataSource();
......@@ -182,6 +183,16 @@ public class DefaultExtractorInputTest extends TestCase {
assertEquals(-1, expectedEndOfInput);
}
public void testLargeSkip() throws IOException, InterruptedException {
FakeDataSource testDataSource = buildLargeDataSource();
DefaultExtractorInput input = new DefaultExtractorInput(testDataSource, 0, C.LENGTH_UNBOUNDED);
// Check that skipping the entire data source succeeds.
int bytesToSkip = LARGE_TEST_DATA_LENGTH;
while (bytesToSkip > 0) {
bytesToSkip -= input.skip(bytesToSkip);
}
}
public void testSkipFullyOnce() throws IOException, InterruptedException {
// Skip TEST_DATA.
DefaultExtractorInput input = createDefaultExtractorInput();
......@@ -391,6 +402,14 @@ public class DefaultExtractorInputTest extends TestCase {
return testDataSource;
}
private static FakeDataSource buildLargeDataSource() throws IOException {
FakeDataSource.Builder builder = new FakeDataSource.Builder();
builder.appendReadData(new byte[LARGE_TEST_DATA_LENGTH]);
FakeDataSource testDataSource = builder.build();
testDataSource.open(new DataSpec(Uri.parse(TEST_URI)));
return testDataSource;
}
private static DefaultExtractorInput createDefaultExtractorInput() throws IOException {
FakeDataSource testDataSource = buildDataSource();
return new DefaultExtractorInput(testDataSource, 0, C.LENGTH_UNBOUNDED);
......
......@@ -80,7 +80,8 @@ public final class DefaultExtractorInput implements ExtractorInput {
public int skip(int length) throws IOException, InterruptedException {
int bytesSkipped = skipFromPeekBuffer(length);
if (bytesSkipped == 0) {
bytesSkipped = readFromDataSource(SCRATCH_SPACE, 0, length, 0, true);
bytesSkipped =
readFromDataSource(SCRATCH_SPACE, 0, Math.min(length, SCRATCH_SPACE.length), 0, true);
}
commitBytesRead(bytesSkipped);
return bytesSkipped;
......
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