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
fc95d07a
authored
Oct 15, 2019
by
ibaker
Committed by
Oliver Woodman
Oct 15, 2019
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Remove HlsChunkSource from null-checking blacklist
PiperOrigin-RevId: 274789337
parent
0ba91811
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
17 deletions
library/core/src/main/java/com/google/android/exoplayer2/source/chunk/DataChunk.java
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsChunkSource.java
library/core/src/main/java/com/google/android/exoplayer2/source/chunk/DataChunk.java
View file @
fc95d07a
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
chunk
;
package
com
.
google
.
android
.
exoplayer2
.
source
.
chunk
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.upstream.DataSource
;
import
com.google.android.exoplayer2.upstream.DataSource
;
...
@@ -44,8 +45,14 @@ public abstract class DataChunk extends Chunk {
...
@@ -44,8 +45,14 @@ public abstract class DataChunk extends Chunk {
* @param trackSelectionData See {@link #trackSelectionData}.
* @param trackSelectionData See {@link #trackSelectionData}.
* @param data An optional recycled array that can be used as a holder for the data.
* @param data An optional recycled array that can be used as a holder for the data.
*/
*/
public
DataChunk
(
DataSource
dataSource
,
DataSpec
dataSpec
,
int
type
,
Format
trackFormat
,
public
DataChunk
(
int
trackSelectionReason
,
Object
trackSelectionData
,
byte
[]
data
)
{
DataSource
dataSource
,
DataSpec
dataSpec
,
int
type
,
Format
trackFormat
,
int
trackSelectionReason
,
@Nullable
Object
trackSelectionData
,
byte
[]
data
)
{
super
(
dataSource
,
dataSpec
,
type
,
trackFormat
,
trackSelectionReason
,
trackSelectionData
,
super
(
dataSource
,
dataSpec
,
type
,
trackFormat
,
trackSelectionReason
,
trackSelectionData
,
C
.
TIME_UNSET
,
C
.
TIME_UNSET
);
C
.
TIME_UNSET
,
C
.
TIME_UNSET
);
this
.
data
=
data
;
this
.
data
=
data
;
...
...
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsChunkSource.java
View file @
fc95d07a
...
@@ -43,10 +43,10 @@ import java.io.IOException;
...
@@ -43,10 +43,10 @@ import java.io.IOException;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.LinkedHashMap
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
org.checkerframework.checker.nullness.qual.MonotonicNonNull
;
/**
/** Source of Hls (possibly adaptive) chunks. */
* Source of Hls (possibly adaptive) chunks.
*/
/* package */
class
HlsChunkSource
{
/* package */
class
HlsChunkSource
{
/**
/**
...
@@ -99,8 +99,8 @@ import java.util.List;
...
@@ -99,8 +99,8 @@ import java.util.List;
private
boolean
isTimestampMaster
;
private
boolean
isTimestampMaster
;
private
byte
[]
scratchSpace
;
private
byte
[]
scratchSpace
;
private
IOException
fatalError
;
@Nullable
private
IOException
fatalError
;
private
Uri
expectedPlaylistUrl
;
@Nullable
private
Uri
expectedPlaylistUrl
;
private
boolean
independentSegments
;
private
boolean
independentSegments
;
// Note: The track group in the selection is typically *not* equal to trackGroup. This is due to
// Note: The track group in the selection is typically *not* equal to trackGroup. This is due to
...
@@ -135,7 +135,7 @@ import java.util.List;
...
@@ -135,7 +135,7 @@ import java.util.List;
HlsDataSourceFactory
dataSourceFactory
,
HlsDataSourceFactory
dataSourceFactory
,
@Nullable
TransferListener
mediaTransferListener
,
@Nullable
TransferListener
mediaTransferListener
,
TimestampAdjusterProvider
timestampAdjusterProvider
,
TimestampAdjusterProvider
timestampAdjusterProvider
,
@Nullable
List
<
Format
>
muxedCaptionFormats
)
{
List
<
Format
>
muxedCaptionFormats
)
{
this
.
extractorFactory
=
extractorFactory
;
this
.
extractorFactory
=
extractorFactory
;
this
.
playlistTracker
=
playlistTracker
;
this
.
playlistTracker
=
playlistTracker
;
this
.
playlistUrls
=
playlistUrls
;
this
.
playlistUrls
=
playlistUrls
;
...
@@ -143,6 +143,7 @@ import java.util.List;
...
@@ -143,6 +143,7 @@ import java.util.List;
this
.
timestampAdjusterProvider
=
timestampAdjusterProvider
;
this
.
timestampAdjusterProvider
=
timestampAdjusterProvider
;
this
.
muxedCaptionFormats
=
muxedCaptionFormats
;
this
.
muxedCaptionFormats
=
muxedCaptionFormats
;
keyCache
=
new
FullSegmentEncryptionKeyCache
();
keyCache
=
new
FullSegmentEncryptionKeyCache
();
scratchSpace
=
Util
.
EMPTY_BYTE_ARRAY
;
liveEdgeInPeriodTimeUs
=
C
.
TIME_UNSET
;
liveEdgeInPeriodTimeUs
=
C
.
TIME_UNSET
;
mediaDataSource
=
dataSourceFactory
.
createDataSource
(
C
.
DATA_TYPE_MEDIA
);
mediaDataSource
=
dataSourceFactory
.
createDataSource
(
C
.
DATA_TYPE_MEDIA
);
if
(
mediaTransferListener
!=
null
)
{
if
(
mediaTransferListener
!=
null
)
{
...
@@ -270,6 +271,8 @@ import java.util.List;
...
@@ -270,6 +271,8 @@ import java.util.List;
}
}
HlsMediaPlaylist
mediaPlaylist
=
HlsMediaPlaylist
mediaPlaylist
=
playlistTracker
.
getPlaylistSnapshot
(
selectedPlaylistUrl
,
/* isForPlayback= */
true
);
playlistTracker
.
getPlaylistSnapshot
(
selectedPlaylistUrl
,
/* isForPlayback= */
true
);
// playlistTracker snapshot is valid (checked by if() above), so mediaPlaylist must be non-null.
Assertions
.
checkNotNull
(
mediaPlaylist
);
independentSegments
=
mediaPlaylist
.
hasIndependentSegments
;
independentSegments
=
mediaPlaylist
.
hasIndependentSegments
;
updateLiveEdgeTimeUs
(
mediaPlaylist
);
updateLiveEdgeTimeUs
(
mediaPlaylist
);
...
@@ -285,8 +288,11 @@ import java.util.List;
...
@@ -285,8 +288,11 @@ import java.util.List;
// behind the live window.
// behind the live window.
selectedTrackIndex
=
oldTrackIndex
;
selectedTrackIndex
=
oldTrackIndex
;
selectedPlaylistUrl
=
playlistUrls
[
selectedTrackIndex
];
selectedPlaylistUrl
=
playlistUrls
[
selectedTrackIndex
];
mediaPlaylist
=
mediaPlaylist
=
playlistTracker
.
getPlaylistSnapshot
(
selectedPlaylistUrl
,
/* isForPlayback= */
true
);
playlistTracker
.
getPlaylistSnapshot
(
selectedPlaylistUrl
,
/* isForPlayback= */
true
);
// playlistTracker snapshot is valid (checked by if() above), so mediaPlaylist must be
// non-null.
Assertions
.
checkNotNull
(
mediaPlaylist
);
startOfPlaylistInPeriodUs
=
startOfPlaylistInPeriodUs
=
mediaPlaylist
.
startTimeUs
-
playlistTracker
.
getInitialStartTimeUs
();
mediaPlaylist
.
startTimeUs
-
playlistTracker
.
getInitialStartTimeUs
();
chunkMediaSequence
=
previous
.
getNextChunkIndex
();
chunkMediaSequence
=
previous
.
getNextChunkIndex
();
...
@@ -361,7 +367,8 @@ import java.util.List;
...
@@ -361,7 +367,8 @@ import java.util.List;
if
(
chunk
instanceof
EncryptionKeyChunk
)
{
if
(
chunk
instanceof
EncryptionKeyChunk
)
{
EncryptionKeyChunk
encryptionKeyChunk
=
(
EncryptionKeyChunk
)
chunk
;
EncryptionKeyChunk
encryptionKeyChunk
=
(
EncryptionKeyChunk
)
chunk
;
scratchSpace
=
encryptionKeyChunk
.
getDataHolder
();
scratchSpace
=
encryptionKeyChunk
.
getDataHolder
();
keyCache
.
put
(
encryptionKeyChunk
.
dataSpec
.
uri
,
encryptionKeyChunk
.
getResult
());
keyCache
.
put
(
encryptionKeyChunk
.
dataSpec
.
uri
,
Assertions
.
checkNotNull
(
encryptionKeyChunk
.
getResult
()));
}
}
}
}
...
@@ -427,6 +434,8 @@ import java.util.List;
...
@@ -427,6 +434,8 @@ import java.util.List;
}
}
HlsMediaPlaylist
playlist
=
HlsMediaPlaylist
playlist
=
playlistTracker
.
getPlaylistSnapshot
(
playlistUrl
,
/* isForPlayback= */
false
);
playlistTracker
.
getPlaylistSnapshot
(
playlistUrl
,
/* isForPlayback= */
false
);
// Playlist snapshot is valid (checked by if() above) so playlist must be non-null.
Assertions
.
checkNotNull
(
playlist
);
long
startOfPlaylistInPeriodUs
=
long
startOfPlaylistInPeriodUs
=
playlist
.
startTimeUs
-
playlistTracker
.
getInitialStartTimeUs
();
playlist
.
startTimeUs
-
playlistTracker
.
getInitialStartTimeUs
();
boolean
switchingTrack
=
trackIndex
!=
oldTrackIndex
;
boolean
switchingTrack
=
trackIndex
!=
oldTrackIndex
;
...
@@ -504,11 +513,13 @@ import java.util.List;
...
@@ -504,11 +513,13 @@ import java.util.List;
if
(
keyUri
==
null
)
{
if
(
keyUri
==
null
)
{
return
null
;
return
null
;
}
}
if
(
keyCache
.
containsUri
(
keyUri
))
{
// The key is present in the key cache. We re-insert it to prevent it from being evicted by
byte
[]
encryptionKey
=
keyCache
.
remove
(
keyUri
);
if
(
encryptionKey
!=
null
)
{
// The key was present in the key cache. We re-insert it to prevent it from being evicted by
// the following key addition. Note that removal of the key is necessary to affect the
// the following key addition. Note that removal of the key is necessary to affect the
// eviction order.
// eviction order.
keyCache
.
put
(
keyUri
,
keyCache
.
remove
(
keyUri
)
);
keyCache
.
put
(
keyUri
,
encryptionKey
);
return
null
;
return
null
;
}
}
DataSpec
dataSpec
=
new
DataSpec
(
keyUri
,
0
,
C
.
LENGTH_UNSET
,
null
,
DataSpec
.
FLAG_ALLOW_GZIP
);
DataSpec
dataSpec
=
new
DataSpec
(
keyUri
,
0
,
C
.
LENGTH_UNSET
,
null
,
DataSpec
.
FLAG_ALLOW_GZIP
);
...
@@ -576,6 +587,7 @@ import java.util.List;
...
@@ -576,6 +587,7 @@ import java.util.List;
}
}
@Override
@Override
@Nullable
public
Object
getSelectionData
()
{
public
Object
getSelectionData
()
{
return
null
;
return
null
;
}
}
...
@@ -584,14 +596,14 @@ import java.util.List;
...
@@ -584,14 +596,14 @@ import java.util.List;
private
static
final
class
EncryptionKeyChunk
extends
DataChunk
{
private
static
final
class
EncryptionKeyChunk
extends
DataChunk
{
private
byte
[]
result
;
private
byte
@MonotonicNonNull
[]
result
;
public
EncryptionKeyChunk
(
public
EncryptionKeyChunk
(
DataSource
dataSource
,
DataSource
dataSource
,
DataSpec
dataSpec
,
DataSpec
dataSpec
,
Format
trackFormat
,
Format
trackFormat
,
int
trackSelectionReason
,
int
trackSelectionReason
,
Object
trackSelectionData
,
@Nullable
Object
trackSelectionData
,
byte
[]
scratchSpace
)
{
byte
[]
scratchSpace
)
{
super
(
dataSource
,
dataSpec
,
C
.
DATA_TYPE_DRM
,
trackFormat
,
trackSelectionReason
,
super
(
dataSource
,
dataSpec
,
C
.
DATA_TYPE_DRM
,
trackFormat
,
trackSelectionReason
,
trackSelectionData
,
scratchSpace
);
trackSelectionData
,
scratchSpace
);
...
@@ -602,6 +614,8 @@ import java.util.List;
...
@@ -602,6 +614,8 @@ import java.util.List;
result
=
Arrays
.
copyOf
(
data
,
limit
);
result
=
Arrays
.
copyOf
(
data
,
limit
);
}
}
/** Return the result of this chunk, or null if loading is not complete. */
@Nullable
public
byte
[]
getResult
()
{
public
byte
[]
getResult
()
{
return
result
;
return
result
;
}
}
...
@@ -670,7 +684,7 @@ import java.util.List;
...
@@ -670,7 +684,7 @@ import java.util.List;
/* loadFactor= */
1
,
/* loadFactor= */
1
,
/* accessOrder= */
false
)
{
/* accessOrder= */
false
)
{
@Override
@Override
protected
boolean
removeEldestEntry
(
Entry
<
Uri
,
byte
[]>
eldest
)
{
protected
boolean
removeEldestEntry
(
Map
.
Entry
<
Uri
,
byte
[]>
eldest
)
{
return
size
()
>
KEY_CACHE_SIZE
;
return
size
()
>
KEY_CACHE_SIZE
;
}
}
};
};
...
...
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