package androidx.media3.exoplayer.source.chunk; import androidx.media3.common.Format; import androidx.media3.common.util.Assertions; import androidx.media3.common.util.Util; import androidx.media3.decoder.DecoderInputBuffer; import androidx.media3.exoplayer.FormatHolder; import androidx.media3.exoplayer.SeekParameters; import androidx.media3.exoplayer.drm.DrmSessionEventListener; import androidx.media3.exoplayer.drm.DrmSessionManager; import androidx.media3.exoplayer.source.LoadEventInfo; import androidx.media3.exoplayer.source.MediaSourceEventListener; import androidx.media3.exoplayer.source.SampleQueue; import androidx.media3.exoplayer.source.SampleStream; import androidx.media3.exoplayer.source.SequenceableLoader; import androidx.media3.exoplayer.source.chunk.ChunkSource; import androidx.media3.exoplayer.upstream.Allocator; import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy; import androidx.media3.exoplayer.upstream.Loader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; /* loaded from: classes2.dex */ public class ChunkSampleStream implements SampleStream, SequenceableLoader, Loader.Callback, Loader.ReleaseCallback { private static final String TAG = "ChunkSampleStream"; private final SequenceableLoader.Callback> callback; private BaseMediaChunk canceledMediaChunk; private final BaseMediaChunkOutput chunkOutput; private final T chunkSource; private final SampleQueue[] embeddedSampleQueues; private final Format[] embeddedTrackFormats; private final int[] embeddedTrackTypes; private final boolean[] embeddedTracksSelected; private long lastSeekPositionUs; private final LoadErrorHandlingPolicy loadErrorHandlingPolicy; private final Loader loader; private Chunk loadingChunk; boolean loadingFinished; private final ArrayList mediaChunks; private final MediaSourceEventListener.EventDispatcher mediaSourceEventDispatcher; private final ChunkHolder nextChunkHolder; private int nextNotifyPrimaryFormatMediaChunkIndex; private long pendingResetPositionUs; private Format primaryDownstreamTrackFormat; private final SampleQueue primarySampleQueue; public final int primaryTrackType; private final List readOnlyMediaChunks; private ReleaseCallback releaseCallback; /* loaded from: classes2.dex */ public interface ReleaseCallback { void onSampleStreamReleased(ChunkSampleStream chunkSampleStream); } public T getChunkSource() { return this.chunkSource; } boolean isPendingReset() { return this.pendingResetPositionUs != -9223372036854775807L; } public ChunkSampleStream(int i, int[] iArr, Format[] formatArr, T t, SequenceableLoader.Callback> callback, Allocator allocator, long j, DrmSessionManager drmSessionManager, DrmSessionEventListener.EventDispatcher eventDispatcher, LoadErrorHandlingPolicy loadErrorHandlingPolicy, MediaSourceEventListener.EventDispatcher eventDispatcher2) { this.primaryTrackType = i; int i2 = 0; iArr = iArr == null ? new int[0] : iArr; this.embeddedTrackTypes = iArr; this.embeddedTrackFormats = formatArr == null ? new Format[0] : formatArr; this.chunkSource = t; this.callback = callback; this.mediaSourceEventDispatcher = eventDispatcher2; this.loadErrorHandlingPolicy = loadErrorHandlingPolicy; this.loader = new Loader(TAG); this.nextChunkHolder = new ChunkHolder(); ArrayList arrayList = new ArrayList<>(); this.mediaChunks = arrayList; this.readOnlyMediaChunks = Collections.unmodifiableList(arrayList); int length = iArr.length; this.embeddedSampleQueues = new SampleQueue[length]; this.embeddedTracksSelected = new boolean[length]; int i3 = length + 1; int[] iArr2 = new int[i3]; SampleQueue[] sampleQueueArr = new SampleQueue[i3]; SampleQueue createWithDrm = SampleQueue.createWithDrm(allocator, drmSessionManager, eventDispatcher); this.primarySampleQueue = createWithDrm; iArr2[0] = i; sampleQueueArr[0] = createWithDrm; while (i2 < length) { SampleQueue createWithoutDrm = SampleQueue.createWithoutDrm(allocator); this.embeddedSampleQueues[i2] = createWithoutDrm; int i4 = i2 + 1; sampleQueueArr[i4] = createWithoutDrm; iArr2[i4] = this.embeddedTrackTypes[i2]; i2 = i4; } this.chunkOutput = new BaseMediaChunkOutput(iArr2, sampleQueueArr); this.pendingResetPositionUs = j; this.lastSeekPositionUs = j; } public void discardBuffer(long j, boolean z) { if (isPendingReset()) { return; } int firstIndex = this.primarySampleQueue.getFirstIndex(); this.primarySampleQueue.discardTo(j, z, true); int firstIndex2 = this.primarySampleQueue.getFirstIndex(); if (firstIndex2 > firstIndex) { long firstTimestampUs = this.primarySampleQueue.getFirstTimestampUs(); int i = 0; while (true) { SampleQueue[] sampleQueueArr = this.embeddedSampleQueues; if (i >= sampleQueueArr.length) { break; } sampleQueueArr[i].discardTo(firstTimestampUs, z, this.embeddedTracksSelected[i]); i++; } } discardDownstreamMediaChunks(firstIndex2); } public ChunkSampleStream.EmbeddedSampleStream selectEmbeddedTrack(long j, int i) { for (int i2 = 0; i2 < this.embeddedSampleQueues.length; i2++) { if (this.embeddedTrackTypes[i2] == i) { Assertions.checkState(!this.embeddedTracksSelected[i2]); this.embeddedTracksSelected[i2] = true; this.embeddedSampleQueues[i2].seekTo(j, true); return new EmbeddedSampleStream(this, this.embeddedSampleQueues[i2], i2); } } throw new IllegalStateException(); } @Override // androidx.media3.exoplayer.source.SequenceableLoader public long getBufferedPositionUs() { if (this.loadingFinished) { return Long.MIN_VALUE; } if (isPendingReset()) { return this.pendingResetPositionUs; } long j = this.lastSeekPositionUs; BaseMediaChunk lastMediaChunk = getLastMediaChunk(); if (!lastMediaChunk.isLoadCompleted()) { if (this.mediaChunks.size() > 1) { lastMediaChunk = this.mediaChunks.get(r2.size() - 2); } else { lastMediaChunk = null; } } if (lastMediaChunk != null) { j = Math.max(j, lastMediaChunk.endTimeUs); } return Math.max(j, this.primarySampleQueue.getLargestQueuedTimestampUs()); } public long getAdjustedSeekPositionUs(long j, SeekParameters seekParameters) { return this.chunkSource.getAdjustedSeekPositionUs(j, seekParameters); } public void seekToUs(long j) { BaseMediaChunk baseMediaChunk; boolean seekTo; this.lastSeekPositionUs = j; if (isPendingReset()) { this.pendingResetPositionUs = j; return; } int i = 0; for (int i2 = 0; i2 < this.mediaChunks.size(); i2++) { baseMediaChunk = this.mediaChunks.get(i2); long j2 = baseMediaChunk.startTimeUs; if (j2 == j && baseMediaChunk.clippedStartTimeUs == -9223372036854775807L) { break; } else { if (j2 > j) { break; } } } baseMediaChunk = null; if (baseMediaChunk != null) { seekTo = this.primarySampleQueue.seekTo(baseMediaChunk.getFirstSampleIndex(0)); } else { seekTo = this.primarySampleQueue.seekTo(j, j < getNextLoadPositionUs()); } if (seekTo) { this.nextNotifyPrimaryFormatMediaChunkIndex = primarySampleIndexToMediaChunkIndex(this.primarySampleQueue.getReadIndex(), 0); SampleQueue[] sampleQueueArr = this.embeddedSampleQueues; int length = sampleQueueArr.length; while (i < length) { sampleQueueArr[i].seekTo(j, true); i++; } return; } this.pendingResetPositionUs = j; this.loadingFinished = false; this.mediaChunks.clear(); this.nextNotifyPrimaryFormatMediaChunkIndex = 0; if (this.loader.isLoading()) { this.primarySampleQueue.discardToEnd(); SampleQueue[] sampleQueueArr2 = this.embeddedSampleQueues; int length2 = sampleQueueArr2.length; while (i < length2) { sampleQueueArr2[i].discardToEnd(); i++; } this.loader.cancelLoading(); return; } this.loader.clearFatalError(); resetSampleQueues(); } public void release() { release(null); } public void release(ReleaseCallback releaseCallback) { this.releaseCallback = releaseCallback; this.primarySampleQueue.preRelease(); for (SampleQueue sampleQueue : this.embeddedSampleQueues) { sampleQueue.preRelease(); } this.loader.release(this); } @Override // androidx.media3.exoplayer.upstream.Loader.ReleaseCallback public void onLoaderReleased() { this.primarySampleQueue.release(); for (SampleQueue sampleQueue : this.embeddedSampleQueues) { sampleQueue.release(); } this.chunkSource.release(); ReleaseCallback releaseCallback = this.releaseCallback; if (releaseCallback != null) { releaseCallback.onSampleStreamReleased(this); } } @Override // androidx.media3.exoplayer.source.SampleStream public boolean isReady() { return !isPendingReset() && this.primarySampleQueue.isReady(this.loadingFinished); } @Override // androidx.media3.exoplayer.source.SampleStream public void maybeThrowError() throws IOException { this.loader.maybeThrowError(); this.primarySampleQueue.maybeThrowError(); if (this.loader.isLoading()) { return; } this.chunkSource.maybeThrowError(); } @Override // androidx.media3.exoplayer.source.SampleStream public int readData(FormatHolder formatHolder, DecoderInputBuffer decoderInputBuffer, int i) { if (isPendingReset()) { return -3; } BaseMediaChunk baseMediaChunk = this.canceledMediaChunk; if (baseMediaChunk != null && baseMediaChunk.getFirstSampleIndex(0) <= this.primarySampleQueue.getReadIndex()) { return -3; } maybeNotifyPrimaryTrackFormatChanged(); return this.primarySampleQueue.read(formatHolder, decoderInputBuffer, i, this.loadingFinished); } @Override // androidx.media3.exoplayer.source.SampleStream public int skipData(long j) { if (isPendingReset()) { return 0; } int skipCount = this.primarySampleQueue.getSkipCount(j, this.loadingFinished); BaseMediaChunk baseMediaChunk = this.canceledMediaChunk; if (baseMediaChunk != null) { skipCount = Math.min(skipCount, baseMediaChunk.getFirstSampleIndex(0) - this.primarySampleQueue.getReadIndex()); } this.primarySampleQueue.skip(skipCount); maybeNotifyPrimaryTrackFormatChanged(); return skipCount; } @Override // androidx.media3.exoplayer.upstream.Loader.Callback public void onLoadCompleted(Chunk chunk, long j, long j2) { this.loadingChunk = null; this.chunkSource.onChunkLoadCompleted(chunk); LoadEventInfo loadEventInfo = new LoadEventInfo(chunk.loadTaskId, chunk.dataSpec, chunk.getUri(), chunk.getResponseHeaders(), j, j2, chunk.bytesLoaded()); this.loadErrorHandlingPolicy.onLoadTaskConcluded(chunk.loadTaskId); this.mediaSourceEventDispatcher.loadCompleted(loadEventInfo, chunk.type, this.primaryTrackType, chunk.trackFormat, chunk.trackSelectionReason, chunk.trackSelectionData, chunk.startTimeUs, chunk.endTimeUs); this.callback.onContinueLoadingRequested(this); } @Override // androidx.media3.exoplayer.upstream.Loader.Callback public void onLoadCanceled(Chunk chunk, long j, long j2, boolean z) { this.loadingChunk = null; this.canceledMediaChunk = null; LoadEventInfo loadEventInfo = new LoadEventInfo(chunk.loadTaskId, chunk.dataSpec, chunk.getUri(), chunk.getResponseHeaders(), j, j2, chunk.bytesLoaded()); this.loadErrorHandlingPolicy.onLoadTaskConcluded(chunk.loadTaskId); this.mediaSourceEventDispatcher.loadCanceled(loadEventInfo, chunk.type, this.primaryTrackType, chunk.trackFormat, chunk.trackSelectionReason, chunk.trackSelectionData, chunk.startTimeUs, chunk.endTimeUs); if (z) { return; } if (isPendingReset()) { resetSampleQueues(); } else if (isMediaChunk(chunk)) { discardUpstreamMediaChunksFromIndex(this.mediaChunks.size() - 1); if (this.mediaChunks.isEmpty()) { this.pendingResetPositionUs = this.lastSeekPositionUs; } } this.callback.onContinueLoadingRequested(this); } /* JADX WARN: Removed duplicated region for block: B:20:0x00a9 */ /* JADX WARN: Removed duplicated region for block: B:26:0x00f1 */ @Override // androidx.media3.exoplayer.upstream.Loader.Callback /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct add '--show-bad-code' argument */ public androidx.media3.exoplayer.upstream.Loader.LoadErrorAction onLoadError(androidx.media3.exoplayer.source.chunk.Chunk r31, long r32, long r34, java.io.IOException r36, int r37) { /* Method dump skipped, instructions count: 257 To view this dump add '--comments-level debug' option */ throw new UnsupportedOperationException("Method not decompiled: androidx.media3.exoplayer.source.chunk.ChunkSampleStream.onLoadError(androidx.media3.exoplayer.source.chunk.Chunk, long, long, java.io.IOException, int):androidx.media3.exoplayer.upstream.Loader$LoadErrorAction"); } @Override // androidx.media3.exoplayer.source.SequenceableLoader public boolean continueLoading(long j) { List list; long j2; if (this.loadingFinished || this.loader.isLoading() || this.loader.hasFatalError()) { return false; } boolean isPendingReset = isPendingReset(); if (isPendingReset) { list = Collections.emptyList(); j2 = this.pendingResetPositionUs; } else { list = this.readOnlyMediaChunks; j2 = getLastMediaChunk().endTimeUs; } this.chunkSource.getNextChunk(j, j2, list, this.nextChunkHolder); boolean z = this.nextChunkHolder.endOfStream; Chunk chunk = this.nextChunkHolder.chunk; this.nextChunkHolder.clear(); if (z) { this.pendingResetPositionUs = -9223372036854775807L; this.loadingFinished = true; return true; } if (chunk == null) { return false; } this.loadingChunk = chunk; if (isMediaChunk(chunk)) { BaseMediaChunk baseMediaChunk = (BaseMediaChunk) chunk; if (isPendingReset) { long j3 = baseMediaChunk.startTimeUs; long j4 = this.pendingResetPositionUs; if (j3 != j4) { this.primarySampleQueue.setStartTimeUs(j4); for (SampleQueue sampleQueue : this.embeddedSampleQueues) { sampleQueue.setStartTimeUs(this.pendingResetPositionUs); } } this.pendingResetPositionUs = -9223372036854775807L; } baseMediaChunk.init(this.chunkOutput); this.mediaChunks.add(baseMediaChunk); } else if (chunk instanceof InitializationChunk) { ((InitializationChunk) chunk).init(this.chunkOutput); } this.mediaSourceEventDispatcher.loadStarted(new LoadEventInfo(chunk.loadTaskId, chunk.dataSpec, this.loader.startLoading(chunk, this, this.loadErrorHandlingPolicy.getMinimumLoadableRetryCount(chunk.type))), chunk.type, this.primaryTrackType, chunk.trackFormat, chunk.trackSelectionReason, chunk.trackSelectionData, chunk.startTimeUs, chunk.endTimeUs); return true; } @Override // androidx.media3.exoplayer.source.SequenceableLoader public boolean isLoading() { return this.loader.isLoading(); } @Override // androidx.media3.exoplayer.source.SequenceableLoader public long getNextLoadPositionUs() { if (isPendingReset()) { return this.pendingResetPositionUs; } if (this.loadingFinished) { return Long.MIN_VALUE; } return getLastMediaChunk().endTimeUs; } @Override // androidx.media3.exoplayer.source.SequenceableLoader public void reevaluateBuffer(long j) { if (this.loader.hasFatalError() || isPendingReset()) { return; } if (this.loader.isLoading()) { Chunk chunk = (Chunk) Assertions.checkNotNull(this.loadingChunk); if (!(isMediaChunk(chunk) && haveReadFromMediaChunk(this.mediaChunks.size() - 1)) && this.chunkSource.shouldCancelLoad(j, chunk, this.readOnlyMediaChunks)) { this.loader.cancelLoading(); if (isMediaChunk(chunk)) { this.canceledMediaChunk = (BaseMediaChunk) chunk; return; } return; } return; } int preferredQueueSize = this.chunkSource.getPreferredQueueSize(j, this.readOnlyMediaChunks); if (preferredQueueSize < this.mediaChunks.size()) { discardUpstream(preferredQueueSize); } } private void discardUpstream(int i) { Assertions.checkState(!this.loader.isLoading()); int size = this.mediaChunks.size(); while (true) { if (i >= size) { i = -1; break; } else if (!haveReadFromMediaChunk(i)) { break; } else { i++; } } if (i == -1) { return; } long j = getLastMediaChunk().endTimeUs; BaseMediaChunk discardUpstreamMediaChunksFromIndex = discardUpstreamMediaChunksFromIndex(i); if (this.mediaChunks.isEmpty()) { this.pendingResetPositionUs = this.lastSeekPositionUs; } this.loadingFinished = false; this.mediaSourceEventDispatcher.upstreamDiscarded(this.primaryTrackType, discardUpstreamMediaChunksFromIndex.startTimeUs, j); } private boolean isMediaChunk(Chunk chunk) { return chunk instanceof BaseMediaChunk; } private void resetSampleQueues() { this.primarySampleQueue.reset(); for (SampleQueue sampleQueue : this.embeddedSampleQueues) { sampleQueue.reset(); } } private boolean haveReadFromMediaChunk(int i) { int readIndex; BaseMediaChunk baseMediaChunk = this.mediaChunks.get(i); if (this.primarySampleQueue.getReadIndex() > baseMediaChunk.getFirstSampleIndex(0)) { return true; } int i2 = 0; do { SampleQueue[] sampleQueueArr = this.embeddedSampleQueues; if (i2 >= sampleQueueArr.length) { return false; } readIndex = sampleQueueArr[i2].getReadIndex(); i2++; } while (readIndex <= baseMediaChunk.getFirstSampleIndex(i2)); return true; } private void discardDownstreamMediaChunks(int i) { int min = Math.min(primarySampleIndexToMediaChunkIndex(i, 0), this.nextNotifyPrimaryFormatMediaChunkIndex); if (min > 0) { Util.removeRange(this.mediaChunks, 0, min); this.nextNotifyPrimaryFormatMediaChunkIndex -= min; } } private void maybeNotifyPrimaryTrackFormatChanged() { int primarySampleIndexToMediaChunkIndex = primarySampleIndexToMediaChunkIndex(this.primarySampleQueue.getReadIndex(), this.nextNotifyPrimaryFormatMediaChunkIndex - 1); while (true) { int i = this.nextNotifyPrimaryFormatMediaChunkIndex; if (i > primarySampleIndexToMediaChunkIndex) { return; } this.nextNotifyPrimaryFormatMediaChunkIndex = i + 1; maybeNotifyPrimaryTrackFormatChanged(i); } } private void maybeNotifyPrimaryTrackFormatChanged(int i) { BaseMediaChunk baseMediaChunk = this.mediaChunks.get(i); Format format = baseMediaChunk.trackFormat; if (!format.equals(this.primaryDownstreamTrackFormat)) { this.mediaSourceEventDispatcher.downstreamFormatChanged(this.primaryTrackType, format, baseMediaChunk.trackSelectionReason, baseMediaChunk.trackSelectionData, baseMediaChunk.startTimeUs); } this.primaryDownstreamTrackFormat = format; } private int primarySampleIndexToMediaChunkIndex(int i, int i2) { do { i2++; if (i2 >= this.mediaChunks.size()) { return this.mediaChunks.size() - 1; } } while (this.mediaChunks.get(i2).getFirstSampleIndex(0) <= i); return i2 - 1; } private BaseMediaChunk getLastMediaChunk() { return this.mediaChunks.get(r1.size() - 1); } private BaseMediaChunk discardUpstreamMediaChunksFromIndex(int i) { BaseMediaChunk baseMediaChunk = this.mediaChunks.get(i); ArrayList arrayList = this.mediaChunks; Util.removeRange(arrayList, i, arrayList.size()); this.nextNotifyPrimaryFormatMediaChunkIndex = Math.max(this.nextNotifyPrimaryFormatMediaChunkIndex, this.mediaChunks.size()); int i2 = 0; this.primarySampleQueue.discardUpstreamSamples(baseMediaChunk.getFirstSampleIndex(0)); while (true) { SampleQueue[] sampleQueueArr = this.embeddedSampleQueues; if (i2 >= sampleQueueArr.length) { return baseMediaChunk; } SampleQueue sampleQueue = sampleQueueArr[i2]; i2++; sampleQueue.discardUpstreamSamples(baseMediaChunk.getFirstSampleIndex(i2)); } } /* loaded from: classes2.dex */ public final class EmbeddedSampleStream implements SampleStream { private final int index; private boolean notifiedDownstreamFormat; public final ChunkSampleStream parent; private final SampleQueue sampleQueue; @Override // androidx.media3.exoplayer.source.SampleStream public void maybeThrowError() { } public EmbeddedSampleStream(ChunkSampleStream chunkSampleStream, SampleQueue sampleQueue, int i) { this.parent = chunkSampleStream; this.sampleQueue = sampleQueue; this.index = i; } @Override // androidx.media3.exoplayer.source.SampleStream public boolean isReady() { return !ChunkSampleStream.this.isPendingReset() && this.sampleQueue.isReady(ChunkSampleStream.this.loadingFinished); } @Override // androidx.media3.exoplayer.source.SampleStream public int skipData(long j) { if (ChunkSampleStream.this.isPendingReset()) { return 0; } int skipCount = this.sampleQueue.getSkipCount(j, ChunkSampleStream.this.loadingFinished); if (ChunkSampleStream.this.canceledMediaChunk != null) { skipCount = Math.min(skipCount, ChunkSampleStream.this.canceledMediaChunk.getFirstSampleIndex(this.index + 1) - this.sampleQueue.getReadIndex()); } this.sampleQueue.skip(skipCount); if (skipCount > 0) { maybeNotifyDownstreamFormat(); } return skipCount; } @Override // androidx.media3.exoplayer.source.SampleStream public int readData(FormatHolder formatHolder, DecoderInputBuffer decoderInputBuffer, int i) { if (ChunkSampleStream.this.isPendingReset()) { return -3; } if (ChunkSampleStream.this.canceledMediaChunk != null && ChunkSampleStream.this.canceledMediaChunk.getFirstSampleIndex(this.index + 1) <= this.sampleQueue.getReadIndex()) { return -3; } maybeNotifyDownstreamFormat(); return this.sampleQueue.read(formatHolder, decoderInputBuffer, i, ChunkSampleStream.this.loadingFinished); } public void release() { Assertions.checkState(ChunkSampleStream.this.embeddedTracksSelected[this.index]); ChunkSampleStream.this.embeddedTracksSelected[this.index] = false; } private void maybeNotifyDownstreamFormat() { if (this.notifiedDownstreamFormat) { return; } ChunkSampleStream.this.mediaSourceEventDispatcher.downstreamFormatChanged(ChunkSampleStream.this.embeddedTrackTypes[this.index], ChunkSampleStream.this.embeddedTrackFormats[this.index], 0, null, ChunkSampleStream.this.lastSeekPositionUs); this.notifiedDownstreamFormat = true; } } }