package androidx.media3.exoplayer.source;

import androidx.media3.common.C;
import androidx.media3.common.MediaItem;
import androidx.media3.common.Timeline;
import androidx.media3.common.util.Assertions;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.upstream.Allocator;
import java.io.IOException;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.ArrayList;

/* JADX INFO: loaded from: classes.dex */
@UnstableApi
public final class ClippingMediaSource extends WrappingMediaSource {
    private final boolean allowDynamicClippingUpdates;
    private IllegalClippingException clippingError;
    private ClippingTimeline clippingTimeline;
    private final boolean enableInitialDiscontinuity;
    private final long endUs;
    private final ArrayList<ClippingMediaPeriod> mediaPeriods;
    private long periodEndUs;
    private long periodStartUs;
    private final boolean relativeToDefaultPosition;
    private final long startUs;
    private final Timeline.Window window;

    public static final class ClippingTimeline extends ForwardingTimeline {
        private final long durationUs;
        private final long endUs;
        private final boolean isDynamic;
        private final long startUs;

        public ClippingTimeline(Timeline timeline, long j4, long j6) throws IllegalClippingException {
            super(timeline);
            boolean z6 = false;
            if (timeline.getPeriodCount() != 1) {
                throw new IllegalClippingException(0);
            }
            Timeline.Window window = timeline.getWindow(0, new Timeline.Window());
            long jMax = Math.max(0L, j4);
            if (!window.isPlaceholder && jMax != 0 && !window.isSeekable) {
                throw new IllegalClippingException(1);
            }
            long jMax2 = j6 == Long.MIN_VALUE ? window.durationUs : Math.max(0L, j6);
            long j7 = window.durationUs;
            if (j7 != C.TIME_UNSET) {
                jMax2 = jMax2 > j7 ? j7 : jMax2;
                if (jMax > jMax2) {
                    throw new IllegalClippingException(2);
                }
            }
            this.startUs = jMax;
            this.endUs = jMax2;
            this.durationUs = jMax2 == C.TIME_UNSET ? -9223372036854775807L : jMax2 - jMax;
            if (window.isDynamic && (jMax2 == C.TIME_UNSET || (j7 != C.TIME_UNSET && jMax2 == j7))) {
                z6 = true;
            }
            this.isDynamic = z6;
        }

        @Override // androidx.media3.exoplayer.source.ForwardingTimeline, androidx.media3.common.Timeline
        public Timeline.Period getPeriod(int i6, Timeline.Period period, boolean z6) {
            this.timeline.getPeriod(0, period, z6);
            long positionInWindowUs = period.getPositionInWindowUs() - this.startUs;
            long j4 = this.durationUs;
            long j6 = C.TIME_UNSET;
            if (j4 != C.TIME_UNSET) {
                j6 = j4 - positionInWindowUs;
            }
            return period.set(period.id, period.uid, 0, j6, positionInWindowUs);
        }

        @Override // androidx.media3.exoplayer.source.ForwardingTimeline, androidx.media3.common.Timeline
        public Timeline.Window getWindow(int i6, Timeline.Window window, long j4) {
            this.timeline.getWindow(0, window, 0L);
            long j6 = window.positionInFirstPeriodUs;
            long j7 = this.startUs;
            window.positionInFirstPeriodUs = j6 + j7;
            window.durationUs = this.durationUs;
            window.isDynamic = this.isDynamic;
            long j8 = window.defaultPositionUs;
            if (j8 != C.TIME_UNSET) {
                long jMax = Math.max(j8, j7);
                window.defaultPositionUs = jMax;
                long j9 = this.endUs;
                if (j9 != C.TIME_UNSET) {
                    jMax = Math.min(jMax, j9);
                }
                window.defaultPositionUs = jMax - this.startUs;
            }
            long jUsToMs = Util.usToMs(this.startUs);
            long j10 = window.presentationStartTimeMs;
            if (j10 != C.TIME_UNSET) {
                window.presentationStartTimeMs = j10 + jUsToMs;
            }
            long j11 = window.windowStartTimeMs;
            if (j11 != C.TIME_UNSET) {
                window.windowStartTimeMs = j11 + jUsToMs;
            }
            return window;
        }
    }

    public static final class IllegalClippingException extends IOException {
        public static final int REASON_INVALID_PERIOD_COUNT = 0;
        public static final int REASON_NOT_SEEKABLE_TO_START = 1;
        public static final int REASON_START_EXCEEDS_END = 2;
        public final int reason;

        @Target({ElementType.TYPE_USE})
        @Documented
        @Retention(RetentionPolicy.SOURCE)
        public @interface Reason {
        }

        public IllegalClippingException(int i6) {
            super("Illegal clipping: " + getReasonDescription(i6));
            this.reason = i6;
        }

        private static String getReasonDescription(int i6) {
            return i6 != 0 ? i6 != 1 ? i6 != 2 ? "unknown" : "start exceeds end" : "not seekable to start" : "invalid period count";
        }
    }

    public ClippingMediaSource(MediaSource mediaSource, long j4, long j6) {
        this(mediaSource, j4, j6, true, false, false);
    }

