package androidx.media3.exoplayer.rtsp;

import android.os.SystemClock;
import androidx.media3.common.C;
import androidx.media3.common.util.ParsableByteArray;
import androidx.media3.exoplayer.rtsp.reader.DefaultRtpPayloadReaderFactory;
import androidx.media3.exoplayer.rtsp.reader.RtpPayloadReader;
import androidx.media3.extractor.Extractor;
import androidx.media3.extractor.ExtractorInput;
import androidx.media3.extractor.ExtractorOutput;
import androidx.media3.extractor.PositionHolder;
import androidx.media3.extractor.SeekMap;
import defpackage.qy3;
import java.io.IOException;

/* JADX INFO: loaded from: classes.dex */
final class RtpExtractor implements Extractor {
    private boolean firstPacketRead;
    private volatile int firstSequenceNumber;
    private volatile long firstTimestamp;

    @qy3
    private boolean isSeekPending;
    private final Object lock;

    @qy3
    private long nextRtpTimestamp;
    private ExtractorOutput output;
    private final RtpPayloadReader payloadReader;

    @qy3
    private long playbackStartTimeUs;
    private final RtpPacketReorderingQueue reorderingQueue;
    private final ParsableByteArray rtpPacketDataBuffer;
    private final ParsableByteArray rtpPacketScratchBuffer;
    private final int trackId;

    public RtpExtractor(RtpPayloadFormat rtpPayloadFormat, int i) {
        this.trackId = i;
        RtpPayloadReader rtpPayloadReaderCreatePayloadReader = new DefaultRtpPayloadReaderFactory().createPayloadReader(rtpPayloadFormat);
        rtpPayloadReaderCreatePayloadReader.getClass();
        this.payloadReader = rtpPayloadReaderCreatePayloadReader;
        this.rtpPacketScratchBuffer = new ParsableByteArray(RtpPacket.MAX_SIZE);
        this.rtpPacketDataBuffer = new ParsableByteArray();
        this.lock = new Object();
        this.reorderingQueue = new RtpPacketReorderingQueue();
        this.firstTimestamp = C.TIME_UNSET;
        this.firstSequenceNumber = -1;
        this.nextRtpTimestamp = C.TIME_UNSET;
        this.playbackStartTimeUs = C.TIME_UNSET;
    }

    private static long getCutoffTimeMs(long j) {
        return j - 30;
    }

    public boolean hasReadFirstRtpPacket() {
        return this.firstPacketRead;
    }

    @Override // androidx.media3.extractor.Extractor
    public void init(ExtractorOutput extractorOutput) {
        this.payloadReader.createTracks(extractorOutput, this.trackId);
        extractorOutput.endTracks();
        extractorOutput.seekMap(new SeekMap.Unseekable(C.TIME_UNSET));
        this.output = extractorOutput;
    }

    public void preSeek() {
        synchronized (this.lock) {
            this.isSeekPending = true;
        }
    }

    @Override // androidx.media3.extractor.Extractor
    public int read(ExtractorInput extractorInput, PositionHolder positionHolder) throws IOException {
        this.output.getClass();
        int i = extractorInput.read(this.rtpPacketScratchBuffer.getData(), 0, RtpPacket.MAX_SIZE);
        if (i == -1) {
            return -1;
        }
        if (i == 0) {
            return 0;
        }
        this.rtpPacketScratchBuffer.setPosition(0);
        this.rtpPacketScratchBuffer.setLimit(i);
        RtpPacket rtpPacket = RtpPacket.parse(this.rtpPacketScratchBuffer);
        if (rtpPacket == null) {
            return 0;
        }
        long jElapsedRealtime = SystemClock.elapsedRealtime();
        long cutoffTimeMs = getCutoffTimeMs(jElapsedRealtime);
        this.reorderingQueue.offer(rtpPacket, jElapsedRealtime);
        RtpPacket rtpPacketPoll = this.reorderingQueue.poll(cutoffTimeMs);
        if (rtpPacketPoll == null) {
            return 0;
        }
        if (!this.firstPacketRead) {
            if (this.firstTimestamp == C.TIME_UNSET) {
                this.firstTimestamp = rtpPacketPoll.timestamp;
            }
            if (this.firstSequenceNumber == -1) {
                this.firstSequenceNumber = rtpPacketPoll.sequenceNumber;
            }
            this.payloadReader.onReceivingFirstPacket(this.firstTimestamp, this.firstSequenceNumber);
            this.firstPacketRead = true;
        }
        synchronized (this.lock) {
            try {
                if (!this.isSeekPending) {
                    do {
                        this.rtpPacketDataBuffer.reset(rtpPacketPoll.payloadData);
                        this.payloadReader.consume(this.rtpPacketDataBuffer, rtpPacketPoll.timestamp, rtpPacketPoll.sequenceNumber, rtpPacketPoll.marker);
                        rtpPacketPoll = this.reorderingQueue.poll(cutoffTimeMs);
                    } while (rtpPacketPoll != null);
                } else if (this.nextRtpTimestamp != C.TIME_UNSET && this.playbackStartTimeUs != C.TIME_UNSET) {
                    this.reorderingQueue.reset();
                    this.payloadReader.seek(this.nextRtpTimestamp, this.playbackStartTimeUs);
                    this.isSeekPending = false;
                    this.nextRtpTimestamp = C.TIME_UNSET;
                    this.playbackStartTimeUs = C.TIME_UNSET;
                }
            } catch (Throwable th) {
                throw th;
            }
        }
        return 0;
    }

    @Override // androidx.media3.extractor.Extractor
    public void release() {
    }

    @Override // androidx.media3.extractor.Extractor
    public void seek(long j, long j2) {
        synchronized (this.lock) {
            try {
                if (!this.isSeekPending) {
                    this.isSeekPending = true;
                }
                this.nextRtpTimestamp = j;
                this.playbackStartTimeUs = j2;
            } catch (Throwable th) {
                throw th;
            }
        }
    }

    public void setFirstSequenceNumber(int i) {
        this.firstSequenceNumber = i;
    }

    public void setFirstTimestamp(long j) {
        this.firstTimestamp = j;
    }

    @Override // androidx.media3.extractor.Extractor
    public boolean sniff(ExtractorInput extractorInput) {
        throw new UnsupportedOperationException("RTP packets are transmitted in a packet stream do not support sniffing.");
    }
}
