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
7bfde6a5
authored
Sep 03, 2020
by
Corentin Zuber
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Fix comments
parent
50582417
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
46 additions
and
42 deletions
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java
library/core/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionParameters.java
library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadHelperTest.java
library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
View file @
7bfde6a5
...
...
@@ -654,7 +654,7 @@ public final class DownloadHelper {
}
}
for
(
String
language
:
languages
)
{
parametersBuilder
.
setPreferredAudioLanguage
(
language
);
parametersBuilder
.
setPreferredAudioLanguage
s
(
language
);
addTrackSelection
(
periodIndex
,
parametersBuilder
.
build
());
}
}
...
...
@@ -685,7 +685,7 @@ public final class DownloadHelper {
}
parametersBuilder
.
setSelectUndeterminedTextLanguage
(
selectUndeterminedTextLanguage
);
for
(
String
language
:
languages
)
{
parametersBuilder
.
setPreferredTextLanguage
(
language
);
parametersBuilder
.
setPreferredTextLanguage
s
(
language
);
addTrackSelection
(
periodIndex
,
parametersBuilder
.
build
());
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java
View file @
7bfde6a5
...
...
@@ -39,6 +39,7 @@ import com.google.android.exoplayer2.source.TrackGroupArray;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.common.collect.ComparisonChain
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.Ordering
;
import
com.google.common.primitives.Ints
;
import
java.util.ArrayList
;
...
...
@@ -445,14 +446,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
// Audio
@Override
public
ParametersBuilder
setPreferredAudioLanguage
(
@Nullable
String
preferredAudioLanguage
)
{
super
.
setPreferredAudioLanguage
(
preferredAudioLanguage
);
return
this
;
}
@Override
public
ParametersBuilder
setPreferredAudioLanguage
(
String
[]
preferredAudioLanguage
)
{
super
.
setPreferredAudioLanguage
(
preferredAudioLanguage
);
public
ParametersBuilder
setPreferredAudioLanguages
(
@Nullable
String
...
preferredAudioLanguages
)
{
super
.
setPreferredAudioLanguages
(
preferredAudioLanguages
);
return
this
;
}
...
...
@@ -547,8 +542,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
}
@Override
public
ParametersBuilder
setPreferredTextLanguage
(
@Nullable
String
preferredTextLanguage
)
{
super
.
setPreferredTextLanguage
(
preferredTextLanguage
);
public
ParametersBuilder
setPreferredTextLanguage
s
(
@Nullable
String
...
preferredTextLanguages
)
{
super
.
setPreferredTextLanguage
s
(
preferredTextLanguages
);
return
this
;
}
...
...
@@ -773,7 +768,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
viewportHeight
,
viewportOrientationMayChange
,
// Audio
preferredAudioLanguage
,
preferredAudioLanguage
s
,
maxAudioChannelCount
,
maxAudioBitrate
,
exceedAudioConstraintsIfNecessary
,
...
...
@@ -781,7 +776,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
allowAudioMixedSampleRateAdaptiveness
,
allowAudioMixedChannelCountAdaptiveness
,
// Text
preferredTextLanguage
,
preferredTextLanguage
s
,
preferredTextRoleFlags
,
selectUndeterminedTextLanguage
,
disabledTextTrackSelectionFlags
,
...
...
@@ -1021,7 +1016,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
int
viewportHeight
,
boolean
viewportOrientationMayChange
,
// Audio
String
[]
preferredAudioLanguage
,
ImmutableList
<
String
>
preferredAudioLanguage
,
int
maxAudioChannelCount
,
int
maxAudioBitrate
,
boolean
exceedAudioConstraintsIfNecessary
,
...
...
@@ -1029,7 +1024,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
boolean
allowAudioMixedSampleRateAdaptiveness
,
boolean
allowAudioMixedChannelCountAdaptiveness
,
// Text
String
[]
preferredTextLanguage
,
ImmutableList
<
String
>
preferredTextLanguage
,
@C
.
RoleFlags
int
preferredTextRoleFlags
,
boolean
selectUndeterminedTextLanguage
,
@C
.
SelectionFlags
int
disabledTextTrackSelectionFlags
,
...
...
@@ -2613,6 +2608,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
private
final
Parameters
parameters
;
private
final
boolean
isWithinRendererCapabilities
;
private
final
int
preferredLanguageScore
;
private
final
int
preferredLanguageIndex
;
private
final
int
localeLanguageMatchIndex
;
private
final
int
localeLanguageScore
;
private
final
boolean
isDefaultSelectionFlag
;
...
...
@@ -2626,14 +2622,18 @@ public class DefaultTrackSelector extends MappingTrackSelector {
isWithinRendererCapabilities
=
isSupported
(
formatSupport
,
/* allowExceedsCapabilities= */
false
);
int
bestLanguageScore
=
0
;
for
(
int
i
=
0
;
i
<
parameters
.
preferredAudioLanguage
.
length
;
i
++)
{
int
bestLanguageIndex
=
0
;
for
(
int
i
=
0
;
i
<
parameters
.
preferredAudioLanguages
.
size
();
i
++)
{
int
score
=
getFormatLanguageScore
(
format
,
parameters
.
preferredAudioLanguage
[
i
]
,
parameters
.
preferredAudioLanguage
s
.
get
(
i
)
,
/* allowUndeterminedFormatLanguage= */
false
);
score
=
1000
*
score
+
parameters
.
preferredAudioLanguage
.
length
-
i
;
// Priorise the first items in array
bestLanguageScore
=
Math
.
max
(
bestLanguageScore
,
score
);
if
(
score
>
0
)
{
bestLanguageIndex
=
i
;
bestLanguageScore
=
score
;
}
}
preferredLanguageIndex
=
bestLanguageIndex
;
preferredLanguageScore
=
bestLanguageScore
;
isDefaultSelectionFlag
=
(
format
.
selectionFlags
&
C
.
SELECTION_FLAG_DEFAULT
)
!=
0
;
channelCount
=
format
.
channelCount
;
...
...
@@ -2677,6 +2677,10 @@ public class DefaultTrackSelector extends MappingTrackSelector {
:
FORMAT_VALUE_ORDERING
.
reverse
();
return
ComparisonChain
.
start
()
.
compareFalseFirst
(
this
.
isWithinRendererCapabilities
,
other
.
isWithinRendererCapabilities
)
.
compare
(
this
.
preferredLanguageIndex
,
other
.
preferredLanguageIndex
,
Ordering
.
natural
().
reverse
())
.
compare
(
this
.
preferredLanguageScore
,
other
.
preferredLanguageScore
)
.
compareFalseFirst
(
this
.
isWithinConstraints
,
other
.
isWithinConstraints
)
.
compare
(
...
...
@@ -2729,10 +2733,10 @@ public class DefaultTrackSelector extends MappingTrackSelector {
isDefault
=
(
maskedSelectionFlags
&
C
.
SELECTION_FLAG_DEFAULT
)
!=
0
;
isForced
=
(
maskedSelectionFlags
&
C
.
SELECTION_FLAG_FORCED
)
!=
0
;
int
bestLanguageScore
=
0
;
for
(
int
i
=
0
;
i
<
parameters
.
preferredTextLanguage
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
parameters
.
preferredTextLanguage
s
.
size
()
;
i
++)
{
int
score
=
getFormatLanguageScore
(
format
,
parameters
.
preferredTextLanguage
[
i
]
,
parameters
.
selectUndeterminedTextLanguage
);
score
=
1000
*
score
+
parameters
.
preferredTextLanguage
.
length
-
i
;
// Priorise the first items in array
format
,
parameters
.
preferredTextLanguage
s
.
get
(
i
)
,
parameters
.
selectUndeterminedTextLanguage
);
score
=
1000
*
score
+
parameters
.
preferredTextLanguage
s
.
size
()
-
i
;
// Priorise the first items in array
bestLanguageScore
=
Math
.
max
(
bestLanguageScore
,
score
);
}
preferredLanguageScore
=
bestLanguageScore
;
...
...
@@ -2746,7 +2750,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
getFormatLanguageScore
(
format
,
selectedAudioLanguage
,
selectedAudioLanguageUndetermined
);
isWithinConstraints
=
preferredLanguageScore
>
0
||
(
parameters
.
preferredTextLanguage
.
length
==
0
&&
preferredRoleFlagsScore
>
0
)
||
(
parameters
.
preferredTextLanguage
s
.
size
()
==
0
&&
preferredRoleFlagsScore
>
0
)
||
isDefault
||
(
isForced
&&
selectedAudioLanguageScore
>
0
);
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionParameters.java
View file @
7bfde6a5
This diff is collapsed.
Click to expand it.
library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadHelperTest.java
View file @
7bfde6a5
...
...
@@ -251,8 +251,8 @@ public class DownloadHelperTest {
prepareDownloadHelper
(
downloadHelper
);
DefaultTrackSelector
.
Parameters
parameters
=
new
DefaultTrackSelector
.
ParametersBuilder
(
ApplicationProvider
.
getApplicationContext
())
.
setPreferredAudioLanguage
(
"ZH"
)
.
setPreferredTextLanguage
(
"ZH"
)
.
setPreferredAudioLanguage
s
(
"ZH"
)
.
setPreferredTextLanguage
s
(
"ZH"
)
.
setRendererDisabled
(
/* rendererIndex= */
2
,
true
)
.
build
();
...
...
@@ -288,8 +288,8 @@ public class DownloadHelperTest {
// all video tracks to initial video single track selection.
DefaultTrackSelector
.
Parameters
parameters
=
new
DefaultTrackSelector
.
ParametersBuilder
(
ApplicationProvider
.
getApplicationContext
())
.
setPreferredAudioLanguage
(
"ZH"
)
.
setPreferredTextLanguage
(
"US"
)
.
setPreferredAudioLanguage
s
(
"ZH"
)
.
setPreferredTextLanguage
s
(
"US"
)
.
build
();
// Add only to one period selection to verify second period selection is untouched.
...
...
@@ -392,8 +392,8 @@ public class DownloadHelperTest {
// also renderers without any track groups.
DefaultTrackSelector
.
Parameters
parameters
=
new
DefaultTrackSelector
.
ParametersBuilder
(
ApplicationProvider
.
getApplicationContext
())
.
setPreferredAudioLanguage
(
"ZH"
)
.
setPreferredTextLanguage
(
"US"
)
.
setPreferredAudioLanguage
s
(
"ZH"
)
.
setPreferredTextLanguage
s
(
"US"
)
.
build
();
downloadHelper
.
addTrackSelection
(
/* periodIndex= */
0
,
parameters
);
byte
[]
data
=
new
byte
[
10
];
...
...
library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java
View file @
7bfde6a5
...
...
@@ -283,7 +283,7 @@ public final class DefaultTrackSelectorTest {
*/
@Test
public
void
setParameterWithNonDefaultParameterNotifyInvalidationListener
()
{
ParametersBuilder
builder
=
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
(
"eng"
);
ParametersBuilder
builder
=
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
s
(
"eng"
);
trackSelector
.
setParameters
(
builder
);
verify
(
invalidationListener
).
onTrackSelectionsInvalidated
();
}
...
...
@@ -295,7 +295,7 @@ public final class DefaultTrackSelectorTest {
*/
@Test
public
void
setParameterWithSameParametersDoesNotNotifyInvalidationListenerAgain
()
{
ParametersBuilder
builder
=
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
(
"eng"
);
ParametersBuilder
builder
=
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
s
(
"eng"
);
trackSelector
.
setParameters
(
builder
);
trackSelector
.
setParameters
(
builder
);
verify
(
invalidationListener
,
times
(
1
)).
onTrackSelectionsInvalidated
();
...
...
@@ -369,7 +369,7 @@ public final class DefaultTrackSelectorTest {
Format
enAudioFormat
=
formatBuilder
.
setLanguage
(
"eng"
).
build
();
TrackGroupArray
trackGroups
=
wrapFormats
(
frAudioFormat
,
enAudioFormat
);
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
(
"eng"
));
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
s
(
"eng"
));
TrackSelectorResult
result
=
trackSelector
.
selectTracks
(
new
RendererCapabilities
[]
{
ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES
},
...
...
@@ -391,7 +391,7 @@ public final class DefaultTrackSelectorTest {
Format
enNonDefaultFormat
=
formatBuilder
.
setLanguage
(
"eng"
).
setSelectionFlags
(
0
).
build
();
TrackGroupArray
trackGroups
=
wrapFormats
(
frDefaultFormat
,
enNonDefaultFormat
);
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
(
"eng"
));
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
s
(
"eng"
));
TrackSelectorResult
result
=
trackSelector
.
selectTracks
(
new
RendererCapabilities
[]
{
ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES
},
...
...
@@ -511,7 +511,7 @@ public final class DefaultTrackSelectorTest {
RendererCapabilities
mappedAudioRendererCapabilities
=
new
FakeMappedRendererCapabilities
(
C
.
TRACK_TYPE_AUDIO
,
mappedCapabilities
);
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
(
"eng"
));
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
s
(
"eng"
));
TrackSelectorResult
result
=
trackSelector
.
selectTracks
(
new
RendererCapabilities
[]
{
mappedAudioRendererCapabilities
},
...
...
@@ -546,7 +546,7 @@ public final class DefaultTrackSelectorTest {
RendererCapabilities
mappedAudioRendererCapabilities
=
new
FakeMappedRendererCapabilities
(
C
.
TRACK_TYPE_AUDIO
,
mappedCapabilities
);
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
(
"eng"
));
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
s
(
"eng"
));
TrackSelectorResult
result
=
trackSelector
.
selectTracks
(
new
RendererCapabilities
[]
{
mappedAudioRendererCapabilities
},
...
...
@@ -841,7 +841,7 @@ public final class DefaultTrackSelectorTest {
// There is a preferred language, so a language-matching track flagged as default should
// be selected, and the one without forced flag should be preferred.
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredTextLanguage
(
"eng"
));
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredTextLanguage
s
(
"eng"
));
result
=
trackSelector
.
selectTracks
(
textRendererCapabilities
,
trackGroups
,
periodId
,
TIMELINE
);
assertFixedSelection
(
result
.
selections
.
get
(
0
),
trackGroups
,
defaultOnly
);
...
...
@@ -929,7 +929,7 @@ public final class DefaultTrackSelectorTest {
result
=
trackSelector
.
selectTracks
(
textRendererCapabilites
,
trackGroups
,
periodId
,
TIMELINE
);
assertFixedSelection
(
result
.
selections
.
get
(
0
),
trackGroups
,
undeterminedUnd
);
ParametersBuilder
builder
=
defaultParameters
.
buildUpon
().
setPreferredTextLanguage
(
"spa"
);
ParametersBuilder
builder
=
defaultParameters
.
buildUpon
().
setPreferredTextLanguage
s
(
"spa"
);
trackSelector
.
setParameters
(
builder
);
result
=
trackSelector
.
selectTracks
(
textRendererCapabilites
,
trackGroups
,
periodId
,
TIMELINE
);
assertFixedSelection
(
result
.
selections
.
get
(
0
),
trackGroups
,
spanish
);
...
...
@@ -984,13 +984,13 @@ public final class DefaultTrackSelectorTest {
assertNoSelection
(
result
.
selections
.
get
(
1
));
// Explicit language preference for english. First renderer should be used.
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredTextLanguage
(
"en"
));
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredTextLanguage
s
(
"en"
));
result
=
trackSelector
.
selectTracks
(
rendererCapabilities
,
trackGroups
,
periodId
,
TIMELINE
);
assertFixedSelection
(
result
.
selections
.
get
(
0
),
trackGroups
,
english
);
assertNoSelection
(
result
.
selections
.
get
(
1
));
// Explicit language preference for German. Second renderer should be used.
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredTextLanguage
(
"de"
));
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredTextLanguage
s
(
"de"
));
result
=
trackSelector
.
selectTracks
(
rendererCapabilities
,
trackGroups
,
periodId
,
TIMELINE
);
assertNoSelection
(
result
.
selections
.
get
(
0
));
assertFixedSelection
(
result
.
selections
.
get
(
1
),
trackGroups
,
german
);
...
...
@@ -1290,13 +1290,13 @@ public final class DefaultTrackSelectorTest {
assertNoSelection
(
result
.
selections
.
get
(
1
));
// Explicit language preference for english. First renderer should be used.
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
(
"en"
));
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
s
(
"en"
));
result
=
trackSelector
.
selectTracks
(
rendererCapabilities
,
trackGroups
,
periodId
,
TIMELINE
);
assertFixedSelection
(
result
.
selections
.
get
(
0
),
trackGroups
,
english
);
assertNoSelection
(
result
.
selections
.
get
(
1
));
// Explicit language preference for German. Second renderer should be used.
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
(
"de"
));
trackSelector
.
setParameters
(
defaultParameters
.
buildUpon
().
setPreferredAudioLanguage
s
(
"de"
));
result
=
trackSelector
.
selectTracks
(
rendererCapabilities
,
trackGroups
,
periodId
,
TIMELINE
);
assertNoSelection
(
result
.
selections
.
get
(
0
));
assertFixedSelection
(
result
.
selections
.
get
(
1
),
trackGroups
,
german
);
...
...
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