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
f1cf3d98
authored
Nov 26, 2020
by
samrobinson
Committed by
Andrew Lewis
Nov 27, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add Format field to AudioSink.WriteException.
#exofixit PiperOrigin-RevId: 344414313
parent
1cdf5e79
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
19 additions
and
10 deletions
library/core/src/main/java/com/google/android/exoplayer2/audio/AudioSink.java
library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java
library/core/src/test/java/com/google/android/exoplayer2/audio/MediaCodecAudioRendererTest.java
library/core/src/main/java/com/google/android/exoplayer2/audio/AudioSink.java
View file @
f1cf3d98
...
@@ -214,12 +214,21 @@ public interface AudioSink {
...
@@ -214,12 +214,21 @@ public interface AudioSink {
public
final
int
errorCode
;
public
final
int
errorCode
;
/** If the exception can be recovered by recreating the sink. */
/** If the exception can be recovered by recreating the sink. */
public
final
boolean
isRecoverable
;
public
final
boolean
isRecoverable
;
/** The input {@link Format} of the sink when the error occurs. */
public
final
Format
format
;
/** @param errorCode The error value returned from the sink implementation. */
/**
public
WriteException
(
int
errorCode
,
boolean
isRecoverable
)
{
* Creates an instance.
*
* @param errorCode The error value returned from the sink implementation.
* @param format The input format of the sink when the error occurs.
* @param isRecoverable Whether the exception can be recovered by recreating the sink.
*/
public
WriteException
(
int
errorCode
,
Format
format
,
boolean
isRecoverable
)
{
super
(
"AudioTrack write failed: "
+
errorCode
);
super
(
"AudioTrack write failed: "
+
errorCode
);
this
.
isRecoverable
=
isRecoverable
;
this
.
isRecoverable
=
isRecoverable
;
this
.
errorCode
=
errorCode
;
this
.
errorCode
=
errorCode
;
this
.
format
=
format
;
}
}
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java
View file @
f1cf3d98
...
@@ -261,7 +261,7 @@ public abstract class DecoderAudioRenderer<
...
@@ -261,7 +261,7 @@ public abstract class DecoderAudioRenderer<
try
{
try
{
audioSink
.
playToEndOfStream
();
audioSink
.
playToEndOfStream
();
}
catch
(
AudioSink
.
WriteException
e
)
{
}
catch
(
AudioSink
.
WriteException
e
)
{
throw
createRendererException
(
e
,
inputF
ormat
,
e
.
isRecoverable
);
throw
createRendererException
(
e
,
e
.
f
ormat
,
e
.
isRecoverable
);
}
}
return
;
return
;
}
}
...
@@ -307,7 +307,7 @@ public abstract class DecoderAudioRenderer<
...
@@ -307,7 +307,7 @@ public abstract class DecoderAudioRenderer<
}
catch
(
AudioSink
.
InitializationException
e
)
{
}
catch
(
AudioSink
.
InitializationException
e
)
{
throw
createRendererException
(
e
,
e
.
format
,
e
.
isRecoverable
);
throw
createRendererException
(
e
,
e
.
format
,
e
.
isRecoverable
);
}
catch
(
AudioSink
.
WriteException
e
)
{
}
catch
(
AudioSink
.
WriteException
e
)
{
throw
createRendererException
(
e
,
inputF
ormat
,
e
.
isRecoverable
);
throw
createRendererException
(
e
,
e
.
f
ormat
,
e
.
isRecoverable
);
}
}
decoderCounters
.
ensureUpdated
();
decoderCounters
.
ensureUpdated
();
}
}
...
@@ -395,7 +395,7 @@ public abstract class DecoderAudioRenderer<
...
@@ -395,7 +395,7 @@ public abstract class DecoderAudioRenderer<
try
{
try
{
processEndOfStream
();
processEndOfStream
();
}
catch
(
AudioSink
.
WriteException
e
)
{
}
catch
(
AudioSink
.
WriteException
e
)
{
throw
createRendererException
(
e
,
getOutputFormat
(
decoder
)
,
e
.
isRecoverable
);
throw
createRendererException
(
e
,
e
.
format
,
e
.
isRecoverable
);
}
}
}
}
return
false
;
return
false
;
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
View file @
f1cf3d98
...
@@ -952,7 +952,7 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -952,7 +952,7 @@ public final class DefaultAudioSink implements AudioSink {
if
(
isRecoverable
)
{
if
(
isRecoverable
)
{
maybeDisableOffload
();
maybeDisableOffload
();
}
}
WriteException
e
=
new
WriteException
(
error
,
isRecoverable
);
WriteException
e
=
new
WriteException
(
error
,
configuration
.
inputFormat
,
isRecoverable
);
if
(
listener
!=
null
)
{
if
(
listener
!=
null
)
{
listener
.
onAudioSinkError
(
e
);
listener
.
onAudioSinkError
(
e
);
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java
View file @
f1cf3d98
...
@@ -629,9 +629,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -629,9 +629,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
try
{
try
{
audioSink
.
playToEndOfStream
();
audioSink
.
playToEndOfStream
();
}
catch
(
AudioSink
.
WriteException
e
)
{
}
catch
(
AudioSink
.
WriteException
e
)
{
@Nullable
Format
outputFormat
=
getOutputFormat
();
throw
createRendererException
(
e
,
e
.
format
,
e
.
isRecoverable
);
throw
createRendererException
(
e
,
outputFormat
!=
null
?
outputFormat
:
getInputFormat
(),
e
.
isRecoverable
);
}
}
}
}
...
...
library/core/src/test/java/com/google/android/exoplayer2/audio/MediaCodecAudioRendererTest.java
View file @
f1cf3d98
...
@@ -310,7 +310,9 @@ public class MediaCodecAudioRendererTest {
...
@@ -310,7 +310,9 @@ public class MediaCodecAudioRendererTest {
verify
(
audioSink
,
atLeastOnce
()).
setListener
(
listenerCaptor
.
capture
());
verify
(
audioSink
,
atLeastOnce
()).
setListener
(
listenerCaptor
.
capture
());
AudioSink
.
Listener
audioSinkListener
=
listenerCaptor
.
getValue
();
AudioSink
.
Listener
audioSinkListener
=
listenerCaptor
.
getValue
();
Exception
error
=
new
AudioSink
.
WriteException
(
/* errorCode= */
1
,
/* isRecoverable= */
true
);
Exception
error
=
new
AudioSink
.
WriteException
(
/* errorCode= */
1
,
new
Format
.
Builder
().
build
(),
/* isRecoverable= */
true
);
audioSinkListener
.
onAudioSinkError
(
error
);
audioSinkListener
.
onAudioSinkError
(
error
);
shadowOf
(
Looper
.
getMainLooper
()).
idle
();
shadowOf
(
Looper
.
getMainLooper
()).
idle
();
...
...
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