    private void refreshClippedTimeline(Timeline timeline) {
        long j4;
        timeline.getWindow(0, this.window);
        long positionInFirstPeriodUs = this.window.getPositionInFirstPeriodUs();
        if (this.clippingTimeline == null || this.mediaPeriods.isEmpty() || this.allowDynamicClippingUpdates) {
            j4 = this.startUs;
            long j6 = this.endUs;
            if (this.relativeToDefaultPosition) {
                long defaultPositionUs = this.window.getDefaultPositionUs();
                j4 += defaultPositionUs;
                j6 += defaultPositionUs;
            }
            this.periodStartUs = positionInFirstPeriodUs + j4;
            this.periodEndUs = this.endUs != Long.MIN_VALUE ? positionInFirstPeriodUs + j6 : Long.MIN_VALUE;
            int size = this.mediaPeriods.size();
            for (int i6 = 0; i6 < size; i6++) {
                this.mediaPeriods.get(i6).updateClipping(this.periodStartUs, this.periodEndUs);
            }
            j = j6;
        } else {
            j4 = this.periodStartUs - positionInFirstPeriodUs;
            if (this.endUs != Long.MIN_VALUE) {
                j = this.periodEndUs - positionInFirstPeriodUs;
            }
        }
        try {
            ClippingTimeline clippingTimeline = new ClippingTimeline(timeline, j4, j);
            this.clippingTimeline = clippingTimeline;
            refreshSourceInfo(clippingTimeline);
        } catch (IllegalClippingException e6) {
            this.clippingError = e6;
            for (int i7 = 0; i7 < this.mediaPeriods.size(); i7++) {
                this.mediaPeriods.get(i7).setClippingError(this.clippingError);
            }
        }
    }

    @Override // androidx.media3.exoplayer.source.WrappingMediaSource, androidx.media3.exoplayer.source.MediaSource
    public boolean canUpdateMediaItem(MediaItem mediaItem) {
        return getMediaItem().clippingConfiguration.equals(mediaItem.clippingConfiguration) && this.mediaSource.canUpdateMediaItem(mediaItem);
    }

    @Override // androidx.media3.exoplayer.source.WrappingMediaSource, androidx.media3.exoplayer.source.MediaSource
    public MediaPeriod createPeriod(MediaSource.MediaPeriodId mediaPeriodId, Allocator allocator, long j4) {
        ClippingMediaPeriod clippingMediaPeriod = new ClippingMediaPeriod(this.mediaSource.createPeriod(mediaPeriodId, allocator, j4), this.enableInitialDiscontinuity, this.periodStartUs, this.periodEndUs);
        this.mediaPeriods.add(clippingMediaPeriod);
        return clippingMediaPeriod;
    }

    @Override // androidx.media3.exoplayer.source.CompositeMediaSource, androidx.media3.exoplayer.source.MediaSource
    public void maybeThrowSourceInfoRefreshError() throws IllegalClippingException {
        IllegalClippingException illegalClippingException = this.clippingError;
        if (illegalClippingException != null) {
            throw illegalClippingException;
        }
        super.maybeThrowSourceInfoRefreshError();
    }

    @Override // androidx.media3.exoplayer.source.WrappingMediaSource
    public void onChildSourceInfoRefreshed(Timeline timeline) {
        if (this.clippingError != null) {
            return;
        }
        refreshClippedTimeline(timeline);
    }

    @Override // androidx.media3.exoplayer.source.WrappingMediaSource, androidx.media3.exoplayer.source.MediaSource
    public void releasePeriod(MediaPeriod mediaPeriod) {
        Assertions.checkState(this.mediaPeriods.remove(mediaPeriod));
        this.mediaSource.releasePeriod(((ClippingMediaPeriod) mediaPeriod).mediaPeriod);
        if (!this.mediaPeriods.isEmpty() || this.allowDynamicClippingUpdates) {
            return;
        }
        refreshClippedTimeline(((ClippingTimeline) Assertions.checkNotNull(this.clippingTimeline)).timeline);
    }

    @Override // androidx.media3.exoplayer.source.CompositeMediaSource, androidx.media3.exoplayer.source.BaseMediaSource
    public void releaseSourceInternal() {
        super.releaseSourceInternal();
        this.clippingError = null;
        this.clippingTimeline = null;
    }

    public ClippingMediaSource(MediaSource mediaSource, long j4) {
        this(mediaSource, 0L, j4, true, false, true);
    }

    public ClippingMediaSource(MediaSource mediaSource, long j4, long j6, boolean z6, boolean z7, boolean z8) {
        super((MediaSource) Assertions.checkNotNull(mediaSource));
        Assertions.checkArgument(j4 >= 0);
        this.startUs = j4;
        this.endUs = j6;
        this.enableInitialDiscontinuity = z6;
        this.allowDynamicClippingUpdates = z7;
        this.relativeToDefaultPosition = z8;
        this.mediaPeriods = new ArrayList<>();
        this.window = new Timeline.Window();
    }
}
