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
50582417
authored
Jul 31, 2020
by
Corentin Zuber
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Authorize multiple preffered language and text
parent
cfb429d1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
83 additions
and
31 deletions
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/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java
View file @
50582417
...
@@ -450,6 +450,12 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -450,6 +450,12 @@ public class DefaultTrackSelector extends MappingTrackSelector {
return
this
;
return
this
;
}
}
@Override
public
ParametersBuilder
setPreferredAudioLanguage
(
String
[]
preferredAudioLanguage
)
{
super
.
setPreferredAudioLanguage
(
preferredAudioLanguage
);
return
this
;
}
/**
/**
* Sets the maximum allowed audio channel count.
* Sets the maximum allowed audio channel count.
*
*
...
@@ -1015,7 +1021,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -1015,7 +1021,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
int
viewportHeight
,
int
viewportHeight
,
boolean
viewportOrientationMayChange
,
boolean
viewportOrientationMayChange
,
// Audio
// Audio
@Nullable
String
preferredAudioLanguage
,
String
[]
preferredAudioLanguage
,
int
maxAudioChannelCount
,
int
maxAudioChannelCount
,
int
maxAudioBitrate
,
int
maxAudioBitrate
,
boolean
exceedAudioConstraintsIfNecessary
,
boolean
exceedAudioConstraintsIfNecessary
,
...
@@ -1023,7 +1029,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -1023,7 +1029,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
boolean
allowAudioMixedSampleRateAdaptiveness
,
boolean
allowAudioMixedSampleRateAdaptiveness
,
boolean
allowAudioMixedChannelCountAdaptiveness
,
boolean
allowAudioMixedChannelCountAdaptiveness
,
// Text
// Text
@Nullable
String
preferredTextLanguage
,
String
[]
preferredTextLanguage
,
@C
.
RoleFlags
int
preferredTextRoleFlags
,
@C
.
RoleFlags
int
preferredTextRoleFlags
,
boolean
selectUndeterminedTextLanguage
,
boolean
selectUndeterminedTextLanguage
,
@C
.
SelectionFlags
int
disabledTextTrackSelectionFlags
,
@C
.
SelectionFlags
int
disabledTextTrackSelectionFlags
,
...
@@ -2619,11 +2625,16 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -2619,11 +2625,16 @@ public class DefaultTrackSelector extends MappingTrackSelector {
this
.
language
=
normalizeUndeterminedLanguageToNull
(
format
.
language
);
this
.
language
=
normalizeUndeterminedLanguageToNull
(
format
.
language
);
isWithinRendererCapabilities
=
isWithinRendererCapabilities
=
isSupported
(
formatSupport
,
/* allowExceedsCapabilities= */
false
);
isSupported
(
formatSupport
,
/* allowExceedsCapabilities= */
false
);
preferredLanguageScore
=
int
bestLanguageScore
=
0
;
getFormatLanguageScore
(
for
(
int
i
=
0
;
i
<
parameters
.
preferredAudioLanguage
.
length
;
i
++)
{
format
,
int
score
=
getFormatLanguageScore
(
parameters
.
preferredAudioLanguage
,
format
,
/* allowUndeterminedFormatLanguage= */
false
);
parameters
.
preferredAudioLanguage
[
i
],
/* allowUndeterminedFormatLanguage= */
false
);
score
=
1000
*
score
+
parameters
.
preferredAudioLanguage
.
length
-
i
;
// Priorise the first items in array
bestLanguageScore
=
Math
.
max
(
bestLanguageScore
,
score
);
}
preferredLanguageScore
=
bestLanguageScore
;
isDefaultSelectionFlag
=
(
format
.
selectionFlags
&
C
.
SELECTION_FLAG_DEFAULT
)
!=
0
;
isDefaultSelectionFlag
=
(
format
.
selectionFlags
&
C
.
SELECTION_FLAG_DEFAULT
)
!=
0
;
channelCount
=
format
.
channelCount
;
channelCount
=
format
.
channelCount
;
sampleRate
=
format
.
sampleRate
;
sampleRate
=
format
.
sampleRate
;
...
@@ -2717,9 +2728,14 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -2717,9 +2728,14 @@ public class DefaultTrackSelector extends MappingTrackSelector {
format
.
selectionFlags
&
~
parameters
.
disabledTextTrackSelectionFlags
;
format
.
selectionFlags
&
~
parameters
.
disabledTextTrackSelectionFlags
;
isDefault
=
(
maskedSelectionFlags
&
C
.
SELECTION_FLAG_DEFAULT
)
!=
0
;
isDefault
=
(
maskedSelectionFlags
&
C
.
SELECTION_FLAG_DEFAULT
)
!=
0
;
isForced
=
(
maskedSelectionFlags
&
C
.
SELECTION_FLAG_FORCED
)
!=
0
;
isForced
=
(
maskedSelectionFlags
&
C
.
SELECTION_FLAG_FORCED
)
!=
0
;
preferredLanguageScore
=
int
bestLanguageScore
=
0
;
getFormatLanguageScore
(
for
(
int
i
=
0
;
i
<
parameters
.
preferredTextLanguage
.
length
;
i
++)
{
format
,
parameters
.
preferredTextLanguage
,
parameters
.
selectUndeterminedTextLanguage
);
int
score
=
getFormatLanguageScore
(
format
,
parameters
.
preferredTextLanguage
[
i
],
parameters
.
selectUndeterminedTextLanguage
);
score
=
1000
*
score
+
parameters
.
preferredTextLanguage
.
length
-
i
;
// Priorise the first items in array
bestLanguageScore
=
Math
.
max
(
bestLanguageScore
,
score
);
}
preferredLanguageScore
=
bestLanguageScore
;
preferredRoleFlagsScore
=
preferredRoleFlagsScore
=
Integer
.
bitCount
(
format
.
roleFlags
&
parameters
.
preferredTextRoleFlags
);
Integer
.
bitCount
(
format
.
roleFlags
&
parameters
.
preferredTextRoleFlags
);
hasCaptionRoleFlags
=
hasCaptionRoleFlags
=
...
@@ -2730,7 +2746,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -2730,7 +2746,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
getFormatLanguageScore
(
format
,
selectedAudioLanguage
,
selectedAudioLanguageUndetermined
);
getFormatLanguageScore
(
format
,
selectedAudioLanguage
,
selectedAudioLanguageUndetermined
);
isWithinConstraints
=
isWithinConstraints
=
preferredLanguageScore
>
0
preferredLanguageScore
>
0
||
(
parameters
.
preferredTextLanguage
==
null
&&
preferredRoleFlagsScore
>
0
)
||
(
parameters
.
preferredTextLanguage
.
length
==
0
&&
preferredRoleFlagsScore
>
0
)
||
isDefault
||
isDefault
||
(
isForced
&&
selectedAudioLanguageScore
>
0
);
||
(
isForced
&&
selectedAudioLanguageScore
>
0
);
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionParameters.java
View file @
50582417
...
@@ -19,12 +19,12 @@ import android.content.Context;
...
@@ -19,12 +19,12 @@ import android.content.Context;
import
android.os.Looper
;
import
android.os.Looper
;
import
android.os.Parcel
;
import
android.os.Parcel
;
import
android.os.Parcelable
;
import
android.os.Parcelable
;
import
android.text.TextUtils
;
import
android.view.accessibility.CaptioningManager
;
import
android.view.accessibility.CaptioningManager
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.RequiresApi
;
import
androidx.annotation.RequiresApi
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.android.exoplayer2.util.Util
;
import
java.util.Arrays
;
import
java.util.Locale
;
import
java.util.Locale
;
/** Constraint parameters for track selection. */
/** Constraint parameters for track selection. */
...
@@ -36,8 +36,8 @@ public class TrackSelectionParameters implements Parcelable {
...
@@ -36,8 +36,8 @@ public class TrackSelectionParameters implements Parcelable {
*/
*/
public
static
class
Builder
{
public
static
class
Builder
{
@Nullable
/* package */
String
preferredAudioLanguage
;
/* package */
String
[]
preferredAudioLanguage
;
@Nullable
/* package */
String
preferredTextLanguage
;
/* package */
String
[]
preferredTextLanguage
;
@C
.
RoleFlags
/* package */
int
preferredTextRoleFlags
;
@C
.
RoleFlags
/* package */
int
preferredTextRoleFlags
;
/* package */
boolean
selectUndeterminedTextLanguage
;
/* package */
boolean
selectUndeterminedTextLanguage
;
@C
.
SelectionFlags
/* package */
int
disabledTextTrackSelectionFlags
;
@C
.
SelectionFlags
/* package */
int
disabledTextTrackSelectionFlags
;
...
@@ -59,8 +59,8 @@ public class TrackSelectionParameters implements Parcelable {
...
@@ -59,8 +59,8 @@ public class TrackSelectionParameters implements Parcelable {
*/
*/
@Deprecated
@Deprecated
public
Builder
()
{
public
Builder
()
{
preferredAudioLanguage
=
n
ull
;
preferredAudioLanguage
=
n
ew
String
[
0
]
;
preferredTextLanguage
=
n
ull
;
preferredTextLanguage
=
n
ew
String
[
0
]
;
preferredTextRoleFlags
=
0
;
preferredTextRoleFlags
=
0
;
selectUndeterminedTextLanguage
=
false
;
selectUndeterminedTextLanguage
=
false
;
disabledTextTrackSelectionFlags
=
0
;
disabledTextTrackSelectionFlags
=
0
;
...
@@ -86,6 +86,14 @@ public class TrackSelectionParameters implements Parcelable {
...
@@ -86,6 +86,14 @@ public class TrackSelectionParameters implements Parcelable {
* @return This builder.
* @return This builder.
*/
*/
public
Builder
setPreferredAudioLanguage
(
@Nullable
String
preferredAudioLanguage
)
{
public
Builder
setPreferredAudioLanguage
(
@Nullable
String
preferredAudioLanguage
)
{
if
(
preferredAudioLanguage
==
null
)
{
return
setPreferredAudioLanguage
(
new
String
[
0
]);
}
else
{
return
setPreferredAudioLanguage
(
new
String
[]
{
preferredAudioLanguage
});
}
}
public
Builder
setPreferredAudioLanguage
(
String
[]
preferredAudioLanguage
)
{
this
.
preferredAudioLanguage
=
preferredAudioLanguage
;
this
.
preferredAudioLanguage
=
preferredAudioLanguage
;
return
this
;
return
this
;
}
}
...
@@ -115,6 +123,14 @@ public class TrackSelectionParameters implements Parcelable {
...
@@ -115,6 +123,14 @@ public class TrackSelectionParameters implements Parcelable {
* @return This builder.
* @return This builder.
*/
*/
public
Builder
setPreferredTextLanguage
(
@Nullable
String
preferredTextLanguage
)
{
public
Builder
setPreferredTextLanguage
(
@Nullable
String
preferredTextLanguage
)
{
if
(
preferredTextLanguage
==
null
)
{
return
setPreferredTextLanguage
(
new
String
[
0
]);
}
else
{
return
setPreferredTextLanguage
(
new
String
[]{
preferredTextLanguage
});
}
}
public
Builder
setPreferredTextLanguage
(
String
[]
preferredTextLanguage
)
{
this
.
preferredTextLanguage
=
preferredTextLanguage
;
this
.
preferredTextLanguage
=
preferredTextLanguage
;
return
this
;
return
this
;
}
}
...
@@ -185,7 +201,7 @@ public class TrackSelectionParameters implements Parcelable {
...
@@ -185,7 +201,7 @@ public class TrackSelectionParameters implements Parcelable {
preferredTextRoleFlags
=
C
.
ROLE_FLAG_CAPTION
|
C
.
ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND
;
preferredTextRoleFlags
=
C
.
ROLE_FLAG_CAPTION
|
C
.
ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND
;
Locale
preferredLocale
=
captioningManager
.
getLocale
();
Locale
preferredLocale
=
captioningManager
.
getLocale
();
if
(
preferredLocale
!=
null
)
{
if
(
preferredLocale
!=
null
)
{
preferredTextLanguage
=
Util
.
getLocaleLanguageTag
(
preferredLocale
)
;
preferredTextLanguage
=
new
String
[]
{
Util
.
getLocaleLanguageTag
(
preferredLocale
)
}
;
}
}
}
}
}
}
...
@@ -222,13 +238,13 @@ public class TrackSelectionParameters implements Parcelable {
...
@@ -222,13 +238,13 @@ public class TrackSelectionParameters implements Parcelable {
* {@code null} selects the default track, or the first track if there's no default. The default
* {@code null} selects the default track, or the first track if there's no default. The default
* value is {@code null}.
* value is {@code null}.
*/
*/
@Nullable
public
final
String
preferredAudioLanguage
;
public
final
String
[]
preferredAudioLanguage
;
/**
/**
* The preferred language for text tracks as an IETF BCP 47 conformant tag. {@code null} selects
* The preferred language for text tracks as an IETF BCP 47 conformant tag. {@code null} selects
* the default track if there is one, or no track otherwise. The default value is {@code null}, or
* the default track if there is one, or no track otherwise. The default value is {@code null}, or
* the language of the accessibility {@link CaptioningManager} if enabled.
* the language of the accessibility {@link CaptioningManager} if enabled.
*/
*/
@Nullable
public
final
String
preferredTextLanguage
;
public
final
String
[]
preferredTextLanguage
;
/**
/**
* The preferred {@link C.RoleFlags} for text tracks. {@code 0} selects the default track if there
* The preferred {@link C.RoleFlags} for text tracks. {@code 0} selects the default track if there
* is one, or no track otherwise. The default value is {@code 0}, or {@link C#ROLE_FLAG_SUBTITLE}
* is one, or no track otherwise. The default value is {@code 0}, or {@link C#ROLE_FLAG_SUBTITLE}
...
@@ -249,23 +265,37 @@ public class TrackSelectionParameters implements Parcelable {
...
@@ -249,23 +265,37 @@ public class TrackSelectionParameters implements Parcelable {
@C
.
SelectionFlags
public
final
int
disabledTextTrackSelectionFlags
;
@C
.
SelectionFlags
public
final
int
disabledTextTrackSelectionFlags
;
/* package */
TrackSelectionParameters
(
/* package */
TrackSelectionParameters
(
@Nullable
String
preferredAudioLanguage
,
String
[]
preferredAudioLanguage
,
@Nullable
String
preferredTextLanguage
,
String
[]
preferredTextLanguage
,
@C
.
RoleFlags
int
preferredTextRoleFlags
,
@C
.
RoleFlags
int
preferredTextRoleFlags
,
boolean
selectUndeterminedTextLanguage
,
boolean
selectUndeterminedTextLanguage
,
@C
.
SelectionFlags
int
disabledTextTrackSelectionFlags
)
{
@C
.
SelectionFlags
int
disabledTextTrackSelectionFlags
)
{
// Audio
// Audio
this
.
preferredAudioLanguage
=
Util
.
normalizeLanguageCode
(
preferredAudioLanguage
);
this
.
preferredAudioLanguage
=
new
String
[
preferredAudioLanguage
.
length
];
for
(
int
i
=
0
;
i
<
preferredAudioLanguage
.
length
;
i
++)
{
this
.
preferredAudioLanguage
[
i
]
=
Util
.
normalizeLanguageCode
(
preferredAudioLanguage
[
i
]);
}
// Text
// Text
this
.
preferredTextLanguage
=
Util
.
normalizeLanguageCode
(
preferredTextLanguage
);
this
.
preferredTextLanguage
=
new
String
[
preferredAudioLanguage
.
length
];
for
(
int
i
=
0
;
i
<
preferredTextLanguage
.
length
;
i
++)
{
this
.
preferredTextLanguage
[
i
]
=
Util
.
normalizeLanguageCode
(
preferredTextLanguage
[
i
]);
}
this
.
preferredTextRoleFlags
=
preferredTextRoleFlags
;
this
.
preferredTextRoleFlags
=
preferredTextRoleFlags
;
this
.
selectUndeterminedTextLanguage
=
selectUndeterminedTextLanguage
;
this
.
selectUndeterminedTextLanguage
=
selectUndeterminedTextLanguage
;
this
.
disabledTextTrackSelectionFlags
=
disabledTextTrackSelectionFlags
;
this
.
disabledTextTrackSelectionFlags
=
disabledTextTrackSelectionFlags
;
}
}
/* package */
TrackSelectionParameters
(
Parcel
in
)
{
/* package */
TrackSelectionParameters
(
Parcel
in
)
{
this
.
preferredAudioLanguage
=
in
.
readString
();
int
preferredAudioLanguageSize
=
in
.
readInt
();
this
.
preferredTextLanguage
=
in
.
readString
();
this
.
preferredAudioLanguage
=
new
String
[
preferredAudioLanguageSize
];
for
(
int
i
=
0
;
i
<
preferredAudioLanguageSize
;
i
++)
{
preferredAudioLanguage
[
i
]
=
in
.
readString
();
}
int
preferredTextLanguageSize
=
in
.
readInt
();
this
.
preferredTextLanguage
=
new
String
[
preferredTextLanguageSize
];
for
(
int
i
=
0
;
i
<
preferredTextLanguageSize
;
i
++)
{
preferredTextLanguage
[
i
]
=
in
.
readString
();
}
this
.
preferredTextRoleFlags
=
in
.
readInt
();
this
.
preferredTextRoleFlags
=
in
.
readInt
();
this
.
selectUndeterminedTextLanguage
=
Util
.
readBoolean
(
in
);
this
.
selectUndeterminedTextLanguage
=
Util
.
readBoolean
(
in
);
this
.
disabledTextTrackSelectionFlags
=
in
.
readInt
();
this
.
disabledTextTrackSelectionFlags
=
in
.
readInt
();
...
@@ -286,8 +316,8 @@ public class TrackSelectionParameters implements Parcelable {
...
@@ -286,8 +316,8 @@ public class TrackSelectionParameters implements Parcelable {
return
false
;
return
false
;
}
}
TrackSelectionParameters
other
=
(
TrackSelectionParameters
)
obj
;
TrackSelectionParameters
other
=
(
TrackSelectionParameters
)
obj
;
return
TextUtil
s
.
equals
(
preferredAudioLanguage
,
other
.
preferredAudioLanguage
)
return
Array
s
.
equals
(
preferredAudioLanguage
,
other
.
preferredAudioLanguage
)
&&
TextUtil
s
.
equals
(
preferredTextLanguage
,
other
.
preferredTextLanguage
)
&&
Array
s
.
equals
(
preferredTextLanguage
,
other
.
preferredTextLanguage
)
&&
preferredTextRoleFlags
==
other
.
preferredTextRoleFlags
&&
preferredTextRoleFlags
==
other
.
preferredTextRoleFlags
&&
selectUndeterminedTextLanguage
==
other
.
selectUndeterminedTextLanguage
&&
selectUndeterminedTextLanguage
==
other
.
selectUndeterminedTextLanguage
&&
disabledTextTrackSelectionFlags
==
other
.
disabledTextTrackSelectionFlags
;
&&
disabledTextTrackSelectionFlags
==
other
.
disabledTextTrackSelectionFlags
;
...
@@ -296,8 +326,8 @@ public class TrackSelectionParameters implements Parcelable {
...
@@ -296,8 +326,8 @@ public class TrackSelectionParameters implements Parcelable {
@Override
@Override
public
int
hashCode
()
{
public
int
hashCode
()
{
int
result
=
1
;
int
result
=
1
;
result
=
31
*
result
+
(
preferredAudioLanguage
==
null
?
0
:
preferredAudioLanguage
.
hashCode
()
);
result
=
31
*
result
+
Arrays
.
hashCode
(
preferredAudioLanguage
);
result
=
31
*
result
+
(
preferredTextLanguage
==
null
?
0
:
preferredTextLanguage
.
hashCode
()
);
result
=
31
*
result
+
Arrays
.
hashCode
(
preferredTextLanguage
);
result
=
31
*
result
+
preferredTextRoleFlags
;
result
=
31
*
result
+
preferredTextRoleFlags
;
result
=
31
*
result
+
(
selectUndeterminedTextLanguage
?
1
:
0
);
result
=
31
*
result
+
(
selectUndeterminedTextLanguage
?
1
:
0
);
result
=
31
*
result
+
disabledTextTrackSelectionFlags
;
result
=
31
*
result
+
disabledTextTrackSelectionFlags
;
...
@@ -313,8 +343,14 @@ public class TrackSelectionParameters implements Parcelable {
...
@@ -313,8 +343,14 @@ public class TrackSelectionParameters implements Parcelable {
@Override
@Override
public
void
writeToParcel
(
Parcel
dest
,
int
flags
)
{
public
void
writeToParcel
(
Parcel
dest
,
int
flags
)
{
dest
.
writeString
(
preferredAudioLanguage
);
dest
.
writeInt
(
preferredAudioLanguage
.
length
);
dest
.
writeString
(
preferredTextLanguage
);
for
(
String
s
:
preferredAudioLanguage
)
{
dest
.
writeString
(
s
);
}
dest
.
writeInt
(
preferredTextLanguage
.
length
);
for
(
String
s
:
preferredTextLanguage
)
{
dest
.
writeString
(
s
);
}
dest
.
writeInt
(
preferredTextRoleFlags
);
dest
.
writeInt
(
preferredTextRoleFlags
);
Util
.
writeBoolean
(
dest
,
selectUndeterminedTextLanguage
);
Util
.
writeBoolean
(
dest
,
selectUndeterminedTextLanguage
);
dest
.
writeInt
(
disabledTextTrackSelectionFlags
);
dest
.
writeInt
(
disabledTextTrackSelectionFlags
);
...
...
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