Make EventSampleStream honour FLAG_PEEK and FLAG_OMIT_SAMPLE_DATA
#minor-release PiperOrigin-RevId: 420289147
This commit is contained in:
parent
e06b15506c
commit
6ea54253ac
@ -114,10 +114,15 @@ import java.io.IOException;
|
|||||||
// More events may be appended later.
|
// More events may be appended later.
|
||||||
return C.RESULT_NOTHING_READ;
|
return C.RESULT_NOTHING_READ;
|
||||||
}
|
}
|
||||||
int sampleIndex = currentIndex++;
|
int sampleIndex = currentIndex;
|
||||||
|
if ((readFlags & SampleStream.FLAG_PEEK) == 0) {
|
||||||
|
currentIndex++;
|
||||||
|
}
|
||||||
|
if ((readFlags & SampleStream.FLAG_OMIT_SAMPLE_DATA) == 0) {
|
||||||
byte[] serializedEvent = eventMessageEncoder.encode(eventStream.events[sampleIndex]);
|
byte[] serializedEvent = eventMessageEncoder.encode(eventStream.events[sampleIndex]);
|
||||||
buffer.ensureSpaceForWrite(serializedEvent.length);
|
buffer.ensureSpaceForWrite(serializedEvent.length);
|
||||||
buffer.data.put(serializedEvent);
|
buffer.data.put(serializedEvent);
|
||||||
|
}
|
||||||
buffer.timeUs = eventTimesUs[sampleIndex];
|
buffer.timeUs = eventTimesUs[sampleIndex];
|
||||||
buffer.setFlags(C.BUFFER_FLAG_KEY_FRAME);
|
buffer.setFlags(C.BUFFER_FLAG_KEY_FRAME);
|
||||||
return C.RESULT_BUFFER_READ;
|
return C.RESULT_BUFFER_READ;
|
||||||
|
@ -23,6 +23,7 @@ import androidx.media3.common.MimeTypes;
|
|||||||
import androidx.media3.decoder.DecoderInputBuffer;
|
import androidx.media3.decoder.DecoderInputBuffer;
|
||||||
import androidx.media3.exoplayer.FormatHolder;
|
import androidx.media3.exoplayer.FormatHolder;
|
||||||
import androidx.media3.exoplayer.dash.manifest.EventStream;
|
import androidx.media3.exoplayer.dash.manifest.EventStream;
|
||||||
|
import androidx.media3.exoplayer.source.SampleStream;
|
||||||
import androidx.media3.extractor.metadata.MetadataInputBuffer;
|
import androidx.media3.extractor.metadata.MetadataInputBuffer;
|
||||||
import androidx.media3.extractor.metadata.emsg.EventMessage;
|
import androidx.media3.extractor.metadata.emsg.EventMessage;
|
||||||
import androidx.media3.extractor.metadata.emsg.EventMessageEncoder;
|
import androidx.media3.extractor.metadata.emsg.EventMessageEncoder;
|
||||||
@ -132,6 +133,58 @@ public final class EventSampleStreamTest {
|
|||||||
assertThat(inputBuffer.data.array()).isEqualTo(getEncodedMessage(eventMessage));
|
assertThat(inputBuffer.data.array()).isEqualTo(getEncodedMessage(eventMessage));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void readData_peek_doesNotAdvanceSampleIndex() {
|
||||||
|
long presentationTimeUs = 1000000;
|
||||||
|
EventMessage eventMessage = newEventMessageWithId(1);
|
||||||
|
EventStream eventStream =
|
||||||
|
new EventStream(
|
||||||
|
SCHEME_ID,
|
||||||
|
VALUE,
|
||||||
|
TIME_SCALE,
|
||||||
|
new long[] {presentationTimeUs},
|
||||||
|
new EventMessage[] {eventMessage});
|
||||||
|
EventSampleStream sampleStream = new EventSampleStream(eventStream, FORMAT, false);
|
||||||
|
// first read - read format
|
||||||
|
readData(sampleStream);
|
||||||
|
|
||||||
|
// read the event with FLAG_PEEK
|
||||||
|
int result = readData(sampleStream, SampleStream.FLAG_PEEK);
|
||||||
|
assertThat(result).isEqualTo(C.RESULT_BUFFER_READ);
|
||||||
|
assertThat(inputBuffer.isKeyFrame()).isTrue();
|
||||||
|
assertThat(inputBuffer.data.array()).isEqualTo(getEncodedMessage(eventMessage));
|
||||||
|
// read again gives the same message again (there is only one msg)
|
||||||
|
result = readData(sampleStream);
|
||||||
|
assertThat(result).isEqualTo(C.RESULT_BUFFER_READ);
|
||||||
|
assertThat(inputBuffer.isKeyFrame()).isTrue();
|
||||||
|
assertThat(inputBuffer.data.array()).isEqualTo(getEncodedMessage(eventMessage));
|
||||||
|
// read again gives end of stream
|
||||||
|
result = readData(sampleStream);
|
||||||
|
assertThat(result).isEqualTo(C.RESULT_BUFFER_READ);
|
||||||
|
assertThat(inputBuffer.isEndOfStream()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void readData_omitSampleData_doesOmitSampleData() {
|
||||||
|
long presentationTimeUs = 1000000;
|
||||||
|
EventMessage eventMessage = newEventMessageWithId(1);
|
||||||
|
EventStream eventStream =
|
||||||
|
new EventStream(
|
||||||
|
SCHEME_ID,
|
||||||
|
VALUE,
|
||||||
|
TIME_SCALE,
|
||||||
|
new long[] {presentationTimeUs},
|
||||||
|
new EventMessage[] {eventMessage});
|
||||||
|
EventSampleStream sampleStream = new EventSampleStream(eventStream, FORMAT, false);
|
||||||
|
// first read - read format
|
||||||
|
readData(sampleStream);
|
||||||
|
|
||||||
|
// read the event with FLAG_OMIT_SAMPLE_DATA
|
||||||
|
int result = readData(sampleStream, SampleStream.FLAG_OMIT_SAMPLE_DATA);
|
||||||
|
assertThat(result).isEqualTo(C.RESULT_BUFFER_READ);
|
||||||
|
assertThat(inputBuffer.data).isNull();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests that {@link EventSampleStream#skipData(long)} will skip until the given position, and the
|
* Tests that {@link EventSampleStream#skipData(long)} will skip until the given position, and the
|
||||||
* next {@link EventSampleStream#readData(FormatHolder, DecoderInputBuffer, int)} call will return
|
* next {@link EventSampleStream#readData(FormatHolder, DecoderInputBuffer, int)} call will return
|
||||||
@ -390,8 +443,12 @@ public final class EventSampleStreamTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int readData(EventSampleStream sampleStream) {
|
private int readData(EventSampleStream sampleStream) {
|
||||||
|
return readData(sampleStream, /* readFlags= */ 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int readData(EventSampleStream sampleStream, @SampleStream.ReadFlags int readFlags) {
|
||||||
inputBuffer.clear();
|
inputBuffer.clear();
|
||||||
return sampleStream.readData(formatHolder, inputBuffer, /* readFlags= */ 0);
|
return sampleStream.readData(formatHolder, inputBuffer, readFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
private EventMessage newEventMessageWithId(int id) {
|
private EventMessage newEventMessageWithId(int id) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user