Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
6ea54253
authored
Jan 07, 2022
by
bachinger
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Make EventSampleStream honour FLAG_PEEK and FLAG_OMIT_SAMPLE_DATA
#minor-release PiperOrigin-RevId: 420289147
parent
e06b1550
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
64 additions
and
2 deletions
libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/EventSampleStream.java
libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/EventSampleStreamTest.java
libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/EventSampleStream.java
View file @
6ea54253
...
@@ -114,10 +114,15 @@ import java.io.IOException;
...
@@ -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
;
...
...
libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/EventSampleStreamTest.java
View file @
6ea54253
...
@@ -23,6 +23,7 @@ import androidx.media3.common.MimeTypes;
...
@@ -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 {
...
@@ -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 {
...
@@ -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
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment