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
0f364dff
authored
Jul 04, 2019
by
olly
Committed by
Toni
Jul 05, 2019
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Remove FlacExtractor from nullness blacklist
PiperOrigin-RevId: 256526365
parent
948d69b7
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
11 deletions
extensions/flac/build.gradle
extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java
extensions/flac/build.gradle
View file @
0f364dff
...
...
@@ -40,6 +40,7 @@ android {
dependencies
{
implementation
project
(
modulePrefix
+
'library-core'
)
implementation
'androidx.annotation:annotation:1.0.2'
compileOnly
'org.checkerframework:checker-qual:'
+
checkerframeworkVersion
androidTestImplementation
project
(
modulePrefix
+
'testutils'
)
androidTestImplementation
'androidx.test:runner:'
+
androidXTestVersion
testImplementation
project
(
modulePrefix
+
'testutils-robolectric'
)
...
...
extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java
View file @
0f364dff
...
...
@@ -43,6 +43,9 @@ import java.lang.annotation.Retention;
import
java.lang.annotation.RetentionPolicy
;
import
java.nio.ByteBuffer
;
import
java.util.Arrays
;
import
org.checkerframework.checker.nullness.qual.EnsuresNonNull
;
import
org.checkerframework.checker.nullness.qual.MonotonicNonNull
;
import
org.checkerframework.checker.nullness.qual.RequiresNonNull
;
/**
* Facilitates the extraction of data from the FLAC container format.
...
...
@@ -75,17 +78,17 @@ public final class FlacExtractor implements Extractor {
*/
private
static
final
byte
[]
FLAC_SIGNATURE
=
{
'f'
,
'L'
,
'a'
,
'C'
,
0
,
0
,
0
,
0x22
};
private
final
ParsableByteArray
outputBuffer
;
private
final
Id3Peeker
id3Peeker
;
private
final
boolean
id3MetadataDisabled
;
@Nullable
private
FlacDecoderJni
decoderJni
;
@Nullable
private
ExtractorOutput
extractorOutput
;
@Nullable
private
TrackOutput
trackOutput
;
private
@MonotonicNonNull
ExtractorOutput
extractorOutput
;
private
@MonotonicNonNull
TrackOutput
trackOutput
;
private
boolean
streamInfoDecoded
;
@Nullable
private
FlacStreamInfo
streamInfo
;
@Nullable
private
ParsableByteArray
outputBuffer
;
@Nullable
private
OutputFrameHolder
outputFrameHolder
;
private
@MonotonicNonNull
FlacStreamInfo
streamInfo
;
private
@MonotonicNonNull
OutputFrameHolder
outputFrameHolder
;
@Nullable
private
Metadata
id3Metadata
;
@Nullable
private
FlacBinarySearchSeeker
binarySearchSeeker
;
...
...
@@ -101,6 +104,7 @@ public final class FlacExtractor implements Extractor {
* @param flags Flags that control the extractor's behavior.
*/
public
FlacExtractor
(
int
flags
)
{
outputBuffer
=
new
ParsableByteArray
();
id3Peeker
=
new
Id3Peeker
();
id3MetadataDisabled
=
(
flags
&
FLAG_DISABLE_ID3_METADATA
)
!=
0
;
}
...
...
@@ -132,12 +136,12 @@ public final class FlacExtractor implements Extractor {
id3Metadata
=
peekId3Data
(
input
);
}
decoderJni
.
setData
(
input
);
FlacDecoderJni
decoderJni
=
initDecoderJni
(
input
);
try
{
decodeStreamInfo
(
input
);
if
(
binarySearchSeeker
!=
null
&&
binarySearchSeeker
.
isSeeking
())
{
return
handlePendingSeek
(
input
,
seekPosition
);
return
handlePendingSeek
(
input
,
seekPosition
,
outputBuffer
,
outputFrameHolder
,
trackOutput
);
}
ByteBuffer
outputByteBuffer
=
outputFrameHolder
.
byteBuffer
;
...
...
@@ -194,6 +198,17 @@ public final class FlacExtractor implements Extractor {
return
id3Peeker
.
peekId3Data
(
input
,
id3FramePredicate
);
}
@EnsuresNonNull
({
"decoderJni"
,
"extractorOutput"
,
"trackOutput"
})
// Ensures initialized.
@SuppressWarnings
({
"contracts.postcondition.not.satisfied"
})
private
FlacDecoderJni
initDecoderJni
(
ExtractorInput
input
)
{
FlacDecoderJni
decoderJni
=
Assertions
.
checkNotNull
(
this
.
decoderJni
);
decoderJni
.
setData
(
input
);
return
decoderJni
;
}
@RequiresNonNull
({
"decoderJni"
,
"extractorOutput"
,
"trackOutput"
})
// Requires initialized.
@EnsuresNonNull
({
"streamInfo"
,
"outputFrameHolder"
})
// Ensures StreamInfo decoded.
@SuppressWarnings
({
"contracts.postcondition.not.satisfied"
})
private
void
decodeStreamInfo
(
ExtractorInput
input
)
throws
InterruptedException
,
IOException
{
if
(
streamInfoDecoded
)
{
return
;
...
...
@@ -214,14 +229,19 @@ public final class FlacExtractor implements Extractor {
binarySearchSeeker
=
outputSeekMap
(
decoderJni
,
streamInfo
,
input
.
getLength
(),
extractorOutput
);
outputFormat
(
streamInfo
,
id3MetadataDisabled
?
null
:
id3Metadata
,
trackOutput
);
outputBuffer
=
new
ParsableByteArray
(
streamInfo
.
maxDecodedFrameSize
());
outputBuffer
.
reset
(
streamInfo
.
maxDecodedFrameSize
());
outputFrameHolder
=
new
OutputFrameHolder
(
ByteBuffer
.
wrap
(
outputBuffer
.
data
));
}
}
private
int
handlePendingSeek
(
ExtractorInput
input
,
PositionHolder
seekPosition
)
@RequiresNonNull
(
"binarySearchSeeker"
)
private
int
handlePendingSeek
(
ExtractorInput
input
,
PositionHolder
seekPosition
,
ParsableByteArray
outputBuffer
,
OutputFrameHolder
outputFrameHolder
,
TrackOutput
trackOutput
)
throws
InterruptedException
,
IOException
{
Assertions
.
checkNotNull
(
binarySearchSeeker
);
int
seekResult
=
binarySearchSeeker
.
handlePendingSeek
(
input
,
seekPosition
,
outputFrameHolder
);
ByteBuffer
outputByteBuffer
=
outputFrameHolder
.
byteBuffer
;
if
(
seekResult
==
RESULT_CONTINUE
&&
outputByteBuffer
.
limit
()
>
0
)
{
...
...
@@ -270,7 +290,7 @@ public final class FlacExtractor implements Extractor {
}
private
static
void
outputFormat
(
FlacStreamInfo
streamInfo
,
Metadata
metadata
,
TrackOutput
output
)
{
FlacStreamInfo
streamInfo
,
@Nullable
Metadata
metadata
,
TrackOutput
output
)
{
Format
mediaFormat
=
Format
.
createAudioSampleFormat
(
/* id= */
null
,
...
...
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