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
070aab72
authored
Sep 10, 2019
by
wingyippp
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
return SeekPoints directly for flacGetSeekPoints JNI method. update the proguard-rules.txt
parent
d9529479
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
35 additions
and
23 deletions
extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacDecoderJni.java
extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java
extensions/flac/src/main/jni/flac_jni.cc
extensions/flac/src/main/jni/flac_parser.cc
extensions/flac/src/main/jni/include/flac_parser.h
library/core/proguard-rules.txt
extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacDecoderJni.java
View file @
070aab72
...
@@ -19,6 +19,7 @@ import androidx.annotation.Nullable;
...
@@ -19,6 +19,7 @@ import androidx.annotation.Nullable;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.ParserException
;
import
com.google.android.exoplayer2.ParserException
;
import
com.google.android.exoplayer2.extractor.ExtractorInput
;
import
com.google.android.exoplayer2.extractor.ExtractorInput
;
import
com.google.android.exoplayer2.extractor.SeekMap
;
import
com.google.android.exoplayer2.util.FlacStreamMetadata
;
import
com.google.android.exoplayer2.util.FlacStreamMetadata
;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.android.exoplayer2.util.Util
;
import
java.io.IOException
;
import
java.io.IOException
;
...
@@ -220,11 +221,12 @@ import java.nio.ByteBuffer;
...
@@ -220,11 +221,12 @@ import java.nio.ByteBuffer;
* stream.
* stream.
*
*
* @param timeUs A seek position in microseconds.
* @param timeUs A seek position in microseconds.
* @return The corresponding position (byte offset) in the flac stream or -1 if the stream doesn't
* @return The corresponding SeekPoints in the flac seek table or
* {@link com.google.android.exoplayer2.extractor.SeekPoint#position} set -1 if the stream doesn't
* have a seek table.
* have a seek table.
*/
*/
public
long
[]
getSeekPosition
(
long
timeUs
)
{
public
SeekMap
.
SeekPoints
getSeekPoints
(
long
timeUs
)
{
return
flacGetSeekPo
sition
(
nativeDecoderContext
,
timeUs
);
return
flacGetSeekPo
ints
(
nativeDecoderContext
,
timeUs
);
}
}
public
String
getStateString
()
{
public
String
getStateString
()
{
...
@@ -283,7 +285,7 @@ import java.nio.ByteBuffer;
...
@@ -283,7 +285,7 @@ import java.nio.ByteBuffer;
private
native
long
flacGetNextFrameFirstSampleIndex
(
long
context
);
private
native
long
flacGetNextFrameFirstSampleIndex
(
long
context
);
private
native
long
[]
flacGetSeekPosition
(
long
context
,
long
timeUs
);
private
native
SeekMap
.
SeekPoints
flacGetSeekPoints
(
long
context
,
long
timeUs
);
private
native
String
flacGetStateString
(
long
context
);
private
native
String
flacGetStateString
(
long
context
);
...
...
extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java
View file @
070aab72
...
@@ -29,7 +29,6 @@ import com.google.android.exoplayer2.extractor.ExtractorsFactory;
...
@@ -29,7 +29,6 @@ import com.google.android.exoplayer2.extractor.ExtractorsFactory;
import
com.google.android.exoplayer2.extractor.Id3Peeker
;
import
com.google.android.exoplayer2.extractor.Id3Peeker
;
import
com.google.android.exoplayer2.extractor.PositionHolder
;
import
com.google.android.exoplayer2.extractor.PositionHolder
;
import
com.google.android.exoplayer2.extractor.SeekMap
;
import
com.google.android.exoplayer2.extractor.SeekMap
;
import
com.google.android.exoplayer2.extractor.SeekPoint
;
import
com.google.android.exoplayer2.extractor.TrackOutput
;
import
com.google.android.exoplayer2.extractor.TrackOutput
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.id3.Id3Decoder
;
import
com.google.android.exoplayer2.metadata.id3.Id3Decoder
;
...
@@ -276,8 +275,8 @@ public final class FlacExtractor implements Extractor {
...
@@ -276,8 +275,8 @@ public final class FlacExtractor implements Extractor {
FlacStreamMetadata
streamMetadata
,
FlacStreamMetadata
streamMetadata
,
long
streamLength
,
long
streamLength
,
ExtractorOutput
output
)
{
ExtractorOutput
output
)
{
long
[]
result
=
decoderJni
.
getSeekPosition
(
/* timeUs= */
0
);
SeekMap
.
SeekPoints
seekPoints
=
decoderJni
.
getSeekPoints
(
/* timeUs= */
0
);
boolean
hasSeekTable
=
result
.
length
==
4
&&
result
[
1
]
!=
-
1
&&
result
[
3
]
!=
-
1
;
boolean
hasSeekTable
=
seekPoints
.
first
.
position
!=
-
1
&&
seekPoints
.
second
.
position
!=
-
1
;
FlacBinarySearchSeeker
binarySearchSeeker
=
null
;
FlacBinarySearchSeeker
binarySearchSeeker
=
null
;
SeekMap
seekMap
;
SeekMap
seekMap
;
if
(
hasSeekTable
)
{
if
(
hasSeekTable
)
{
...
@@ -342,12 +341,7 @@ public final class FlacExtractor implements Extractor {
...
@@ -342,12 +341,7 @@ public final class FlacExtractor implements Extractor {
@Override
@Override
public
SeekPoints
getSeekPoints
(
long
timeUs
)
{
public
SeekPoints
getSeekPoints
(
long
timeUs
)
{
long
[]
result
=
decoderJni
.
getSeekPosition
(
timeUs
);
return
decoderJni
.
getSeekPoints
(
timeUs
);
if
(
result
.
length
==
4
)
{
return
new
SeekPoints
(
new
SeekPoint
(
result
[
0
],
result
[
1
]),
new
SeekPoint
(
result
[
2
],
result
[
3
]));
}
else
{
return
new
SeekPoints
(
new
SeekPoint
(
timeUs
,
decoderJni
.
getDecodePosition
()));
}
}
}
@Override
@Override
...
...
extensions/flac/src/main/jni/flac_jni.cc
View file @
070aab72
...
@@ -200,13 +200,19 @@ DECODER_FUNC(jlong, flacGetNextFrameFirstSampleIndex, jlong jContext) {
...
@@ -200,13 +200,19 @@ DECODER_FUNC(jlong, flacGetNextFrameFirstSampleIndex, jlong jContext) {
return
context
->
parser
->
getNextFrameFirstSampleIndex
();
return
context
->
parser
->
getNextFrameFirstSampleIndex
();
}
}
DECODER_FUNC
(
j
longArray
,
flacGetSeekPosition
,
jlong
jContext
,
jlong
timeUs
)
{
DECODER_FUNC
(
j
object
,
flacGetSeekPoints
,
jlong
jContext
,
jlong
timeUs
)
{
Context
*
context
=
reinterpret_cast
<
Context
*>
(
jContext
);
Context
*
context
=
reinterpret_cast
<
Context
*>
(
jContext
);
int64_t
*
result
=
context
->
parser
->
getSeekPosition
(
timeUs
);
int64_t
*
result
=
context
->
parser
->
getSeekPositions
(
timeUs
);
const
jlong
resultJLong
[
4
]
=
{
result
[
0
],
result
[
1
],
result
[
2
],
result
[
3
]};
jclass
seekPointClass
=
env
->
FindClass
(
"com/google/android/exoplayer2/extractor/SeekPoint"
);
jlongArray
resultArray
=
env
->
NewLongArray
(
4
);
jclass
seekPointsClass
=
env
->
FindClass
(
"com/google/android/exoplayer2/extractor/SeekMap$SeekPoints"
);
env
->
SetLongArrayRegion
(
resultArray
,
0
,
4
,
resultJLong
);
jmethodID
cidSeekPoint
=
env
->
GetMethodID
(
seekPointClass
,
"<init>"
,
"(JJ)V"
);
return
resultArray
;
jmethodID
cidSeekPoints
=
env
->
GetMethodID
(
seekPointsClass
,
"<init>"
,
"(Lcom/google/android/exoplayer2/extractor/SeekPoint;Lcom/google/android/exoplayer2/extractor/SeekPoint;)V"
);
jobject
jSeekPointFirst
=
env
->
NewObject
(
seekPointClass
,
cidSeekPoint
,
(
jlong
)
result
[
0
],
(
jlong
)
result
[
1
]);
jobject
jSeekPointSecond
=
env
->
NewObject
(
seekPointClass
,
cidSeekPoint
,
(
jlong
)
result
[
2
],
(
jlong
)
result
[
3
]);
jobject
jSeekPoints
=
env
->
NewObject
(
seekPointsClass
,
cidSeekPoints
,
jSeekPointFirst
,
jSeekPointSecond
);
env
->
DeleteLocalRef
(
jSeekPointFirst
);
env
->
DeleteLocalRef
(
jSeekPointSecond
);
return
jSeekPoints
;
}
}
DECODER_FUNC
(
jstring
,
flacGetStateString
,
jlong
jContext
)
{
DECODER_FUNC
(
jstring
,
flacGetStateString
,
jlong
jContext
)
{
...
...
extensions/flac/src/main/jni/flac_parser.cc
View file @
070aab72
...
@@ -438,7 +438,7 @@ size_t FLACParser::readBuffer(void *output, size_t output_size) {
...
@@ -438,7 +438,7 @@ size_t FLACParser::readBuffer(void *output, size_t output_size) {
return
bufferSize
;
return
bufferSize
;
}
}
int64_t
*
FLACParser
::
getSeekPosition
(
int64_t
timeUs
)
{
int64_t
*
FLACParser
::
getSeekPosition
s
(
int64_t
timeUs
)
{
int64_t
*
result
=
new
int64_t
[
4
];
int64_t
*
result
=
new
int64_t
[
4
];
memset
(
result
,
-
1
,
sizeof
(
result
));
memset
(
result
,
-
1
,
sizeof
(
result
));
if
(
!
mSeekTable
)
{
if
(
!
mSeekTable
)
{
...
@@ -466,9 +466,9 @@ int64_t* FLACParser::getSeekPosition(int64_t timeUs) {
...
@@ -466,9 +466,9 @@ int64_t* FLACParser::getSeekPosition(int64_t timeUs) {
return
result
;
return
result
;
}
}
}
}
result
[
0
]
=
timeUs
;
result
[
0
]
=
0
;
result
[
1
]
=
firstFrameOffset
;
result
[
1
]
=
firstFrameOffset
;
result
[
2
]
=
timeUs
;
result
[
2
]
=
0
;
result
[
3
]
=
firstFrameOffset
;
result
[
3
]
=
firstFrameOffset
;
return
result
;
return
result
;
}
}
extensions/flac/src/main/jni/include/flac_parser.h
View file @
070aab72
...
@@ -84,7 +84,7 @@ class FLACParser {
...
@@ -84,7 +84,7 @@ class FLACParser {
bool
decodeMetadata
();
bool
decodeMetadata
();
size_t
readBuffer
(
void
*
output
,
size_t
output_size
);
size_t
readBuffer
(
void
*
output
,
size_t
output_size
);
int64_t
*
getSeekPosition
(
int64_t
timeUs
);
int64_t
*
getSeekPosition
s
(
int64_t
timeUs
);
void
flush
()
{
void
flush
()
{
reset
(
mCurrentPos
);
reset
(
mCurrentPos
);
...
...
library/core/proguard-rules.txt
View file @
070aab72
...
@@ -58,6 +58,16 @@
...
@@ -58,6 +58,16 @@
<init>(com.google.android.exoplayer2.upstream.DataSource$Factory);
<init>(com.google.android.exoplayer2.upstream.DataSource$Factory);
}
}
-dontnote com.google.android.exoplayer2.extractor.SeekPoint
-keepclasseswithmembers class com.google.android.exoplayer2.extractor.SeekPoint {
<init>(long, long);
}
-dontnote com.google.android.exoplayer2.extractor.SeekMap$SeekPoints
-keepclasseswithmembers class com.google.android.exoplayer2.extractor.SeekMap$SeekPoints {
<init>(com.google.android.exoplayer2.extractor.SeekPoint, com.google.android.exoplayer2.extractor.SeekPoint);
}
# Don't warn about checkerframework and Kotlin annotations
# Don't warn about checkerframework and Kotlin annotations
-dontwarn org.checkerframework.**
-dontwarn org.checkerframework.**
-dontwarn kotlin.annotations.jvm.**
-dontwarn kotlin.annotations.jvm.**
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