Clip the skip length in DefaultExtractorInput.
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=117141509
This commit is contained in:
parent
a6ba84ade6
commit
2380857bf2
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user