mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
return null if Seek Table is not supported. proguard in flac-extension
This commit is contained in:
parent
070aab7225
commit
03ba1c9a2f
@ -15,3 +15,13 @@
|
|||||||
-keep class com.google.android.exoplayer2.metadata.flac.PictureFrame {
|
-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);
|
||||||
|
}
|
@ -221,10 +221,10 @@ import java.nio.ByteBuffer;
|
|||||||
* stream.
|
* stream.
|
||||||
*
|
*
|
||||||
* @param timeUs A seek position in microseconds.
|
* @param timeUs A seek position in microseconds.
|
||||||
* @return The corresponding SeekPoints in the flac seek table or
|
* @return The corresponding SeekPoints in the flac seek table or null if the stream doesn't
|
||||||
* {@link com.google.android.exoplayer2.extractor.SeekPoint#position} set -1 if the stream doesn't
|
|
||||||
* have a seek table.
|
* have a seek table.
|
||||||
*/
|
*/
|
||||||
|
@Nullable
|
||||||
public SeekMap.SeekPoints getSeekPoints(long timeUs) {
|
public SeekMap.SeekPoints getSeekPoints(long timeUs) {
|
||||||
return flacGetSeekPoints(nativeDecoderContext, 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.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;
|
||||||
@ -341,7 +342,8 @@ public final class FlacExtractor implements Extractor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SeekPoints getSeekPoints(long timeUs) {
|
public SeekPoints getSeekPoints(long timeUs) {
|
||||||
return decoderJni.getSeekPoints(timeUs);
|
@Nullable SeekPoints seekPoints = decoderJni.getSeekPoints(timeUs);
|
||||||
|
return seekPoints == null ? new SeekPoints(SeekPoint.START) : seekPoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -203,16 +203,20 @@ DECODER_FUNC(jlong, flacGetNextFrameFirstSampleIndex, jlong jContext) {
|
|||||||
DECODER_FUNC(jobject, flacGetSeekPoints, jlong jContext, jlong timeUs) {
|
DECODER_FUNC(jobject, flacGetSeekPoints, jlong jContext, jlong timeUs) {
|
||||||
Context *context = reinterpret_cast<Context *>(jContext);
|
Context *context = reinterpret_cast<Context *>(jContext);
|
||||||
int64_t *result = context->parser->getSeekPositions(timeUs);
|
int64_t *result = context->parser->getSeekPositions(timeUs);
|
||||||
jclass seekPointClass = env->FindClass("com/google/android/exoplayer2/extractor/SeekPoint");
|
if (result != NULL) {
|
||||||
jclass seekPointsClass = env->FindClass("com/google/android/exoplayer2/extractor/SeekMap$SeekPoints");
|
jclass seekPointClass = env->FindClass("com/google/android/exoplayer2/extractor/SeekPoint");
|
||||||
jmethodID cidSeekPoint = env->GetMethodID(seekPointClass, "<init>", "(JJ)V");
|
jclass seekPointsClass = env->FindClass("com/google/android/exoplayer2/extractor/SeekMap$SeekPoints");
|
||||||
jmethodID cidSeekPoints = env->GetMethodID(seekPointsClass, "<init>", "(Lcom/google/android/exoplayer2/extractor/SeekPoint;Lcom/google/android/exoplayer2/extractor/SeekPoint;)V");
|
jmethodID cidSeekPoint = env->GetMethodID(seekPointClass, "<init>", "(JJ)V");
|
||||||
jobject jSeekPointFirst = env->NewObject(seekPointClass, cidSeekPoint, (jlong) result[0], (jlong) result[1]);
|
jmethodID cidSeekPoints = env->GetMethodID(seekPointsClass, "<init>", "(Lcom/google/android/exoplayer2/extractor/SeekPoint;Lcom/google/android/exoplayer2/extractor/SeekPoint;)V");
|
||||||
jobject jSeekPointSecond = env->NewObject(seekPointClass, cidSeekPoint, (jlong) result[2], (jlong) result[3]);
|
jobject jSeekPointFirst = env->NewObject(seekPointClass, cidSeekPoint, (jlong) result[0], (jlong) result[1]);
|
||||||
jobject jSeekPoints = env->NewObject(seekPointsClass, cidSeekPoints, jSeekPointFirst, jSeekPointSecond);
|
jobject jSeekPointSecond = env->NewObject(seekPointClass, cidSeekPoint, (jlong) result[2], (jlong) result[3]);
|
||||||
env->DeleteLocalRef(jSeekPointFirst);
|
jobject jSeekPoints = env->NewObject(seekPointsClass, cidSeekPoints, jSeekPointFirst, jSeekPointSecond);
|
||||||
env->DeleteLocalRef(jSeekPointSecond);
|
env->DeleteLocalRef(jSeekPointFirst);
|
||||||
return jSeekPoints;
|
env->DeleteLocalRef(jSeekPointSecond);
|
||||||
|
return jSeekPoints;
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DECODER_FUNC(jstring, flacGetStateString, jlong jContext) {
|
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* FLACParser::getSeekPositions(int64_t timeUs) {
|
||||||
int64_t *result = new int64_t[4];
|
int64_t *result = new int64_t[4];
|
||||||
memset(result, -1, sizeof(result));
|
|
||||||
if (!mSeekTable) {
|
if (!mSeekTable) {
|
||||||
return result;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t sample = (timeUs * getSampleRate()) / 1000000LL;
|
int64_t sample = (timeUs * getSampleRate()) / 1000000LL;
|
||||||
|
@ -58,16 +58,6 @@
|
|||||||
<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.**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user