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
daf72f51
authored
Feb 15, 2022
by
olly
Committed by
Ian Baker
Feb 17, 2022
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Flatten TrackSelectionParameters
PiperOrigin-RevId: 428747243
parent
de3708ee
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
410 additions
and
251 deletions
RELEASENOTES.md
docs/track-selection.md
library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionOverride.java
library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.java
library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionParameters.java
library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionOverridesTest.java → library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionOverrideTest.java
library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionParametersTest.java
library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java
library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java
library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java
RELEASENOTES.md
View file @
daf72f51
...
@@ -56,6 +56,9 @@
...
@@ -56,6 +56,9 @@
values in
`Player.EventFlags`
.
values in
`Player.EventFlags`
.
*
Split
`AnalyticsCollector`
into an interface and default implementation
*
Split
`AnalyticsCollector`
into an interface and default implementation
to allow it to be stripped by R8 if an app doesn't need it.
to allow it to be stripped by R8 if an app doesn't need it.
*
Track selection
*
Flatten
`TrackSelectionOverrides`
class into
`TrackSelectionParameters`
,
and promote
`TrackSelectionOverride`
to a top level class.
*
Android 12 compatibility:
*
Android 12 compatibility:
*
Upgrade the Cast extension to depend on
*
Upgrade the Cast extension to depend on
`com.google.android.gms:play-services-cast-framework:20.1.0`
. Earlier
`com.google.android.gms:play-services-cast-framework:20.1.0`
. Earlier
...
...
docs/track-selection.md
View file @
daf72f51
...
@@ -124,13 +124,11 @@ track group to select this audio group and prevent any other audio track groups
...
@@ -124,13 +124,11 @@ track group to select this audio group and prevent any other audio track groups
from being selected:
from being selected:
~~~
~~~
TrackSelectionOverrides overrides =
new TrackSelectionOverrides.Builder()
.setOverrideForType(new TrackSelectionOverride(audioTrackGroup))
.build();
player.setTrackSelectionParameters(
player.setTrackSelectionParameters(
player.getTrackSelectionParameters()
player.getTrackSelectionParameters()
.buildUpon().setTrackSelectionOverrides(overrides).build());
.buildUpon()
.setOverrideForType(new TrackSelectionOverride(audioTrackGroup))
.build());
~~~
~~~
{: .language-java}
{: .language-java}
...
@@ -149,20 +147,17 @@ player.setTrackSelectionParameters(
...
@@ -149,20 +147,17 @@ player.setTrackSelectionParameters(
~~~
~~~
{: .language-java}
{: .language-java}
Alternatively, it's possible to prevent the selection of track
groups for the
Alternatively, it's possible to prevent the selection of track
s from a specific
current playlist item only by specifying empty overrides for these groups
:
`TrackGroup`
only by specifying an empty override for that group
:
~~~
~~~
TrackSelectionOverrides overrides =
new TrackSelectionOverrides.Builder()
.addOverride(
new TrackSelectionOverride(
disabledTrackGroup,
/* select no tracks for this group */ ImmutableList.of()))
.build();
player.setTrackSelectionParameters(
player.setTrackSelectionParameters(
player.getTrackSelectionParameters()
player.getTrackSelectionParameters()
.buildUpon().setTrackSelectionOverrides(overrides).build());
.buildUpon()
.addOverride(
new TrackSelectionOverride(
disabledTrackGroup, ImmutableList.of()))
.build());
~~~
~~~
{: .language-java}
{: .language-java}
...
...
library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionOverride.java
0 → 100644
View file @
daf72f51
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com
.
google
.
android
.
exoplayer2
.
trackselection
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
java
.
util
.
Collections
.
max
;
import
static
java
.
util
.
Collections
.
min
;
import
android.os.Bundle
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.Nullable
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.primitives.Ints
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.util.List
;
/**
* Forces the selection of {@link #trackIndices} for a {@link TrackGroup}.
*
* <p>If multiple tracks in {@link #trackGroup} are overridden, as many as possible will be selected
* depending on the player capabilities.
*
* <p>If {@link #trackIndices} is empty, no tracks from {@link #trackGroup} will be played. This is
* similar to {@link TrackSelectionParameters#disabledTrackTypes}, except it will only affect the
* playback of the associated {@link TrackGroup}. For example, if the only {@link
* C#TRACK_TYPE_VIDEO} {@link TrackGroup} is associated with no tracks, no video will play until the
* next video starts.
*/
public
final
class
TrackSelectionOverride
implements
Bundleable
{
/** The {@link TrackGroup} whose {@link #trackIndices} are forced to be selected. */
public
final
TrackGroup
trackGroup
;
/** The indices of tracks in a {@link TrackGroup} to be selected. */
public
final
ImmutableList
<
Integer
>
trackIndices
;
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@IntDef
({
FIELD_TRACK_GROUP
,
FIELD_TRACKS
,
})
private
@interface
FieldNumber
{}
private
static
final
int
FIELD_TRACK_GROUP
=
0
;
private
static
final
int
FIELD_TRACKS
=
1
;
/** Constructs an instance to force all tracks in {@code trackGroup} to be selected. */
public
TrackSelectionOverride
(
TrackGroup
trackGroup
)
{
this
.
trackGroup
=
trackGroup
;
ImmutableList
.
Builder
<
Integer
>
builder
=
new
ImmutableList
.
Builder
<>();
for
(
int
i
=
0
;
i
<
trackGroup
.
length
;
i
++)
{
builder
.
add
(
i
);
}
this
.
trackIndices
=
builder
.
build
();
}
/**
* Constructs an instance to force {@code trackIndices} in {@code trackGroup} to be selected.
*
* @param trackGroup The {@link TrackGroup} for which to override the track selection.
* @param trackIndices The indices of the tracks in the {@link TrackGroup} to select.
*/
public
TrackSelectionOverride
(
TrackGroup
trackGroup
,
List
<
Integer
>
trackIndices
)
{
if
(!
trackIndices
.
isEmpty
())
{
if
(
min
(
trackIndices
)
<
0
||
max
(
trackIndices
)
>=
trackGroup
.
length
)
{
throw
new
IndexOutOfBoundsException
();
}
}
this
.
trackGroup
=
trackGroup
;
this
.
trackIndices
=
ImmutableList
.
copyOf
(
trackIndices
);
}
/** Returns the {@link C.TrackType} of the overridden track group. */
public
@C
.
TrackType
int
getTrackType
()
{
return
MimeTypes
.
getTrackType
(
trackGroup
.
getFormat
(
0
).
sampleMimeType
);
}
@Override
public
boolean
equals
(
@Nullable
Object
obj
)
{
if
(
this
==
obj
)
{
return
true
;
}
if
(
obj
==
null
||
getClass
()
!=
obj
.
getClass
())
{
return
false
;
}
TrackSelectionOverride
that
=
(
TrackSelectionOverride
)
obj
;
return
trackGroup
.
equals
(
that
.
trackGroup
)
&&
trackIndices
.
equals
(
that
.
trackIndices
);
}
@Override
public
int
hashCode
()
{
return
trackGroup
.
hashCode
()
+
31
*
trackIndices
.
hashCode
();
}
// Bundleable implementation
@Override
public
Bundle
toBundle
()
{
Bundle
bundle
=
new
Bundle
();
bundle
.
putBundle
(
keyForField
(
FIELD_TRACK_GROUP
),
trackGroup
.
toBundle
());
bundle
.
putIntArray
(
keyForField
(
FIELD_TRACKS
),
Ints
.
toArray
(
trackIndices
));
return
bundle
;
}
/** Object that can restore {@code TrackSelectionOverride} from a {@link Bundle}. */
public
static
final
Creator
<
TrackSelectionOverride
>
CREATOR
=
bundle
->
{
@Nullable
Bundle
trackGroupBundle
=
bundle
.
getBundle
(
keyForField
(
FIELD_TRACK_GROUP
));
checkNotNull
(
trackGroupBundle
);
// Mandatory as there are no reasonable defaults.
TrackGroup
trackGroup
=
TrackGroup
.
CREATOR
.
fromBundle
(
trackGroupBundle
);
@Nullable
int
[]
tracks
=
bundle
.
getIntArray
(
keyForField
(
FIELD_TRACKS
));
if
(
tracks
==
null
)
{
return
new
TrackSelectionOverride
(
trackGroup
);
}
return
new
TrackSelectionOverride
(
trackGroup
,
Ints
.
asList
(
tracks
));
};
private
static
String
keyForField
(
@FieldNumber
int
field
)
{
return
Integer
.
toString
(
field
,
Character
.
MAX_RADIX
);
}
}
library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionOverrides.java
deleted
100644 → 0
View file @
de3708ee
This diff is collapsed.
Click to expand it.
library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionParameters.java
View file @
daf72f51
...
@@ -16,9 +16,9 @@
...
@@ -16,9 +16,9 @@
package
com
.
google
.
android
.
exoplayer2
.
trackselection
;
package
com
.
google
.
android
.
exoplayer2
.
trackselection
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
BundleableUtil
.
fromNullableBundle
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
BundleableUtil
.
fromBundleNullableList
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
BundleableUtil
.
toBundleArrayList
;
import
static
com
.
google
.
common
.
base
.
MoreObjects
.
firstNonNull
;
import
static
com
.
google
.
common
.
base
.
MoreObjects
.
firstNonNull
;
import
static
java
.
lang
.
annotation
.
ElementType
.
TYPE_USE
;
import
android.content.Context
;
import
android.content.Context
;
import
android.graphics.Point
;
import
android.graphics.Point
;
...
@@ -30,14 +30,18 @@ import androidx.annotation.Nullable;
...
@@ -30,14 +30,18 @@ import androidx.annotation.Nullable;
import
androidx.annotation.RequiresApi
;
import
androidx.annotation.RequiresApi
;
import
com.google.android.exoplayer2.Bundleable
;
import
com.google.android.exoplayer2.Bundleable
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.ImmutableMap
;
import
com.google.common.collect.ImmutableSet
;
import
com.google.common.collect.ImmutableSet
;
import
com.google.common.primitives.Ints
;
import
com.google.common.primitives.Ints
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Locale
;
import
java.util.Locale
;
import
java.util.Set
;
import
java.util.Set
;
import
org.checkerframework.checker.initialization.qual.UnknownInitialization
;
import
org.checkerframework.checker.initialization.qual.UnknownInitialization
;
...
@@ -96,7 +100,7 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -96,7 +100,7 @@ public class TrackSelectionParameters implements Bundleable {
// General
// General
private
boolean
forceLowestBitrate
;
private
boolean
forceLowestBitrate
;
private
boolean
forceHighestSupportedBitrate
;
private
boolean
forceHighestSupportedBitrate
;
private
TrackSelectionOverrides
trackSelectionO
verrides
;
private
HashMap
<
TrackGroup
,
TrackSelectionOverride
>
o
verrides
;
private
ImmutableSet
<
@C
.
TrackType
Integer
>
disabledTrackTypes
;
private
ImmutableSet
<
@C
.
TrackType
Integer
>
disabledTrackTypes
;
/**
/**
...
@@ -128,7 +132,7 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -128,7 +132,7 @@ public class TrackSelectionParameters implements Bundleable {
// General
// General
forceLowestBitrate
=
false
;
forceLowestBitrate
=
false
;
forceHighestSupportedBitrate
=
false
;
forceHighestSupportedBitrate
=
false
;
trackSelectionOverrides
=
TrackSelectionOverrides
.
EMPTY
;
overrides
=
new
HashMap
<>()
;
disabledTrackTypes
=
ImmutableSet
.
of
();
disabledTrackTypes
=
ImmutableSet
.
of
();
}
}
...
@@ -234,11 +238,16 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -234,11 +238,16 @@ public class TrackSelectionParameters implements Bundleable {
bundle
.
getBoolean
(
bundle
.
getBoolean
(
keyForField
(
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE
),
keyForField
(
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE
),
DEFAULT_WITHOUT_CONTEXT
.
forceHighestSupportedBitrate
);
DEFAULT_WITHOUT_CONTEXT
.
forceHighestSupportedBitrate
);
trackSelectionOverrides
=
overrides
=
new
HashMap
<>();
fromNullableBundle
(
List
<
TrackSelectionOverride
>
overrideList
=
TrackSelectionOverrides
.
CREATOR
,
fromBundleNullableList
(
bundle
.
getBundle
(
keyForField
(
FIELD_SELECTION_OVERRIDE_KEYS
)),
TrackSelectionOverride
.
CREATOR
,
TrackSelectionOverrides
.
EMPTY
);
bundle
.
getParcelableArrayList
(
keyForField
(
FIELD_SELECTION_OVERRIDES
)),
ImmutableList
.
of
());
for
(
int
i
=
0
;
i
<
overrideList
.
size
();
i
++)
{
TrackSelectionOverride
override
=
overrideList
.
get
(
i
);
overrides
.
put
(
override
.
trackGroup
,
override
);
}
disabledTrackTypes
=
disabledTrackTypes
=
ImmutableSet
.
copyOf
(
ImmutableSet
.
copyOf
(
Ints
.
asList
(
Ints
.
asList
(
...
@@ -252,7 +261,7 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -252,7 +261,7 @@ public class TrackSelectionParameters implements Bundleable {
"preferredAudioLanguages"
,
"preferredAudioLanguages"
,
"preferredAudioMimeTypes"
,
"preferredAudioMimeTypes"
,
"preferredTextLanguages"
,
"preferredTextLanguages"
,
"
trackSelectionO
verrides"
,
"
o
verrides"
,
"disabledTrackTypes"
,
"disabledTrackTypes"
,
})
})
private
void
init
(
@UnknownInitialization
Builder
this
,
TrackSelectionParameters
parameters
)
{
private
void
init
(
@UnknownInitialization
Builder
this
,
TrackSelectionParameters
parameters
)
{
...
@@ -283,8 +292,8 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -283,8 +292,8 @@ public class TrackSelectionParameters implements Bundleable {
// General
// General
forceLowestBitrate
=
parameters
.
forceLowestBitrate
;
forceLowestBitrate
=
parameters
.
forceLowestBitrate
;
forceHighestSupportedBitrate
=
parameters
.
forceHighestSupportedBitrate
;
forceHighestSupportedBitrate
=
parameters
.
forceHighestSupportedBitrate
;
trackSelectionOverrides
=
parameters
.
trackSelectionOverrides
;
disabledTrackTypes
=
parameters
.
disabledTrackTypes
;
disabledTrackTypes
=
parameters
.
disabledTrackTypes
;
overrides
=
new
HashMap
<>(
parameters
.
overrides
);
}
}
/** Overrides the value of the builder with the value of {@link TrackSelectionParameters}. */
/** Overrides the value of the builder with the value of {@link TrackSelectionParameters}. */
...
@@ -643,14 +652,42 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -643,14 +652,42 @@ public class TrackSelectionParameters implements Bundleable {
return
this
;
return
this
;
}
}
/** Adds an override for the provided {@link TrackGroup}. */
public
Builder
addOverride
(
TrackSelectionOverride
override
)
{
overrides
.
put
(
override
.
trackGroup
,
override
);
return
this
;
}
/** Removes the override associated with the provided {@link TrackGroup} if present. */
public
Builder
clearOverride
(
TrackGroup
trackGroup
)
{
overrides
.
remove
(
trackGroup
);
return
this
;
}
/** Set the override for the type of the provided {@link TrackGroup}. */
public
Builder
setOverrideForType
(
TrackSelectionOverride
override
)
{
clearOverridesOfType
(
override
.
getTrackType
());
overrides
.
put
(
override
.
trackGroup
,
override
);
return
this
;
}
/**
/**
* Sets the selection overrides.
* Remove any override associated with {@link TrackGroup TrackGroups} of type {@code trackType}.
*
* @param trackSelectionOverrides The track selection overrides.
* @return This builder.
*/
*/
public
Builder
setTrackSelectionOverrides
(
TrackSelectionOverrides
trackSelectionOverrides
)
{
public
Builder
clearOverridesOfType
(
@C
.
TrackType
int
trackType
)
{
this
.
trackSelectionOverrides
=
trackSelectionOverrides
;
Iterator
<
TrackSelectionOverride
>
it
=
overrides
.
values
().
iterator
();
while
(
it
.
hasNext
())
{
TrackSelectionOverride
override
=
it
.
next
();
if
(
override
.
getTrackType
()
==
trackType
)
{
it
.
remove
();
}
}
return
this
;
}
/** Removes all track overrides. */
public
Builder
clearOverrides
()
{
overrides
.
clear
();
return
this
;
return
this
;
}
}
...
@@ -855,8 +892,9 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -855,8 +892,9 @@ public class TrackSelectionParameters implements Bundleable {
*/
*/
public
final
boolean
forceHighestSupportedBitrate
;
public
final
boolean
forceHighestSupportedBitrate
;
/** Overrides to force tracks to be selected. */
/** Overrides to force selection of specific tracks. */
public
final
TrackSelectionOverrides
trackSelectionOverrides
;
public
final
ImmutableMap
<
TrackGroup
,
TrackSelectionOverride
>
overrides
;
/**
/**
* The track types that are disabled. No track of a disabled type will be selected, thus no track
* The track types that are disabled. No track of a disabled type will be selected, thus no track
* type contained in the set will be played. The default value is that no track type is disabled
* type contained in the set will be played. The default value is that no track type is disabled
...
@@ -892,7 +930,7 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -892,7 +930,7 @@ public class TrackSelectionParameters implements Bundleable {
// General
// General
this
.
forceLowestBitrate
=
builder
.
forceLowestBitrate
;
this
.
forceLowestBitrate
=
builder
.
forceLowestBitrate
;
this
.
forceHighestSupportedBitrate
=
builder
.
forceHighestSupportedBitrate
;
this
.
forceHighestSupportedBitrate
=
builder
.
forceHighestSupportedBitrate
;
this
.
trackSelectionOverrides
=
builder
.
trackSelectionOverrides
;
this
.
overrides
=
ImmutableMap
.
copyOf
(
builder
.
overrides
)
;
this
.
disabledTrackTypes
=
builder
.
disabledTrackTypes
;
this
.
disabledTrackTypes
=
builder
.
disabledTrackTypes
;
}
}
...
@@ -937,7 +975,7 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -937,7 +975,7 @@ public class TrackSelectionParameters implements Bundleable {
// General
// General
&&
forceLowestBitrate
==
other
.
forceLowestBitrate
&&
forceLowestBitrate
==
other
.
forceLowestBitrate
&&
forceHighestSupportedBitrate
==
other
.
forceHighestSupportedBitrate
&&
forceHighestSupportedBitrate
==
other
.
forceHighestSupportedBitrate
&&
trackSelectionOverrides
.
equals
(
other
.
trackSelectionO
verrides
)
&&
overrides
.
equals
(
other
.
o
verrides
)
&&
disabledTrackTypes
.
equals
(
other
.
disabledTrackTypes
);
&&
disabledTrackTypes
.
equals
(
other
.
disabledTrackTypes
);
}
}
...
@@ -971,7 +1009,7 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -971,7 +1009,7 @@ public class TrackSelectionParameters implements Bundleable {
// General
// General
result
=
31
*
result
+
(
forceLowestBitrate
?
1
:
0
);
result
=
31
*
result
+
(
forceLowestBitrate
?
1
:
0
);
result
=
31
*
result
+
(
forceHighestSupportedBitrate
?
1
:
0
);
result
=
31
*
result
+
(
forceHighestSupportedBitrate
?
1
:
0
);
result
=
31
*
result
+
trackSelectionO
verrides
.
hashCode
();
result
=
31
*
result
+
o
verrides
.
hashCode
();
result
=
31
*
result
+
disabledTrackTypes
.
hashCode
();
result
=
31
*
result
+
disabledTrackTypes
.
hashCode
();
return
result
;
return
result
;
}
}
...
@@ -980,7 +1018,6 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -980,7 +1018,6 @@ public class TrackSelectionParameters implements Bundleable {
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
(
TYPE_USE
)
@IntDef
({
@IntDef
({
FIELD_PREFERRED_AUDIO_LANGUAGES
,
FIELD_PREFERRED_AUDIO_LANGUAGES
,
FIELD_PREFERRED_AUDIO_ROLE_FLAGS
,
FIELD_PREFERRED_AUDIO_ROLE_FLAGS
,
...
@@ -1004,8 +1041,7 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -1004,8 +1041,7 @@ public class TrackSelectionParameters implements Bundleable {
FIELD_PREFERRED_AUDIO_MIME_TYPES
,
FIELD_PREFERRED_AUDIO_MIME_TYPES
,
FIELD_FORCE_LOWEST_BITRATE
,
FIELD_FORCE_LOWEST_BITRATE
,
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE
,
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE
,
FIELD_SELECTION_OVERRIDE_KEYS
,
FIELD_SELECTION_OVERRIDES
,
FIELD_SELECTION_OVERRIDE_VALUES
,
FIELD_DISABLED_TRACK_TYPE
,
FIELD_DISABLED_TRACK_TYPE
,
FIELD_PREFERRED_VIDEO_ROLE_FLAGS
FIELD_PREFERRED_VIDEO_ROLE_FLAGS
})
})
...
@@ -1033,10 +1069,9 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -1033,10 +1069,9 @@ public class TrackSelectionParameters implements Bundleable {
private
static
final
int
FIELD_PREFERRED_AUDIO_MIME_TYPES
=
20
;
private
static
final
int
FIELD_PREFERRED_AUDIO_MIME_TYPES
=
20
;
private
static
final
int
FIELD_FORCE_LOWEST_BITRATE
=
21
;
private
static
final
int
FIELD_FORCE_LOWEST_BITRATE
=
21
;
private
static
final
int
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE
=
22
;
private
static
final
int
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE
=
22
;
private
static
final
int
FIELD_SELECTION_OVERRIDE_KEYS
=
23
;
private
static
final
int
FIELD_SELECTION_OVERRIDES
=
23
;
private
static
final
int
FIELD_SELECTION_OVERRIDE_VALUES
=
24
;
private
static
final
int
FIELD_DISABLED_TRACK_TYPE
=
24
;
private
static
final
int
FIELD_DISABLED_TRACK_TYPE
=
25
;
private
static
final
int
FIELD_PREFERRED_VIDEO_ROLE_FLAGS
=
25
;
private
static
final
int
FIELD_PREFERRED_VIDEO_ROLE_FLAGS
=
26
;
@Override
@Override
public
Bundle
toBundle
()
{
public
Bundle
toBundle
()
{
...
@@ -1079,8 +1114,8 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -1079,8 +1114,8 @@ public class TrackSelectionParameters implements Bundleable {
bundle
.
putBoolean
(
keyForField
(
FIELD_FORCE_LOWEST_BITRATE
),
forceLowestBitrate
);
bundle
.
putBoolean
(
keyForField
(
FIELD_FORCE_LOWEST_BITRATE
),
forceLowestBitrate
);
bundle
.
putBoolean
(
bundle
.
putBoolean
(
keyForField
(
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE
),
forceHighestSupportedBitrate
);
keyForField
(
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE
),
forceHighestSupportedBitrate
);
bundle
.
put
Bundle
(
bundle
.
put
ParcelableArrayList
(
keyForField
(
FIELD_SELECTION_OVERRIDE
_KEYS
),
trackSelectionOverrides
.
toBundle
(
));
keyForField
(
FIELD_SELECTION_OVERRIDE
S
),
toBundleArrayList
(
overrides
.
values
()
));
bundle
.
putIntArray
(
keyForField
(
FIELD_DISABLED_TRACK_TYPE
),
Ints
.
toArray
(
disabledTrackTypes
));
bundle
.
putIntArray
(
keyForField
(
FIELD_DISABLED_TRACK_TYPE
),
Ints
.
toArray
(
disabledTrackTypes
));
return
bundle
;
return
bundle
;
...
...
library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionOverride
s
Test.java
→
library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionOverrideTest.java
View file @
daf72f51
...
@@ -19,29 +19,16 @@ import static com.google.common.truth.Truth.assertThat;
...
@@ -19,29 +19,16 @@ import static com.google.common.truth.Truth.assertThat;
import
static
org
.
junit
.
Assert
.
assertThrows
;
import
static
org
.
junit
.
Assert
.
assertThrows
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.ImmutableList
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
/** Unit tests for {@link TrackSelectionOverride
s
}. */
/** Unit tests for {@link TrackSelectionOverride}. */
@RunWith
(
AndroidJUnit4
.
class
)
@RunWith
(
AndroidJUnit4
.
class
)
public
final
class
TrackSelectionOverridesTest
{
public
final
class
TrackSelectionOverrideTest
{
public
static
final
TrackGroup
AAC_TRACK_GROUP
=
new
TrackGroup
(
new
Format
.
Builder
().
setSampleMimeType
(
MimeTypes
.
AUDIO_AAC
).
build
());
private
static
TrackGroup
newTrackGroupWithIds
(
int
...
ids
)
{
return
new
TrackGroup
(
Arrays
.
stream
(
ids
)
.
mapToObj
(
id
->
new
Format
.
Builder
().
setId
(
id
).
build
())
.
toArray
(
Format
[]::
new
));
}
@Test
@Test
public
void
newTrackSelectionOverride_withJustTrackGroup_selectsAllTracks
()
{
public
void
newTrackSelectionOverride_withJustTrackGroup_selectsAllTracks
()
{
...
@@ -77,100 +64,10 @@ public final class TrackSelectionOverridesTest {
...
@@ -77,100 +64,10 @@ public final class TrackSelectionOverridesTest {
()
->
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
1
,
2
),
ImmutableList
.
of
(
2
)));
()
->
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
1
,
2
),
ImmutableList
.
of
(
2
)));
}
}
@Test
private
static
TrackGroup
newTrackGroupWithIds
(
int
...
ids
)
{
public
void
roundTripViaBundle_withOverrides_yieldsEqualInstance
()
{
return
new
TrackGroup
(
TrackSelectionOverrides
trackSelectionOverrides
=
Arrays
.
stream
(
ids
)
new
TrackSelectionOverrides
.
Builder
()
.
mapToObj
(
id
->
new
Format
.
Builder
().
setId
(
id
).
build
())
.
setOverrideForType
(
.
toArray
(
Format
[]::
new
));
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
3
,
4
),
ImmutableList
.
of
(
1
)))
.
addOverride
(
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
5
,
6
)))
.
build
();
TrackSelectionOverrides
fromBundle
=
TrackSelectionOverrides
.
CREATOR
.
fromBundle
(
trackSelectionOverrides
.
toBundle
());
assertThat
(
fromBundle
).
isEqualTo
(
trackSelectionOverrides
);
assertThat
(
fromBundle
.
asList
()).
isEqualTo
(
trackSelectionOverrides
.
asList
());
}
@Test
public
void
builder_byDefault_isEmpty
()
{
TrackSelectionOverrides
trackSelectionOverrides
=
new
TrackSelectionOverrides
.
Builder
().
build
();
assertThat
(
trackSelectionOverrides
.
asList
()).
isEmpty
();
assertThat
(
trackSelectionOverrides
).
isEqualTo
(
TrackSelectionOverrides
.
EMPTY
);
}
@Test
public
void
addOverride_onDifferentGroups_addsOverride
()
{
TrackSelectionOverride
override1
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
1
));
TrackSelectionOverride
override2
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
2
));
TrackSelectionOverrides
trackSelectionOverrides
=
new
TrackSelectionOverrides
.
Builder
().
addOverride
(
override1
).
addOverride
(
override2
).
build
();
assertThat
(
trackSelectionOverrides
.
asList
()).
containsExactly
(
override1
,
override2
);
assertThat
(
trackSelectionOverrides
.
getOverride
(
override1
.
trackGroup
)).
isEqualTo
(
override1
);
assertThat
(
trackSelectionOverrides
.
getOverride
(
override2
.
trackGroup
)).
isEqualTo
(
override2
);
}
@Test
public
void
addOverride_onSameGroup_replacesOverride
()
{
TrackGroup
trackGroup
=
newTrackGroupWithIds
(
1
,
2
,
3
);
TrackSelectionOverride
override1
=
new
TrackSelectionOverride
(
trackGroup
,
/* trackIndices= */
ImmutableList
.
of
(
0
));
TrackSelectionOverride
override2
=
new
TrackSelectionOverride
(
trackGroup
,
/* trackIndices= */
ImmutableList
.
of
(
1
));
TrackSelectionOverrides
trackSelectionOverrides
=
new
TrackSelectionOverrides
.
Builder
().
addOverride
(
override1
).
addOverride
(
override2
).
build
();
assertThat
(
trackSelectionOverrides
.
asList
()).
containsExactly
(
override2
);
assertThat
(
trackSelectionOverrides
.
getOverride
(
override2
.
trackGroup
)).
isEqualTo
(
override2
);
}
@Test
public
void
setOverrideForType_onSameType_replacesOverride
()
{
TrackSelectionOverride
override1
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
1
));
TrackSelectionOverride
override2
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
2
));
TrackSelectionOverrides
trackSelectionOverrides
=
new
TrackSelectionOverrides
.
Builder
()
.
setOverrideForType
(
override1
)
.
setOverrideForType
(
override2
)
.
build
();
assertThat
(
trackSelectionOverrides
.
asList
()).
containsExactly
(
override2
);
assertThat
(
trackSelectionOverrides
.
getOverride
(
override2
.
trackGroup
)).
isEqualTo
(
override2
);
}
@Test
public
void
clearOverridesOfType_ofTypeAudio_removesAudioOverride
()
{
TrackSelectionOverride
override1
=
new
TrackSelectionOverride
(
AAC_TRACK_GROUP
);
TrackSelectionOverride
override2
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
1
));
TrackSelectionOverrides
trackSelectionOverrides
=
new
TrackSelectionOverrides
.
Builder
()
.
addOverride
(
override1
)
.
addOverride
(
override2
)
.
clearOverridesOfType
(
C
.
TRACK_TYPE_AUDIO
)
.
build
();
assertThat
(
trackSelectionOverrides
.
asList
()).
containsExactly
(
override2
);
assertThat
(
trackSelectionOverrides
.
getOverride
(
override2
.
trackGroup
)).
isEqualTo
(
override2
);
}
@Test
public
void
clearOverride_ofTypeGroup_removesOverride
()
{
TrackSelectionOverride
override1
=
new
TrackSelectionOverride
(
AAC_TRACK_GROUP
);
TrackSelectionOverride
override2
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
1
));
TrackSelectionOverrides
trackSelectionOverrides
=
new
TrackSelectionOverrides
.
Builder
()
.
addOverride
(
override1
)
.
addOverride
(
override2
)
.
clearOverride
(
override2
.
trackGroup
)
.
build
();
assertThat
(
trackSelectionOverrides
.
asList
()).
containsExactly
(
override1
);
assertThat
(
trackSelectionOverrides
.
getOverride
(
override1
.
trackGroup
)).
isEqualTo
(
override1
);
}
}
}
}
library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionParametersTest.java
View file @
daf72f51
...
@@ -22,7 +22,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
...
@@ -22,7 +22,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
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.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.ImmutableSet
;
import
com.google.common.collect.ImmutableSet
;
...
@@ -33,6 +32,9 @@ import org.junit.runner.RunWith;
...
@@ -33,6 +32,9 @@ import org.junit.runner.RunWith;
@RunWith
(
AndroidJUnit4
.
class
)
@RunWith
(
AndroidJUnit4
.
class
)
public
final
class
TrackSelectionParametersTest
{
public
final
class
TrackSelectionParametersTest
{
private
static
final
TrackGroup
AAC_TRACK_GROUP
=
new
TrackGroup
(
new
Format
.
Builder
().
setSampleMimeType
(
MimeTypes
.
AUDIO_AAC
).
build
());
@Test
@Test
public
void
defaultValue_withoutChange_isAsExpected
()
{
public
void
defaultValue_withoutChange_isAsExpected
()
{
TrackSelectionParameters
parameters
=
TrackSelectionParameters
.
DEFAULT_WITHOUT_CONTEXT
;
TrackSelectionParameters
parameters
=
TrackSelectionParameters
.
DEFAULT_WITHOUT_CONTEXT
;
...
@@ -63,22 +65,19 @@ public final class TrackSelectionParametersTest {
...
@@ -63,22 +65,19 @@ public final class TrackSelectionParametersTest {
// General
// General
assertThat
(
parameters
.
forceLowestBitrate
).
isFalse
();
assertThat
(
parameters
.
forceLowestBitrate
).
isFalse
();
assertThat
(
parameters
.
forceHighestSupportedBitrate
).
isFalse
();
assertThat
(
parameters
.
forceHighestSupportedBitrate
).
isFalse
();
assertThat
(
parameters
.
trackSelectionOverrides
.
asList
()
).
isEmpty
();
assertThat
(
parameters
.
overrides
).
isEmpty
();
assertThat
(
parameters
.
disabledTrackTypes
).
isEmpty
();
assertThat
(
parameters
.
disabledTrackTypes
).
isEmpty
();
}
}
@Test
@Test
public
void
parametersSet_fromDefault_isAsExpected
()
{
public
void
parametersSet_fromDefault_isAsExpected
()
{
TrackSelectionOverrides
trackSelectionOverrides
=
TrackSelectionOverride
override1
=
new
TrackSelectionOverrides
.
Builder
()
new
TrackSelectionOverride
(
new
TrackGroup
(
new
Format
.
Builder
().
build
()));
.
addOverride
(
new
TrackSelectionOverride
(
new
TrackGroup
(
new
Format
.
Builder
().
build
())))
TrackSelectionOverride
override2
=
.
addOverride
(
new
TrackSelectionOverride
(
new
TrackSelectionOverride
(
new
TrackGroup
(
new
TrackGroup
(
new
Format
.
Builder
().
setId
(
4
).
build
(),
new
Format
.
Builder
().
setId
(
5
).
build
()),
new
Format
.
Builder
().
setId
(
4
).
build
(),
/* trackIndices= */
ImmutableList
.
of
(
1
));
new
Format
.
Builder
().
setId
(
5
).
build
()),
/* trackIndices= */
ImmutableList
.
of
(
1
)))
.
build
();
TrackSelectionParameters
parameters
=
TrackSelectionParameters
parameters
=
TrackSelectionParameters
.
DEFAULT_WITHOUT_CONTEXT
TrackSelectionParameters
.
DEFAULT_WITHOUT_CONTEXT
.
buildUpon
()
.
buildUpon
()
...
@@ -107,7 +106,13 @@ public final class TrackSelectionParametersTest {
...
@@ -107,7 +106,13 @@ public final class TrackSelectionParametersTest {
// General
// General
.
setForceLowestBitrate
(
false
)
.
setForceLowestBitrate
(
false
)
.
setForceHighestSupportedBitrate
(
true
)
.
setForceHighestSupportedBitrate
(
true
)
.
setTrackSelectionOverrides
(
trackSelectionOverrides
)
.
addOverride
(
new
TrackSelectionOverride
(
new
TrackGroup
(
new
Format
.
Builder
().
build
())))
.
addOverride
(
new
TrackSelectionOverride
(
new
TrackGroup
(
new
Format
.
Builder
().
setId
(
4
).
build
(),
new
Format
.
Builder
().
setId
(
5
).
build
()),
/* trackIndices= */
ImmutableList
.
of
(
1
)))
.
setDisabledTrackTypes
(
ImmutableSet
.
of
(
C
.
TRACK_TYPE_AUDIO
,
C
.
TRACK_TYPE_TEXT
))
.
setDisabledTrackTypes
(
ImmutableSet
.
of
(
C
.
TRACK_TYPE_AUDIO
,
C
.
TRACK_TYPE_TEXT
))
.
build
();
.
build
();
...
@@ -141,7 +146,8 @@ public final class TrackSelectionParametersTest {
...
@@ -141,7 +146,8 @@ public final class TrackSelectionParametersTest {
// General
// General
assertThat
(
parameters
.
forceLowestBitrate
).
isFalse
();
assertThat
(
parameters
.
forceLowestBitrate
).
isFalse
();
assertThat
(
parameters
.
forceHighestSupportedBitrate
).
isTrue
();
assertThat
(
parameters
.
forceHighestSupportedBitrate
).
isTrue
();
assertThat
(
parameters
.
trackSelectionOverrides
).
isEqualTo
(
trackSelectionOverrides
);
assertThat
(
parameters
.
overrides
)
.
containsExactly
(
override1
.
trackGroup
,
override1
,
override2
.
trackGroup
,
override2
);
assertThat
(
parameters
.
disabledTrackTypes
)
assertThat
(
parameters
.
disabledTrackTypes
)
.
containsExactly
(
C
.
TRACK_TYPE_AUDIO
,
C
.
TRACK_TYPE_TEXT
);
.
containsExactly
(
C
.
TRACK_TYPE_AUDIO
,
C
.
TRACK_TYPE_TEXT
);
}
}
...
@@ -182,4 +188,101 @@ public final class TrackSelectionParametersTest {
...
@@ -182,4 +188,101 @@ public final class TrackSelectionParametersTest {
assertThat
(
parameters
.
viewportHeight
).
isEqualTo
(
Integer
.
MAX_VALUE
);
assertThat
(
parameters
.
viewportHeight
).
isEqualTo
(
Integer
.
MAX_VALUE
);
assertThat
(
parameters
.
viewportOrientationMayChange
).
isTrue
();
assertThat
(
parameters
.
viewportOrientationMayChange
).
isTrue
();
}
}
@Test
public
void
roundTripViaBundle_withOverride_yieldsEqualInstance
()
{
TrackSelectionOverride
override
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
3
,
4
),
/* trackIndices= */
ImmutableList
.
of
(
1
));
TrackSelectionParameters
trackSelectionParameters
=
new
TrackSelectionParameters
.
Builder
(
getApplicationContext
()).
addOverride
(
override
).
build
();
TrackSelectionParameters
fromBundle
=
TrackSelectionParameters
.
CREATOR
.
fromBundle
(
trackSelectionParameters
.
toBundle
());
assertThat
(
fromBundle
).
isEqualTo
(
trackSelectionParameters
);
assertThat
(
trackSelectionParameters
.
overrides
).
containsExactly
(
override
.
trackGroup
,
override
);
}
@Test
public
void
addOverride_onDifferentGroups_addsOverride
()
{
TrackSelectionOverride
override1
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
1
));
TrackSelectionOverride
override2
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
2
));
TrackSelectionParameters
trackSelectionParameters
=
new
TrackSelectionParameters
.
Builder
(
getApplicationContext
())
.
addOverride
(
override1
)
.
addOverride
(
override2
)
.
build
();
assertThat
(
trackSelectionParameters
.
overrides
)
.
containsExactly
(
override1
.
trackGroup
,
override1
,
override2
.
trackGroup
,
override2
);
}
@Test
public
void
addOverride_onSameGroup_replacesOverride
()
{
TrackGroup
trackGroup
=
newTrackGroupWithIds
(
1
,
2
,
3
);
TrackSelectionOverride
override1
=
new
TrackSelectionOverride
(
trackGroup
,
/* trackIndices= */
ImmutableList
.
of
(
0
));
TrackSelectionOverride
override2
=
new
TrackSelectionOverride
(
trackGroup
,
/* trackIndices= */
ImmutableList
.
of
(
1
));
TrackSelectionParameters
trackSelectionParameters
=
new
TrackSelectionParameters
.
Builder
(
getApplicationContext
())
.
addOverride
(
override1
)
.
addOverride
(
override2
)
.
build
();
assertThat
(
trackSelectionParameters
.
overrides
).
containsExactly
(
override2
.
trackGroup
,
override2
);
}
@Test
public
void
setOverrideForType_onSameType_replacesOverride
()
{
TrackSelectionOverride
override1
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
1
));
TrackSelectionOverride
override2
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
2
));
TrackSelectionParameters
trackSelectionParameters
=
new
TrackSelectionParameters
.
Builder
(
getApplicationContext
())
.
setOverrideForType
(
override1
)
.
setOverrideForType
(
override2
)
.
build
();
assertThat
(
trackSelectionParameters
.
overrides
).
containsExactly
(
override2
.
trackGroup
,
override2
);
}
@Test
public
void
clearOverridesOfType_ofTypeAudio_removesAudioOverride
()
{
TrackSelectionOverride
override1
=
new
TrackSelectionOverride
(
AAC_TRACK_GROUP
);
TrackSelectionOverride
override2
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
1
));
TrackSelectionParameters
trackSelectionParameters
=
new
TrackSelectionParameters
.
Builder
(
getApplicationContext
())
.
addOverride
(
override1
)
.
addOverride
(
override2
)
.
clearOverridesOfType
(
C
.
TRACK_TYPE_AUDIO
)
.
build
();
assertThat
(
trackSelectionParameters
.
overrides
).
containsExactly
(
override2
.
trackGroup
,
override2
);
}
@Test
public
void
clearOverride_ofTypeGroup_removesOverride
()
{
TrackSelectionOverride
override1
=
new
TrackSelectionOverride
(
AAC_TRACK_GROUP
);
TrackSelectionOverride
override2
=
new
TrackSelectionOverride
(
newTrackGroupWithIds
(
1
));
TrackSelectionParameters
trackSelectionParameters
=
new
TrackSelectionParameters
.
Builder
(
getApplicationContext
())
.
addOverride
(
override1
)
.
addOverride
(
override2
)
.
clearOverride
(
override2
.
trackGroup
)
.
build
();
assertThat
(
trackSelectionParameters
.
overrides
).
containsExactly
(
override1
.
trackGroup
,
override1
);
}
private
static
TrackGroup
newTrackGroupWithIds
(
int
...
ids
)
{
Format
[]
formats
=
new
Format
[
ids
.
length
];
for
(
int
i
=
0
;
i
<
ids
.
length
;
i
++)
{
formats
[
i
]
=
new
Format
.
Builder
().
setId
(
ids
[
i
]).
build
();
}
return
new
TrackGroup
(
formats
);
}
}
}
library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java
View file @
daf72f51
...
@@ -43,7 +43,6 @@ import com.google.android.exoplayer2.Timeline;
...
@@ -43,7 +43,6 @@ import com.google.android.exoplayer2.Timeline;
import
com.google.android.exoplayer2.source.MediaSource.MediaPeriodId
;
import
com.google.android.exoplayer2.source.MediaSource.MediaPeriodId
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.BundleableUtil
;
import
com.google.android.exoplayer2.util.BundleableUtil
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
...
@@ -593,9 +592,32 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -593,9 +592,32 @@ public class DefaultTrackSelector extends MappingTrackSelector {
}
}
@Override
@Override
public
ParametersBuilder
setTrackSelectionOverrides
(
public
ParametersBuilder
addOverride
(
TrackSelectionOverride
override
)
{
TrackSelectionOverrides
trackSelectionOverrides
)
{
super
.
addOverride
(
override
);
super
.
setTrackSelectionOverrides
(
trackSelectionOverrides
);
return
this
;
}
@Override
public
ParametersBuilder
clearOverride
(
TrackGroup
trackGroup
)
{
super
.
clearOverride
(
trackGroup
);
return
this
;
}
@Override
public
ParametersBuilder
setOverrideForType
(
TrackSelectionOverride
override
)
{
super
.
setOverrideForType
(
override
);
return
this
;
}
@Override
public
ParametersBuilder
clearOverridesOfType
(
@C
.
TrackType
int
trackType
)
{
super
.
clearOverridesOfType
(
trackType
);
return
this
;
}
@Override
public
ParametersBuilder
clearOverrides
()
{
super
.
clearOverrides
();
return
this
;
return
this
;
}
}
...
@@ -700,7 +722,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -700,7 +722,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
* @param groups The {@link TrackGroupArray} for which the override should be applied.
* @param groups The {@link TrackGroupArray} for which the override should be applied.
* @param override The override.
* @param override The override.
* @return This builder.
* @return This builder.
* @deprecated Use {@link TrackSelectionParameters.Builder#
setTrackSelectionOverrides
}.
* @deprecated Use {@link TrackSelectionParameters.Builder#
addOverride(TrackSelectionOverride)
}.
*/
*/
@Deprecated
@Deprecated
public
final
ParametersBuilder
setSelectionOverride
(
public
final
ParametersBuilder
setSelectionOverride
(
...
@@ -725,7 +747,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -725,7 +747,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
* @param rendererIndex The renderer index.
* @param rendererIndex The renderer index.
* @param groups The {@link TrackGroupArray} for which the override should be cleared.
* @param groups The {@link TrackGroupArray} for which the override should be cleared.
* @return This builder.
* @return This builder.
* @deprecated Use {@link TrackSelectionParameters.Builder#
setTrackSelectionOverrides
}.
* @deprecated Use {@link TrackSelectionParameters.Builder#
clearOverride(TrackGroup)
}.
*/
*/
@Deprecated
@Deprecated
public
final
ParametersBuilder
clearSelectionOverride
(
public
final
ParametersBuilder
clearSelectionOverride
(
...
@@ -748,7 +770,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -748,7 +770,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
*
*
* @param rendererIndex The renderer index.
* @param rendererIndex The renderer index.
* @return This builder.
* @return This builder.
* @deprecated Use {@link TrackSelectionParameters.Builder#
setTrackSelectionOverrides
}.
* @deprecated Use {@link TrackSelectionParameters.Builder#
clearOverridesOfType(int)
}.
*/
*/
@Deprecated
@Deprecated
public
final
ParametersBuilder
clearSelectionOverrides
(
int
rendererIndex
)
{
public
final
ParametersBuilder
clearSelectionOverrides
(
int
rendererIndex
)
{
...
@@ -766,7 +788,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -766,7 +788,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
* Clears all track selection overrides for all renderers.
* Clears all track selection overrides for all renderers.
*
*
* @return This builder.
* @return This builder.
* @deprecated Use {@link TrackSelectionParameters.Builder#
setTrackSelectionOverrides
}.
* @deprecated Use {@link TrackSelectionParameters.Builder#
clearOverrides()
}.
*/
*/
@Deprecated
@Deprecated
public
final
ParametersBuilder
clearSelectionOverrides
()
{
public
final
ParametersBuilder
clearSelectionOverrides
()
{
...
@@ -1017,7 +1039,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -1017,7 +1039,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
* @return Whether there is an override.
* @return Whether there is an override.
* @deprecated Only works to retrieve the overrides set with the deprecated {@link
* @deprecated Only works to retrieve the overrides set with the deprecated {@link
* ParametersBuilder#setSelectionOverride(int, TrackGroupArray, SelectionOverride)}. Use
* ParametersBuilder#setSelectionOverride(int, TrackGroupArray, SelectionOverride)}. Use
* {@link TrackSelectionParameters#
trackSelectionO
verrides} instead.
* {@link TrackSelectionParameters#
o
verrides} instead.
*/
*/
@Deprecated
@Deprecated
public
final
boolean
hasSelectionOverride
(
int
rendererIndex
,
TrackGroupArray
groups
)
{
public
final
boolean
hasSelectionOverride
(
int
rendererIndex
,
TrackGroupArray
groups
)
{
...
@@ -1034,7 +1056,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -1034,7 +1056,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
* @return The override, or null if no override exists.
* @return The override, or null if no override exists.
* @deprecated Only works to retrieve the overrides set with the deprecated {@link
* @deprecated Only works to retrieve the overrides set with the deprecated {@link
* ParametersBuilder#setSelectionOverride(int, TrackGroupArray, SelectionOverride)}. Use
* ParametersBuilder#setSelectionOverride(int, TrackGroupArray, SelectionOverride)}. Use
* {@link TrackSelectionParameters#
trackSelectionO
verrides} instead.
* {@link TrackSelectionParameters#
o
verrides} instead.
*/
*/
@Deprecated
@Deprecated
@Nullable
@Nullable
...
@@ -1653,9 +1675,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -1653,9 +1675,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
TrackGroupArray
rendererTrackGroups
=
mappedTrackInfo
.
getTrackGroups
(
rendererIndex
);
TrackGroupArray
rendererTrackGroups
=
mappedTrackInfo
.
getTrackGroups
(
rendererIndex
);
for
(
int
j
=
0
;
j
<
rendererTrackGroups
.
length
;
j
++)
{
for
(
int
j
=
0
;
j
<
rendererTrackGroups
.
length
;
j
++)
{
maybeUpdateApplicableOverrides
(
maybeUpdateApplicableOverrides
(
applicableOverrides
,
applicableOverrides
,
params
.
overrides
.
get
(
rendererTrackGroups
.
get
(
j
)),
rendererIndex
);
params
.
trackSelectionOverrides
.
getOverride
(
rendererTrackGroups
.
get
(
j
)),
rendererIndex
);
}
}
}
}
// Also iterate unmapped groups to see if they have overrides.
// Also iterate unmapped groups to see if they have overrides.
...
@@ -1663,7 +1683,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -1663,7 +1683,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
for
(
int
i
=
0
;
i
<
unmappedGroups
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
unmappedGroups
.
length
;
i
++)
{
maybeUpdateApplicableOverrides
(
maybeUpdateApplicableOverrides
(
applicableOverrides
,
applicableOverrides
,
params
.
trackSelectionOverrides
.
getOverride
(
unmappedGroups
.
get
(
i
)),
params
.
overrides
.
get
(
unmappedGroups
.
get
(
i
)),
/* rendererIndex= */
C
.
INDEX_UNSET
);
/* rendererIndex= */
C
.
INDEX_UNSET
);
}
}
return
applicableOverrides
;
return
applicableOverrides
;
...
...
library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java
View file @
daf72f51
...
@@ -52,7 +52,6 @@ import com.google.android.exoplayer2.testutil.FakeTimeline;
...
@@ -52,7 +52,6 @@ import com.google.android.exoplayer2.testutil.FakeTimeline;
import
com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters
;
import
com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters
;
import
com.google.android.exoplayer2.trackselection.DefaultTrackSelector.ParametersBuilder
;
import
com.google.android.exoplayer2.trackselection.DefaultTrackSelector.ParametersBuilder
;
import
com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride
;
import
com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride
;
import
com.google.android.exoplayer2.trackselection.TrackSelector.InvalidationListener
;
import
com.google.android.exoplayer2.trackselection.TrackSelector.InvalidationListener
;
import
com.google.android.exoplayer2.upstream.BandwidthMeter
;
import
com.google.android.exoplayer2.upstream.BandwidthMeter
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
...
@@ -169,10 +168,8 @@ public final class DefaultTrackSelectorTest {
...
@@ -169,10 +168,8 @@ public final class DefaultTrackSelectorTest {
trackSelector
.
setParameters
(
trackSelector
.
setParameters
(
trackSelector
trackSelector
.
buildUponParameters
()
.
buildUponParameters
()
.
setTrackSelectionOverrides
(
.
addOverride
(
new
TrackSelectionOverride
(
VIDEO_TRACK_GROUP
,
ImmutableList
.
of
()))
new
TrackSelectionOverrides
.
Builder
()
.
build
());
.
addOverride
(
new
TrackSelectionOverride
(
VIDEO_TRACK_GROUP
,
ImmutableList
.
of
()))
.
build
()));
TrackSelectorResult
result
=
TrackSelectorResult
result
=
trackSelector
.
selectTracks
(
RENDERER_CAPABILITIES
,
TRACK_GROUPS
,
periodId
,
TIMELINE
);
trackSelector
.
selectTracks
(
RENDERER_CAPABILITIES
,
TRACK_GROUPS
,
periodId
,
TIMELINE
);
...
@@ -223,18 +220,16 @@ public final class DefaultTrackSelectorTest {
...
@@ -223,18 +220,16 @@ public final class DefaultTrackSelectorTest {
trackSelector
.
setParameters
(
trackSelector
.
setParameters
(
trackSelector
trackSelector
.
buildUponParameters
()
.
buildUponParameters
()
.
setTrackSelectionOverrides
(
.
addOverride
(
new
TrackSelectionOverrides
.
Builder
()
new
TrackSelectionOverride
(
.
addOverride
(
videoGroupHighBitrate
,
/* trackIndices= */
ImmutableList
.
of
()))
new
TrackSelectionOverride
(
.
addOverride
(
videoGroupHighBitrate
,
/* trackIndices= */
ImmutableList
.
of
()))
new
TrackSelectionOverride
(
.
addOverride
(
videoGroupMidBitrate
,
/* trackIndices= */
ImmutableList
.
of
(
0
)))
new
TrackSelectionOverride
(
.
addOverride
(
videoGroupMidBitrate
,
/* trackIndices= */
ImmutableList
.
of
(
0
)))
new
TrackSelectionOverride
(
.
addOverride
(
videoGroupLowBitrate
,
/* trackIndices= */
ImmutableList
.
of
()))
new
TrackSelectionOverride
(
.
build
());
videoGroupLowBitrate
,
/* trackIndices= */
ImmutableList
.
of
()))
.
build
()));
TrackSelectorResult
result
=
TrackSelectorResult
result
=
trackSelector
.
selectTracks
(
trackSelector
.
selectTracks
(
...
@@ -258,12 +253,10 @@ public final class DefaultTrackSelectorTest {
...
@@ -258,12 +253,10 @@ public final class DefaultTrackSelectorTest {
trackSelector
.
setParameters
(
trackSelector
.
setParameters
(
trackSelector
trackSelector
.
buildUponParameters
()
.
buildUponParameters
()
.
setTrackSelectionOverrides
(
.
setOverrideForType
(
new
TrackSelectionOverrides
.
Builder
()
new
TrackSelectionOverride
(
.
setOverrideForType
(
new
TrackGroup
(
VIDEO_FORMAT
,
VIDEO_FORMAT
),
ImmutableList
.
of
()))
new
TrackSelectionOverride
(
.
build
());
new
TrackGroup
(
VIDEO_FORMAT
,
VIDEO_FORMAT
),
ImmutableList
.
of
()))
.
build
()));
TrackSelectorResult
result
=
TrackSelectorResult
result
=
trackSelector
.
selectTracks
(
trackSelector
.
selectTracks
(
...
@@ -307,10 +300,8 @@ public final class DefaultTrackSelectorTest {
...
@@ -307,10 +300,8 @@ public final class DefaultTrackSelectorTest {
trackSelector
.
setParameters
(
trackSelector
.
setParameters
(
trackSelector
trackSelector
.
buildUponParameters
()
.
buildUponParameters
()
.
setTrackSelectionOverrides
(
.
setOverrideForType
(
new
TrackSelectionOverride
(
videoGroupH264
))
new
TrackSelectionOverrides
.
Builder
()
.
build
());
.
setOverrideForType
(
new
TrackSelectionOverride
(
videoGroupH264
))
.
build
()));
TrackSelectorResult
result
=
TrackSelectorResult
result
=
trackSelector
.
selectTracks
(
trackSelector
.
selectTracks
(
new
RendererCapabilities
[]
{
rendererCapabilitiesH264
,
rendererCapabilitiesAv1
},
new
RendererCapabilities
[]
{
rendererCapabilitiesH264
,
rendererCapabilitiesAv1
},
...
@@ -326,10 +317,8 @@ public final class DefaultTrackSelectorTest {
...
@@ -326,10 +317,8 @@ public final class DefaultTrackSelectorTest {
trackSelector
.
setParameters
(
trackSelector
.
setParameters
(
trackSelector
trackSelector
.
buildUponParameters
()
.
buildUponParameters
()
.
setTrackSelectionOverrides
(
.
setOverrideForType
(
new
TrackSelectionOverride
(
videoGroupAv1
))
new
TrackSelectionOverrides
.
Builder
()
.
build
());
.
setOverrideForType
(
new
TrackSelectionOverride
(
videoGroupAv1
))
.
build
()));
result
=
result
=
trackSelector
.
selectTracks
(
trackSelector
.
selectTracks
(
new
RendererCapabilities
[]
{
rendererCapabilitiesH264
,
rendererCapabilitiesAv1
},
new
RendererCapabilities
[]
{
rendererCapabilitiesH264
,
rendererCapabilitiesAv1
},
...
@@ -359,10 +348,8 @@ public final class DefaultTrackSelectorTest {
...
@@ -359,10 +348,8 @@ public final class DefaultTrackSelectorTest {
trackSelector
.
setParameters
(
trackSelector
.
setParameters
(
trackSelector
trackSelector
.
buildUponParameters
()
.
buildUponParameters
()
.
setTrackSelectionOverrides
(
.
setOverrideForType
(
new
TrackSelectionOverride
(
audioGroupUnsupported
))
new
TrackSelectionOverrides
.
Builder
()
.
build
());
.
setOverrideForType
(
new
TrackSelectionOverride
(
audioGroupUnsupported
))
.
build
()));
TrackSelectorResult
result
=
TrackSelectorResult
result
=
trackSelector
.
selectTracks
(
trackSelector
.
selectTracks
(
new
RendererCapabilities
[]
{
VIDEO_CAPABILITIES
,
audioRendererCapabilties
},
new
RendererCapabilities
[]
{
VIDEO_CAPABILITIES
,
audioRendererCapabilties
},
...
@@ -2395,13 +2382,10 @@ public final class DefaultTrackSelectorTest {
...
@@ -2395,13 +2382,10 @@ public final class DefaultTrackSelectorTest {
.
setRendererDisabled
(
1
,
true
)
.
setRendererDisabled
(
1
,
true
)
.
setRendererDisabled
(
3
,
true
)
.
setRendererDisabled
(
3
,
true
)
.
setRendererDisabled
(
5
,
false
)
.
setRendererDisabled
(
5
,
false
)
.
setTrackSelectionOverrides
(
.
setOverrideForType
(
new
TrackSelectionOverrides
.
Builder
()
new
TrackSelectionOverride
(
.
setOverrideForType
(
new
TrackGroup
(
AUDIO_FORMAT
,
AUDIO_FORMAT
,
AUDIO_FORMAT
,
AUDIO_FORMAT
),
new
TrackSelectionOverride
(
/* trackIndices= */
ImmutableList
.
of
(
0
,
2
,
3
)))
new
TrackGroup
(
AUDIO_FORMAT
,
AUDIO_FORMAT
,
AUDIO_FORMAT
,
AUDIO_FORMAT
),
/* trackIndices= */
ImmutableList
.
of
(
0
,
2
,
3
)))
.
build
())
.
setDisabledTrackTypes
(
ImmutableSet
.
of
(
C
.
TRACK_TYPE_AUDIO
))
.
setDisabledTrackTypes
(
ImmutableSet
.
of
(
C
.
TRACK_TYPE_AUDIO
))
.
build
();
.
build
();
}
}
...
...
library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java
View file @
daf72f51
...
@@ -67,8 +67,7 @@ import com.google.android.exoplayer2.Timeline;
...
@@ -67,8 +67,7 @@ import com.google.android.exoplayer2.Timeline;
import
com.google.android.exoplayer2.TracksInfo
;
import
com.google.android.exoplayer2.TracksInfo
;
import
com.google.android.exoplayer2.TracksInfo.TrackGroupInfo
;
import
com.google.android.exoplayer2.TracksInfo.TrackGroupInfo
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionOverrides
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionOverride
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionParameters
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionParameters
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.RepeatModeUtil
;
import
com.google.android.exoplayer2.util.RepeatModeUtil
;
...
@@ -1908,7 +1907,7 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -1908,7 +1907,7 @@ public class StyledPlayerControlView extends FrameLayout {
holder
.
textView
.
setText
(
R
.
string
.
exo_track_selection_auto
);
holder
.
textView
.
setText
(
R
.
string
.
exo_track_selection_auto
);
// hasSelectionOverride is true means there is an explicit track selection, not "Auto".
// hasSelectionOverride is true means there is an explicit track selection, not "Auto".
TrackSelectionParameters
parameters
=
checkNotNull
(
player
).
getTrackSelectionParameters
();
TrackSelectionParameters
parameters
=
checkNotNull
(
player
).
getTrackSelectionParameters
();
boolean
hasSelectionOverride
=
hasSelectionOverride
(
parameters
.
trackSelectionOverrides
);
boolean
hasSelectionOverride
=
hasSelectionOverride
(
parameters
);
holder
.
checkView
.
setVisibility
(
hasSelectionOverride
?
INVISIBLE
:
VISIBLE
);
holder
.
checkView
.
setVisibility
(
hasSelectionOverride
?
INVISIBLE
:
VISIBLE
);
holder
.
itemView
.
setOnClickListener
(
holder
.
itemView
.
setOnClickListener
(
v
->
{
v
->
{
...
@@ -1917,12 +1916,6 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -1917,12 +1916,6 @@ public class StyledPlayerControlView extends FrameLayout {
}
}
TrackSelectionParameters
trackSelectionParameters
=
TrackSelectionParameters
trackSelectionParameters
=
player
.
getTrackSelectionParameters
();
player
.
getTrackSelectionParameters
();
TrackSelectionOverrides
trackSelectionOverrides
=
trackSelectionParameters
.
trackSelectionOverrides
.
buildUpon
()
.
clearOverridesOfType
(
C
.
TRACK_TYPE_AUDIO
)
.
build
();
Set
<
@C
.
TrackType
Integer
>
disabledTrackTypes
=
Set
<
@C
.
TrackType
Integer
>
disabledTrackTypes
=
new
HashSet
<>(
trackSelectionParameters
.
disabledTrackTypes
);
new
HashSet
<>(
trackSelectionParameters
.
disabledTrackTypes
);
disabledTrackTypes
.
remove
(
C
.
TRACK_TYPE_AUDIO
);
disabledTrackTypes
.
remove
(
C
.
TRACK_TYPE_AUDIO
);
...
@@ -1930,7 +1923,7 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -1930,7 +1923,7 @@ public class StyledPlayerControlView extends FrameLayout {
.
setTrackSelectionParameters
(
.
setTrackSelectionParameters
(
trackSelectionParameters
trackSelectionParameters
.
buildUpon
()
.
buildUpon
()
.
setTrackSelectionOverrides
(
trackSelectionOverrides
)
.
clearOverridesOfType
(
C
.
TRACK_TYPE_AUDIO
)
.
setDisabledTrackTypes
(
disabledTrackTypes
)
.
setDisabledTrackTypes
(
disabledTrackTypes
)
.
build
());
.
build
());
settingsAdapter
.
setSubTextAtPosition
(
settingsAdapter
.
setSubTextAtPosition
(
...
@@ -1940,10 +1933,10 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -1940,10 +1933,10 @@ public class StyledPlayerControlView extends FrameLayout {
});
});
}
}
private
boolean
hasSelectionOverride
(
TrackSelection
Overrides
trackSelectionOverride
s
)
{
private
boolean
hasSelectionOverride
(
TrackSelection
Parameters
trackSelectionParameter
s
)
{
for
(
int
i
=
0
;
i
<
tracks
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
tracks
.
size
();
i
++)
{
TrackGroup
trackGroup
=
tracks
.
get
(
i
).
trackGroupInfo
.
getTrackGroup
();
TrackGroup
trackGroup
=
tracks
.
get
(
i
).
trackGroupInfo
.
getTrackGroup
();
if
(
trackSelection
Overrides
.
getOverride
(
trackGroup
)
!=
null
)
{
if
(
trackSelection
Parameters
.
overrides
.
containsKey
(
trackGroup
)
)
{
return
true
;
return
true
;
}
}
}
}
...
@@ -1966,7 +1959,7 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -1966,7 +1959,7 @@ public class StyledPlayerControlView extends FrameLayout {
getResources
().
getString
(
R
.
string
.
exo_track_selection_none
));
getResources
().
getString
(
R
.
string
.
exo_track_selection_none
));
// TODO(insun) : Make the audio item in main settings (settingsAdapater)
// TODO(insun) : Make the audio item in main settings (settingsAdapater)
// to be non-clickable.
// to be non-clickable.
}
else
if
(!
hasSelectionOverride
(
params
.
trackSelectionOverrides
))
{
}
else
if
(!
hasSelectionOverride
(
params
))
{
settingsAdapter
.
setSubTextAtPosition
(
settingsAdapter
.
setSubTextAtPosition
(
SETTINGS_AUDIO_TRACK_SELECTION_POSITION
,
SETTINGS_AUDIO_TRACK_SELECTION_POSITION
,
getResources
().
getString
(
R
.
string
.
exo_track_selection_auto
));
getResources
().
getString
(
R
.
string
.
exo_track_selection_auto
));
...
@@ -2017,8 +2010,7 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -2017,8 +2010,7 @@ public class StyledPlayerControlView extends FrameLayout {
TrackInformation
track
=
tracks
.
get
(
position
-
1
);
TrackInformation
track
=
tracks
.
get
(
position
-
1
);
TrackGroup
trackGroup
=
track
.
trackGroupInfo
.
getTrackGroup
();
TrackGroup
trackGroup
=
track
.
trackGroupInfo
.
getTrackGroup
();
TrackSelectionParameters
params
=
checkNotNull
(
player
).
getTrackSelectionParameters
();
TrackSelectionParameters
params
=
checkNotNull
(
player
).
getTrackSelectionParameters
();
boolean
explicitlySelected
=
boolean
explicitlySelected
=
params
.
overrides
.
get
(
trackGroup
)
!=
null
&&
track
.
isSelected
();
params
.
trackSelectionOverrides
.
getOverride
(
trackGroup
)
!=
null
&&
track
.
isSelected
();
holder
.
textView
.
setText
(
track
.
trackName
);
holder
.
textView
.
setText
(
track
.
trackName
);
holder
.
checkView
.
setVisibility
(
explicitlySelected
?
VISIBLE
:
INVISIBLE
);
holder
.
checkView
.
setVisibility
(
explicitlySelected
?
VISIBLE
:
INVISIBLE
);
holder
.
itemView
.
setOnClickListener
(
holder
.
itemView
.
setOnClickListener
(
...
@@ -2028,14 +2020,6 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -2028,14 +2020,6 @@ public class StyledPlayerControlView extends FrameLayout {
}
}
TrackSelectionParameters
trackSelectionParameters
=
TrackSelectionParameters
trackSelectionParameters
=
player
.
getTrackSelectionParameters
();
player
.
getTrackSelectionParameters
();
TrackSelectionOverrides
overrides
=
trackSelectionParameters
.
trackSelectionOverrides
.
buildUpon
()
.
setOverrideForType
(
new
TrackSelectionOverride
(
trackGroup
,
ImmutableList
.
of
(
track
.
trackIndex
)))
.
build
();
Set
<
@C
.
TrackType
Integer
>
disabledTrackTypes
=
Set
<
@C
.
TrackType
Integer
>
disabledTrackTypes
=
new
HashSet
<>(
trackSelectionParameters
.
disabledTrackTypes
);
new
HashSet
<>(
trackSelectionParameters
.
disabledTrackTypes
);
disabledTrackTypes
.
remove
(
track
.
trackGroupInfo
.
getTrackType
());
disabledTrackTypes
.
remove
(
track
.
trackGroupInfo
.
getTrackType
());
...
@@ -2043,7 +2027,9 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -2043,7 +2027,9 @@ public class StyledPlayerControlView extends FrameLayout {
.
setTrackSelectionParameters
(
.
setTrackSelectionParameters
(
trackSelectionParameters
trackSelectionParameters
.
buildUpon
()
.
buildUpon
()
.
setTrackSelectionOverrides
(
overrides
)
.
setOverrideForType
(
new
TrackSelectionOverride
(
trackGroup
,
ImmutableList
.
of
(
track
.
trackIndex
)))
.
setDisabledTrackTypes
(
disabledTrackTypes
)
.
setDisabledTrackTypes
(
disabledTrackTypes
)
.
build
());
.
build
());
onTrackSelection
(
track
.
trackName
);
onTrackSelection
(
track
.
trackName
);
...
...
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