return null if Seek Table is not supported. proguard in flac-extension

This commit is contained in:
wingyippp 2019-10-03 13:50:17 +08:00
parent 070aab7225
commit 03ba1c9a2f
6 changed files with 30 additions and 25 deletions

View File

@ -15,3 +15,13 @@
-keep class com.google.android.exoplayer2.metadata.flac.PictureFrame {
*;
}
-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);
}

View File

@ -221,10 +221,10 @@ import java.nio.ByteBuffer;
* stream.
*
* @param timeUs A seek position in microseconds.
* @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
* @return The corresponding SeekPoints in the flac seek table or null if the stream doesn't
* have a seek table.
*/
@Nullable
public SeekMap.SeekPoints getSeekPoints(long timeUs) {
return flacGetSeekPoints(nativeDecoderContext, timeUs);
}

View File

@ -29,6 +29,7 @@ import com.google.android.exoplayer2.extractor.ExtractorsFactory;
import com.google.android.exoplayer2.extractor.Id3Peeker;
import com.google.android.exoplayer2.extractor.PositionHolder;
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.metadata.Metadata;
import com.google.android.exoplayer2.metadata.id3.Id3Decoder;
@ -341,7 +342,8 @@ public final class FlacExtractor implements Extractor {
@Override
public SeekPoints getSeekPoints(long timeUs) {
return decoderJni.getSeekPoints(timeUs);
@Nullable SeekPoints seekPoints = decoderJni.getSeekPoints(timeUs);
return seekPoints == null ? new SeekPoints(SeekPoint.START) : seekPoints;
}
@Override

View File

@ -203,6 +203,7 @@ DECODER_FUNC(jlong, flacGetNextFrameFirstSampleIndex, jlong jContext) {
DECODER_FUNC(jobject, flacGetSeekPoints, jlong jContext, jlong timeUs) {
Context *context = reinterpret_cast<Context *>(jContext);
int64_t *result = context->parser->getSeekPositions(timeUs);
if (result != NULL) {
jclass seekPointClass = env->FindClass("com/google/android/exoplayer2/extractor/SeekPoint");
jclass seekPointsClass = env->FindClass("com/google/android/exoplayer2/extractor/SeekMap$SeekPoints");
jmethodID cidSeekPoint = env->GetMethodID(seekPointClass, "<init>", "(JJ)V");
@ -213,6 +214,9 @@ DECODER_FUNC(jobject, flacGetSeekPoints, jlong jContext, jlong timeUs) {
env->DeleteLocalRef(jSeekPointFirst);
env->DeleteLocalRef(jSeekPointSecond);
return jSeekPoints;
} else {
return NULL;
}
}
DECODER_FUNC(jstring, flacGetStateString, jlong jContext) {

View File

@ -440,9 +440,8 @@ size_t FLACParser::readBuffer(void *output, size_t output_size) {
int64_t* FLACParser::getSeekPositions(int64_t timeUs) {
int64_t *result = new int64_t[4];
memset(result, -1, sizeof(result));
if (!mSeekTable) {
return result;
return NULL;
}
int64_t sample = (timeUs * getSampleRate()) / 1000000LL;

View File

@ -58,16 +58,6 @@
<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
-dontwarn org.checkerframework.**
-dontwarn kotlin.annotations.jvm.**