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
927105ed
authored
Mar 16, 2023
by
tianyifeng
Committed by
microkatz
Mar 21, 2023
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Intercept audio capabilities change in `DefaultAudioSink`
PiperOrigin-RevId: 517144710
parent
3c8f5cf7
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
47 additions
and
9 deletions
library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java
View file @
927105ed
...
@@ -24,7 +24,6 @@ import android.os.Handler;
...
@@ -24,7 +24,6 @@ import android.os.Handler;
import
android.os.Looper
;
import
android.os.Looper
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.audio.AudioCapabilities
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.AudioSink
;
import
com.google.android.exoplayer2.audio.AudioSink
;
import
com.google.android.exoplayer2.audio.DefaultAudioSink
;
import
com.google.android.exoplayer2.audio.DefaultAudioSink
;
...
@@ -649,8 +648,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -649,8 +648,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
boolean
enableFloatOutput
,
boolean
enableFloatOutput
,
boolean
enableAudioTrackPlaybackParams
,
boolean
enableAudioTrackPlaybackParams
,
boolean
enableOffload
)
{
boolean
enableOffload
)
{
return
new
DefaultAudioSink
.
Builder
()
return
new
DefaultAudioSink
.
Builder
(
context
)
.
setAudioCapabilities
(
AudioCapabilities
.
getCapabilities
(
context
))
.
setEnableFloatOutput
(
enableFloatOutput
)
.
setEnableFloatOutput
(
enableFloatOutput
)
.
setEnableAudioTrackPlaybackParams
(
enableAudioTrackPlaybackParams
)
.
setEnableAudioTrackPlaybackParams
(
enableAudioTrackPlaybackParams
)
.
setOffloadMode
(
.
setOffloadMode
(
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
View file @
927105ed
...
@@ -24,6 +24,7 @@ import static java.lang.Math.min;
...
@@ -24,6 +24,7 @@ import static java.lang.Math.min;
import
static
java
.
lang
.
annotation
.
ElementType
.
TYPE_USE
;
import
static
java
.
lang
.
annotation
.
ElementType
.
TYPE_USE
;
import
android.annotation.SuppressLint
;
import
android.annotation.SuppressLint
;
import
android.content.Context
;
import
android.media.AudioDeviceInfo
;
import
android.media.AudioDeviceInfo
;
import
android.media.AudioFormat
;
import
android.media.AudioFormat
;
import
android.media.AudioManager
;
import
android.media.AudioManager
;
...
@@ -214,6 +215,7 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -214,6 +215,7 @@ public final class DefaultAudioSink implements AudioSink {
/** A builder to create {@link DefaultAudioSink} instances. */
/** A builder to create {@link DefaultAudioSink} instances. */
public
static
final
class
Builder
{
public
static
final
class
Builder
{
@Nullable
private
final
Context
context
;
private
AudioCapabilities
audioCapabilities
;
private
AudioCapabilities
audioCapabilities
;
@Nullable
private
com
.
google
.
android
.
exoplayer2
.
audio
.
AudioProcessorChain
audioProcessorChain
;
@Nullable
private
com
.
google
.
android
.
exoplayer2
.
audio
.
AudioProcessorChain
audioProcessorChain
;
private
boolean
enableFloatOutput
;
private
boolean
enableFloatOutput
;
...
@@ -222,19 +224,34 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -222,19 +224,34 @@ public final class DefaultAudioSink implements AudioSink {
AudioTrackBufferSizeProvider
audioTrackBufferSizeProvider
;
AudioTrackBufferSizeProvider
audioTrackBufferSizeProvider
;
@Nullable
AudioOffloadListener
audioOffloadListener
;
@Nullable
AudioOffloadListener
audioOffloadListener
;
/** Creates a new builder. */
/**
* @deprecated Use {@link #Builder(Context)} instead.
*/
@Deprecated
public
Builder
()
{
public
Builder
()
{
this
(
/* context= */
null
);
}
/**
* Creates a new builder.
*
* @param context The {@link Context}.
*/
public
Builder
(
@Nullable
Context
context
)
{
this
.
context
=
context
;
audioCapabilities
=
DEFAULT_AUDIO_CAPABILITIES
;
audioCapabilities
=
DEFAULT_AUDIO_CAPABILITIES
;
offloadMode
=
OFFLOAD_MODE_DISABLED
;
offloadMode
=
OFFLOAD_MODE_DISABLED
;
audioTrackBufferSizeProvider
=
AudioTrackBufferSizeProvider
.
DEFAULT
;
audioTrackBufferSizeProvider
=
AudioTrackBufferSizeProvider
.
DEFAULT
;
}
}
/**
/**
* Sets audio capabilities for playback on this device. May be {@code null} if the default
* @deprecated The {@linkplain AudioCapabilities audio capabilities} set to the {@linkplain
* capabilities (no encoded audio passthrough support) should be assumed.
* Builder builder} will be effective for the {@link DefaultAudioSink} only in the absence
*
* of {@linkplain Context context}. If the {@code Context} is {@code null} and the {@code
* <p>Default is {@link AudioCapabilities#DEFAULT_AUDIO_CAPABILITIES}.
* audioCapabilities} is not set to the {@code Builder}, the default capabilities (no
* encoded audio passthrough support) should be assumed.
*/
*/
@Deprecated
@CanIgnoreReturnValue
@CanIgnoreReturnValue
public
Builder
setAudioCapabilities
(
AudioCapabilities
audioCapabilities
)
{
public
Builder
setAudioCapabilities
(
AudioCapabilities
audioCapabilities
)
{
checkNotNull
(
audioCapabilities
);
checkNotNull
(
audioCapabilities
);
...
@@ -470,6 +487,7 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -470,6 +487,7 @@ public final class DefaultAudioSink implements AudioSink {
private
final
PendingExceptionHolder
<
WriteException
>
writeExceptionPendingExceptionHolder
;
private
final
PendingExceptionHolder
<
WriteException
>
writeExceptionPendingExceptionHolder
;
private
final
AudioTrackBufferSizeProvider
audioTrackBufferSizeProvider
;
private
final
AudioTrackBufferSizeProvider
audioTrackBufferSizeProvider
;
@Nullable
private
final
AudioOffloadListener
audioOffloadListener
;
@Nullable
private
final
AudioOffloadListener
audioOffloadListener
;
@Nullable
private
final
AudioCapabilitiesReceiver
audioCapabilitiesReceiver
;
@Nullable
private
PlayerId
playerId
;
@Nullable
private
PlayerId
playerId
;
@Nullable
private
Listener
listener
;
@Nullable
private
Listener
listener
;
...
@@ -519,7 +537,14 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -519,7 +537,14 @@ public final class DefaultAudioSink implements AudioSink {
@RequiresNonNull
(
"#1.audioProcessorChain"
)
@RequiresNonNull
(
"#1.audioProcessorChain"
)
private
DefaultAudioSink
(
Builder
builder
)
{
private
DefaultAudioSink
(
Builder
builder
)
{
audioCapabilities
=
builder
.
audioCapabilities
;
audioCapabilitiesReceiver
=
builder
.
context
!=
null
?
new
AudioCapabilitiesReceiver
(
builder
.
context
,
this
::
onAudioCapabilitiesChanged
)
:
null
;
audioCapabilities
=
audioCapabilitiesReceiver
!=
null
?
audioCapabilitiesReceiver
.
register
()
:
builder
.
audioCapabilities
;
audioProcessorChain
=
builder
.
audioProcessorChain
;
audioProcessorChain
=
builder
.
audioProcessorChain
;
enableFloatOutput
=
Util
.
SDK_INT
>=
21
&&
builder
.
enableFloatOutput
;
enableFloatOutput
=
Util
.
SDK_INT
>=
21
&&
builder
.
enableFloatOutput
;
preferAudioTrackPlaybackParams
=
Util
.
SDK_INT
>=
23
&&
builder
.
enableAudioTrackPlaybackParams
;
preferAudioTrackPlaybackParams
=
Util
.
SDK_INT
>=
23
&&
builder
.
enableAudioTrackPlaybackParams
;
...
@@ -1418,6 +1443,21 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -1418,6 +1443,21 @@ public final class DefaultAudioSink implements AudioSink {
offloadDisabledUntilNextConfiguration
=
false
;
offloadDisabledUntilNextConfiguration
=
false
;
}
}
@Override
public
void
release
()
{
if
(
audioCapabilitiesReceiver
!=
null
)
{
audioCapabilitiesReceiver
.
unregister
();
}
}
// AudioCapabilitiesReceiver.Listener implementation.
public
void
onAudioCapabilitiesChanged
(
AudioCapabilities
audioCapabilities
)
{
if
(!
audioCapabilities
.
equals
(
this
.
audioCapabilities
))
{
this
.
audioCapabilities
=
audioCapabilities
;
}
}
// Internal methods.
// Internal methods.
private
void
resetSinkStateForFlush
()
{
private
void
resetSinkStateForFlush
()
{
...
...
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