Commit 03ba1c9a by wingyippp

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

parent 070aab72
......@@ -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);
}
\ No newline at end of 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);
}
......
......@@ -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
......
......@@ -203,16 +203,20 @@ 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);
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");
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;
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");
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;
} else {
return NULL;
}
}
DECODER_FUNC(jstring, flacGetStateString, jlong jContext) {
......
......@@ -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;
......
......@@ -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.**
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment