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
3562fe1c
authored
Nov 22, 2017
by
Oliver Woodman
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
SampleStream fixes
parent
75b90625
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
43 additions
and
17 deletions
library/core/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaPeriod.java
library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java
library/core/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaPeriod.java
View file @
3562fe1c
...
@@ -361,7 +361,7 @@ import java.util.Arrays;
...
@@ -361,7 +361,7 @@ import java.util.Arrays;
// SampleStream methods.
// SampleStream methods.
/* package */
boolean
isReady
(
int
track
)
{
/* package */
boolean
isReady
(
int
track
)
{
return
loadingFinished
||
(!
isPendingReset
()
&&
sampleQueues
[
track
].
hasNextSample
());
return
!
suppressRead
()
&&
(
loadingFinished
||
sampleQueues
[
track
].
hasNextSample
());
}
}
/* package */
void
maybeThrowError
()
throws
IOException
{
/* package */
void
maybeThrowError
()
throws
IOException
{
...
@@ -370,7 +370,7 @@ import java.util.Arrays;
...
@@ -370,7 +370,7 @@ import java.util.Arrays;
/* package */
int
readData
(
int
track
,
FormatHolder
formatHolder
,
DecoderInputBuffer
buffer
,
/* package */
int
readData
(
int
track
,
FormatHolder
formatHolder
,
DecoderInputBuffer
buffer
,
boolean
formatRequired
)
{
boolean
formatRequired
)
{
if
(
notifyDiscontinuity
||
isPendingReset
())
{
if
(
suppressRead
())
{
return
C
.
RESULT_NOTHING_READ
;
return
C
.
RESULT_NOTHING_READ
;
}
}
return
sampleQueues
[
track
].
read
(
formatHolder
,
buffer
,
formatRequired
,
loadingFinished
,
return
sampleQueues
[
track
].
read
(
formatHolder
,
buffer
,
formatRequired
,
loadingFinished
,
...
@@ -378,6 +378,9 @@ import java.util.Arrays;
...
@@ -378,6 +378,9 @@ import java.util.Arrays;
}
}
/* package */
int
skipData
(
int
track
,
long
positionUs
)
{
/* package */
int
skipData
(
int
track
,
long
positionUs
)
{
if
(
suppressRead
())
{
return
0
;
}
SampleQueue
sampleQueue
=
sampleQueues
[
track
];
SampleQueue
sampleQueue
=
sampleQueues
[
track
];
if
(
loadingFinished
&&
positionUs
>
sampleQueue
.
getLargestQueuedTimestampUs
())
{
if
(
loadingFinished
&&
positionUs
>
sampleQueue
.
getLargestQueuedTimestampUs
())
{
return
sampleQueue
.
advanceToEnd
();
return
sampleQueue
.
advanceToEnd
();
...
@@ -387,6 +390,10 @@ import java.util.Arrays;
...
@@ -387,6 +390,10 @@ import java.util.Arrays;
}
}
}
}
private
boolean
suppressRead
()
{
return
notifyDiscontinuity
||
isPendingReset
();
}
// Loader.Callback implementation.
// Loader.Callback implementation.
@Override
@Override
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java
View file @
3562fe1c
...
@@ -272,9 +272,11 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
...
@@ -272,9 +272,11 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
@Override
@Override
public
int
skipData
(
long
positionUs
)
{
public
int
skipData
(
long
positionUs
)
{
if
(
isPendingReset
())
{
return
0
;
}
int
skipCount
;
int
skipCount
;
if
(
loadingFinished
&&
positionUs
>
primarySampleQueue
.
getLargestQueuedTimestampUs
())
{
if
(
loadingFinished
&&
positionUs
>
primarySampleQueue
.
getLargestQueuedTimestampUs
())
{
primarySampleQueue
.
advanceToEnd
();
skipCount
=
primarySampleQueue
.
advanceToEnd
();
skipCount
=
primarySampleQueue
.
advanceToEnd
();
}
else
{
}
else
{
skipCount
=
primarySampleQueue
.
advanceTo
(
positionUs
,
true
,
true
);
skipCount
=
primarySampleQueue
.
advanceTo
(
positionUs
,
true
,
true
);
...
@@ -282,7 +284,9 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
...
@@ -282,7 +284,9 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
skipCount
=
0
;
skipCount
=
0
;
}
}
}
}
primarySampleQueue
.
discardToRead
();
if
(
skipCount
>
0
)
{
primarySampleQueue
.
discardToRead
();
}
return
skipCount
;
return
skipCount
;
}
}
...
...
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java
View file @
3562fe1c
...
@@ -385,7 +385,35 @@ import java.util.LinkedList;
...
@@ -385,7 +385,35 @@ import java.util.LinkedList;
if
(
isPendingReset
())
{
if
(
isPendingReset
())
{
return
C
.
RESULT_NOTHING_READ
;
return
C
.
RESULT_NOTHING_READ
;
}
}
int
result
=
sampleQueues
[
trackGroupIndex
].
read
(
formatHolder
,
buffer
,
requireFormat
,
loadingFinished
,
lastSeekPositionUs
);
if
(
result
==
C
.
RESULT_BUFFER_READ
)
{
discardToRead
();
}
return
result
;
}
public
int
skipData
(
int
trackGroupIndex
,
long
positionUs
)
{
if
(
isPendingReset
())
{
return
0
;
}
int
skipCount
;
SampleQueue
sampleQueue
=
sampleQueues
[
trackGroupIndex
];
if
(
loadingFinished
&&
positionUs
>
sampleQueue
.
getLargestQueuedTimestampUs
())
{
skipCount
=
sampleQueue
.
advanceToEnd
();
}
else
{
skipCount
=
sampleQueue
.
advanceTo
(
positionUs
,
true
,
true
);
if
(
skipCount
==
SampleQueue
.
ADVANCE_FAILED
)
{
skipCount
=
0
;
}
}
if
(
skipCount
>
0
)
{
discardToRead
();
}
return
skipCount
;
}
private
void
discardToRead
()
{
if
(!
mediaChunks
.
isEmpty
())
{
if
(!
mediaChunks
.
isEmpty
())
{
while
(
mediaChunks
.
size
()
>
1
&&
finishedReadingChunk
(
mediaChunks
.
getFirst
()))
{
while
(
mediaChunks
.
size
()
>
1
&&
finishedReadingChunk
(
mediaChunks
.
getFirst
()))
{
mediaChunks
.
removeFirst
();
mediaChunks
.
removeFirst
();
...
@@ -399,19 +427,6 @@ import java.util.LinkedList;
...
@@ -399,19 +427,6 @@ import java.util.LinkedList;
}
}
downstreamTrackFormat
=
trackFormat
;
downstreamTrackFormat
=
trackFormat
;
}
}
return
sampleQueues
[
trackGroupIndex
].
read
(
formatHolder
,
buffer
,
requireFormat
,
loadingFinished
,
lastSeekPositionUs
);
}
public
int
skipData
(
int
trackGroupIndex
,
long
positionUs
)
{
SampleQueue
sampleQueue
=
sampleQueues
[
trackGroupIndex
];
if
(
loadingFinished
&&
positionUs
>
sampleQueue
.
getLargestQueuedTimestampUs
())
{
return
sampleQueue
.
advanceToEnd
();
}
else
{
int
skipCount
=
sampleQueue
.
advanceTo
(
positionUs
,
true
,
true
);
return
skipCount
==
SampleQueue
.
ADVANCE_FAILED
?
0
:
skipCount
;
}
}
}
private
boolean
finishedReadingChunk
(
HlsMediaChunk
chunk
)
{
private
boolean
finishedReadingChunk
(
HlsMediaChunk
chunk
)
{
...
...
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