mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-27 09:32:27 -06:00
172 lines
5.8 KiB
Java
172 lines
5.8 KiB
Java
package androidx.media3.exoplayer.audio;
|
|
|
|
import android.media.AudioTimestamp;
|
|
import android.media.AudioTrack;
|
|
import androidx.media3.common.util.Util;
|
|
import androidx.work.WorkRequest;
|
|
|
|
/* loaded from: classes2.dex */
|
|
final class AudioTimestampPoller {
|
|
private static final int ERROR_POLL_INTERVAL_US = 500000;
|
|
private static final int FAST_POLL_INTERVAL_US = 10000;
|
|
private static final int INITIALIZING_DURATION_US = 500000;
|
|
private static final int SLOW_POLL_INTERVAL_US = 10000000;
|
|
private static final int STATE_ERROR = 4;
|
|
private static final int STATE_INITIALIZING = 0;
|
|
private static final int STATE_NO_TIMESTAMP = 3;
|
|
private static final int STATE_TIMESTAMP = 1;
|
|
private static final int STATE_TIMESTAMP_ADVANCING = 2;
|
|
private final AudioTimestampV19 audioTimestamp;
|
|
private long initialTimestampPositionFrames;
|
|
private long initializeSystemTimeUs;
|
|
private long lastTimestampSampleTimeUs;
|
|
private long sampleIntervalUs;
|
|
private int state;
|
|
|
|
public boolean hasAdvancingTimestamp() {
|
|
return this.state == 2;
|
|
}
|
|
|
|
public boolean hasTimestamp() {
|
|
int i = this.state;
|
|
return i == 1 || i == 2;
|
|
}
|
|
|
|
public AudioTimestampPoller(AudioTrack audioTrack) {
|
|
if (Util.SDK_INT >= 19) {
|
|
this.audioTimestamp = new AudioTimestampV19(audioTrack);
|
|
reset();
|
|
} else {
|
|
this.audioTimestamp = null;
|
|
updateState(3);
|
|
}
|
|
}
|
|
|
|
public boolean maybePollTimestamp(long j) {
|
|
AudioTimestampV19 audioTimestampV19 = this.audioTimestamp;
|
|
if (audioTimestampV19 == null || j - this.lastTimestampSampleTimeUs < this.sampleIntervalUs) {
|
|
return false;
|
|
}
|
|
this.lastTimestampSampleTimeUs = j;
|
|
boolean maybeUpdateTimestamp = audioTimestampV19.maybeUpdateTimestamp();
|
|
int i = this.state;
|
|
if (i != 0) {
|
|
if (i != 1) {
|
|
if (i != 2) {
|
|
if (i != 3) {
|
|
if (i != 4) {
|
|
throw new IllegalStateException();
|
|
}
|
|
} else if (maybeUpdateTimestamp) {
|
|
reset();
|
|
}
|
|
} else if (!maybeUpdateTimestamp) {
|
|
reset();
|
|
}
|
|
} else if (!maybeUpdateTimestamp) {
|
|
reset();
|
|
} else if (this.audioTimestamp.getTimestampPositionFrames() > this.initialTimestampPositionFrames) {
|
|
updateState(2);
|
|
}
|
|
} else if (maybeUpdateTimestamp) {
|
|
if (this.audioTimestamp.getTimestampSystemTimeUs() < this.initializeSystemTimeUs) {
|
|
return false;
|
|
}
|
|
this.initialTimestampPositionFrames = this.audioTimestamp.getTimestampPositionFrames();
|
|
updateState(1);
|
|
} else if (j - this.initializeSystemTimeUs > 500000) {
|
|
updateState(3);
|
|
}
|
|
return maybeUpdateTimestamp;
|
|
}
|
|
|
|
public void rejectTimestamp() {
|
|
updateState(4);
|
|
}
|
|
|
|
public void acceptTimestamp() {
|
|
if (this.state == 4) {
|
|
reset();
|
|
}
|
|
}
|
|
|
|
public void reset() {
|
|
if (this.audioTimestamp != null) {
|
|
updateState(0);
|
|
}
|
|
}
|
|
|
|
public long getTimestampSystemTimeUs() {
|
|
AudioTimestampV19 audioTimestampV19 = this.audioTimestamp;
|
|
if (audioTimestampV19 != null) {
|
|
return audioTimestampV19.getTimestampSystemTimeUs();
|
|
}
|
|
return -9223372036854775807L;
|
|
}
|
|
|
|
public long getTimestampPositionFrames() {
|
|
AudioTimestampV19 audioTimestampV19 = this.audioTimestamp;
|
|
if (audioTimestampV19 != null) {
|
|
return audioTimestampV19.getTimestampPositionFrames();
|
|
}
|
|
return -1L;
|
|
}
|
|
|
|
private void updateState(int i) {
|
|
this.state = i;
|
|
if (i == 0) {
|
|
this.lastTimestampSampleTimeUs = 0L;
|
|
this.initialTimestampPositionFrames = -1L;
|
|
this.initializeSystemTimeUs = System.nanoTime() / 1000;
|
|
this.sampleIntervalUs = WorkRequest.MIN_BACKOFF_MILLIS;
|
|
return;
|
|
}
|
|
if (i == 1) {
|
|
this.sampleIntervalUs = WorkRequest.MIN_BACKOFF_MILLIS;
|
|
return;
|
|
}
|
|
if (i == 2 || i == 3) {
|
|
this.sampleIntervalUs = 10000000L;
|
|
} else {
|
|
if (i != 4) {
|
|
throw new IllegalStateException();
|
|
}
|
|
this.sampleIntervalUs = 500000L;
|
|
}
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
/* loaded from: classes2.dex */
|
|
public static final class AudioTimestampV19 {
|
|
private final AudioTimestamp audioTimestamp = new AudioTimestamp();
|
|
private final AudioTrack audioTrack;
|
|
private long lastTimestampPositionFrames;
|
|
private long lastTimestampRawPositionFrames;
|
|
private long rawTimestampFramePositionWrapCount;
|
|
|
|
public long getTimestampPositionFrames() {
|
|
return this.lastTimestampPositionFrames;
|
|
}
|
|
|
|
public AudioTimestampV19(AudioTrack audioTrack) {
|
|
this.audioTrack = audioTrack;
|
|
}
|
|
|
|
public boolean maybeUpdateTimestamp() {
|
|
boolean timestamp = this.audioTrack.getTimestamp(this.audioTimestamp);
|
|
if (timestamp) {
|
|
long j = this.audioTimestamp.framePosition;
|
|
if (this.lastTimestampRawPositionFrames > j) {
|
|
this.rawTimestampFramePositionWrapCount++;
|
|
}
|
|
this.lastTimestampRawPositionFrames = j;
|
|
this.lastTimestampPositionFrames = j + (this.rawTimestampFramePositionWrapCount << 32);
|
|
}
|
|
return timestamp;
|
|
}
|
|
|
|
public long getTimestampSystemTimeUs() {
|
|
return this.audioTimestamp.nanoTime / 1000;
|
|
}
|
|
}
|
|
}
|