package androidx.media3.exoplayer.dash.manifest;

import H3.a;
import androidx.media3.common.C;
import androidx.media3.common.Format;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.util.List;

/* JADX INFO: loaded from: classes.dex */
@UnstableApi
public abstract class SegmentBase {
    final RangedUri initialization;
    final long presentationTimeOffset;
    final long timescale;

    public static abstract class MultiSegmentBase extends SegmentBase {
        final long availabilityTimeOffsetUs;
        final long duration;
        private final long periodStartUnixTimeUs;
        final List<SegmentTimelineElement> segmentTimeline;
        final long startNumber;
        private final long timeShiftBufferDepthUs;

        public MultiSegmentBase(RangedUri rangedUri, long j4, long j6, long j7, long j8, List<SegmentTimelineElement> list, long j9, long j10, long j11) {
            super(rangedUri, j4, j6);
            this.startNumber = j7;
            this.duration = j8;
            this.segmentTimeline = list;
            this.availabilityTimeOffsetUs = j9;
            this.timeShiftBufferDepthUs = j10;
            this.periodStartUnixTimeUs = j11;
        }

        public long getAvailableSegmentCount(long j4, long j6) {
            long segmentCount = getSegmentCount(j4);
            return segmentCount != -1 ? segmentCount : (int) (getSegmentNum((j6 - this.periodStartUnixTimeUs) + this.availabilityTimeOffsetUs, j4) - getFirstAvailableSegmentNum(j4, j6));
        }

        public long getFirstAvailableSegmentNum(long j4, long j6) {
            if (getSegmentCount(j4) == -1) {
                long j7 = this.timeShiftBufferDepthUs;
                if (j7 != C.TIME_UNSET) {
                    return Math.max(getFirstSegmentNum(), getSegmentNum((j6 - this.periodStartUnixTimeUs) - j7, j4));
                }
            }
            return getFirstSegmentNum();
        }

        public long getFirstSegmentNum() {
            return this.startNumber;
        }

        public long getNextSegmentAvailableTimeUs(long j4, long j6) {
            if (this.segmentTimeline != null) {
                return C.TIME_UNSET;
            }
            long availableSegmentCount = getAvailableSegmentCount(j4, j6) + getFirstAvailableSegmentNum(j4, j6);
            return (getSegmentDurationUs(availableSegmentCount, j4) + getSegmentTimeUs(availableSegmentCount)) - this.availabilityTimeOffsetUs;
        }

        public abstract long getSegmentCount(long j4);

        public final long getSegmentDurationUs(long j4, long j6) {
            List<SegmentTimelineElement> list = this.segmentTimeline;
            if (list != null) {
                return (list.get((int) (j4 - this.startNumber)).duration * 1000000) / this.timescale;
            }
            long segmentCount = getSegmentCount(j6);
            return (segmentCount == -1 || j4 != (getFirstSegmentNum() + segmentCount) - 1) ? (this.duration * 1000000) / this.timescale : j6 - getSegmentTimeUs(j4);
        }

        public long getSegmentNum(long j4, long j6) {
            long firstSegmentNum = getFirstSegmentNum();
            long segmentCount = getSegmentCount(j6);
            if (segmentCount != 0) {
                if (this.segmentTimeline != null) {
                    long j7 = (segmentCount + firstSegmentNum) - 1;
                    long j8 = firstSegmentNum;
                    while (j8 <= j7) {
                        long j9 = ((j7 - j8) / 2) + j8;
                        long segmentTimeUs = getSegmentTimeUs(j9);
                        if (segmentTimeUs < j4) {
                            j8 = j9 + 1;
                        } else {
                            if (segmentTimeUs <= j4) {
                                return j9;
                            }
                            j7 = j9 - 1;
                        }
                    }
                    return j8 == firstSegmentNum ? j8 : j7;
                }
                long j10 = (j4 / ((this.duration * 1000000) / this.timescale)) + this.startNumber;
                if (j10 >= firstSegmentNum) {
                    return segmentCount == -1 ? j10 : Math.min(j10, (firstSegmentNum + segmentCount) - 1);
                }
            }
            return firstSegmentNum;
        }

        public final long getSegmentTimeUs(long j4) {
            List<SegmentTimelineElement> list = this.segmentTimeline;
            return Util.scaleLargeTimestamp(list != null ? list.get((int) (j4 - this.startNumber)).startTime - this.presentationTimeOffset : (j4 - this.startNumber) * this.duration, 1000000L, this.timescale);
        }

        public abstract RangedUri getSegmentUrl(Representation representation, long j4);

        public boolean isExplicit() {
            return this.segmentTimeline != null;
        }
    }

    public static final class SegmentList extends MultiSegmentBase {
        final List<RangedUri> mediaSegments;

        public SegmentList(RangedUri rangedUri, long j4, long j6, long j7, long j8, List<SegmentTimelineElement> list, long j9, List<RangedUri> list2, long j10, long j11) {
            super(rangedUri, j4, j6, j7, j8, list, j9, j10, j11);
            this.mediaSegments = list2;
        }

        @Override // androidx.media3.exoplayer.dash.manifest.SegmentBase.MultiSegmentBase
        public long getSegmentCount(long j4) {
            return this.mediaSegments.size();
        }

        @Override // androidx.media3.exoplayer.dash.manifest.SegmentBase.MultiSegmentBase
        public RangedUri getSegmentUrl(Representation representation, long j4) {
            return this.mediaSegments.get((int) (j4 - this.startNumber));
        }

        @Override // androidx.media3.exoplayer.dash.manifest.SegmentBase.MultiSegmentBase
        public boolean isExplicit() {
            return true;
        }
    }

    public static final class SegmentTemplate extends MultiSegmentBase {
        final long endNumber;
        final UrlTemplate initializationTemplate;
        final UrlTemplate mediaTemplate;

        public SegmentTemplate(RangedUri rangedUri, long j4, long j6, long j7, long j8, long j9, List<SegmentTimelineElement> list, long j10, UrlTemplate urlTemplate, UrlTemplate urlTemplate2, long j11, long j12) {
            super(rangedUri, j4, j6, j7, j9, list, j10, j11, j12);
            this.initializationTemplate = urlTemplate;
            this.mediaTemplate = urlTemplate2;
            this.endNumber = j8;
        }

        @Override // androidx.media3.exoplayer.dash.manifest.SegmentBase
        public RangedUri getInitialization(Representation representation) {
            UrlTemplate urlTemplate = this.initializationTemplate;
            if (urlTemplate == null) {
                return super.getInitialization(representation);
            }
            Format format = representation.format;
            return new RangedUri(urlTemplate.buildUri(format.id, 0L, format.bitrate, 0L), 0L, -1L);
        }

        @Override // androidx.media3.exoplayer.dash.manifest.SegmentBase.MultiSegmentBase
        public long getSegmentCount(long j4) {
            if (this.segmentTimeline != null) {
                return r0.size();
            }
            long j6 = this.endNumber;
            if (j6 != -1) {
                return (j6 - this.startNumber) + 1;
            }
            if (j4 == C.TIME_UNSET) {
                return -1L;
            }
            BigInteger bigIntegerMultiply = BigInteger.valueOf(j4).multiply(BigInteger.valueOf(this.timescale));
            BigInteger bigIntegerMultiply2 = BigInteger.valueOf(this.duration).multiply(BigInteger.valueOf(1000000L));
            RoundingMode roundingMode = RoundingMode.CEILING;
            int i6 = a.f2093a;
            return new BigDecimal(bigIntegerMultiply).divide(new BigDecimal(bigIntegerMultiply2), 0, roundingMode).toBigIntegerExact().longValue();
        }

        @Override // androidx.media3.exoplayer.dash.manifest.SegmentBase.MultiSegmentBase
        public RangedUri getSegmentUrl(Representation representation, long j4) {
            List<SegmentTimelineElement> list = this.segmentTimeline;
            long j6 = list != null ? list.get((int) (j4 - this.startNumber)).startTime : (j4 - this.startNumber) * this.duration;
            UrlTemplate urlTemplate = this.mediaTemplate;
            Format format = representation.format;
            return new RangedUri(urlTemplate.buildUri(format.id, j4, format.bitrate, j6), 0L, -1L);
        }
    }

    public static final class SegmentTimelineElement {
        final long duration;
        final long startTime;

        public SegmentTimelineElement(long j4, long j6) {
            this.startTime = j4;
            this.duration = j6;
        }

        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj != null && SegmentTimelineElement.class == obj.getClass()) {
                SegmentTimelineElement segmentTimelineElement = (SegmentTimelineElement) obj;
                if (this.startTime == segmentTimelineElement.startTime && this.duration == segmentTimelineElement.duration) {
                    return true;
                }
            }
            return false;
        }

        public int hashCode() {
            return (((int) this.startTime) * 31) + ((int) this.duration);
        }
    }

    public SegmentBase(RangedUri rangedUri, long j4, long j6) {
        this.initialization = rangedUri;
        this.timescale = j4;
        this.presentationTimeOffset = j6;
    }

    public RangedUri getInitialization(Representation representation) {
        return this.initialization;
    }

    public long getPresentationTimeOffsetUs() {
        return Util.scaleLargeTimestamp(this.presentationTimeOffset, 1000000L, this.timescale);
    }

    public static class SingleSegmentBase extends SegmentBase {
        final long indexLength;
        final long indexStart;

        public SingleSegmentBase(RangedUri rangedUri, long j4, long j6, long j7, long j8) {
            super(rangedUri, j4, j6);
            this.indexStart = j7;
            this.indexLength = j8;
        }

        public RangedUri getIndex() {
            long j4 = this.indexLength;
            if (j4 <= 0) {
                return null;
            }
            return new RangedUri(null, this.indexStart, j4);
        }

        public SingleSegmentBase() {
            this(null, 1L, 0L, 0L, 0L);
        }
    }
}
