MlltSeeker.smali
.class final Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;
.super Ljava/lang/Object;
.source "MlltSeeker.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor$Seeker;
# instance fields
.field private final durationUs:J
.field private final referencePositions:[J
.field private final referenceTimesMs:[J
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method private constructor <init>([J[J)V
.registers 5
.param p1, "referencePositions" # [J
.param p2, "referenceTimesMs" # [J
.line 55
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 56
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;->referencePositions:[J
.line 57
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;->referenceTimesMs:[J
.line 60
array-length v0, p2
add-int/lit8 v0, v0, -0x1
aget-wide v0, p2, v0
invoke-static {v0, v1}, Lcom/google/android/exoplayer2/C;->msToUs(J)J
move-result-wide v0
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;->durationUs:J
.line 61
return-void
.end method
.method public static create(JLcom/google/android/exoplayer2/metadata/id3/MlltFrame;)Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;
.registers 14
.param p0, "firstFramePosition" # J
.param p2, "mlltFrame" # Lcom/google/android/exoplayer2/metadata/id3/MlltFrame;
.line 35
iget-object v0, p2, Lcom/google/android/exoplayer2/metadata/id3/MlltFrame;->bytesDeviations:[I
array-length v0, v0
.line 36
.local v0, "referenceCount":I
add-int/lit8 v1, v0, 0x1
new-array v1, v1, [J
.line 37
.local v1, "referencePositions":[J
add-int/lit8 v2, v0, 0x1
new-array v2, v2, [J
.line 38
.local v2, "referenceTimesMs":[J
const/4 v3, 0x0
aput-wide p0, v1, v3
.line 39
const-wide/16 v4, 0x0
aput-wide v4, v2, v3
.line 40
move-wide v3, p0
.line 41
.local v3, "position":J
const-wide/16 v5, 0x0
.line 42
.local v5, "timeMs":J
const/4 v7, 0x1
.local v7, "i":I
:goto_16
if-gt v7, v0, :cond_35
.line 43
iget v8, p2, Lcom/google/android/exoplayer2/metadata/id3/MlltFrame;->bytesBetweenReference:I
iget-object v9, p2, Lcom/google/android/exoplayer2/metadata/id3/MlltFrame;->bytesDeviations:[I
add-int/lit8 v10, v7, -0x1
aget v9, v9, v10
add-int/2addr v8, v9
int-to-long v8, v8
add-long/2addr v3, v8
.line 44
iget v8, p2, Lcom/google/android/exoplayer2/metadata/id3/MlltFrame;->millisecondsBetweenReference:I
iget-object v9, p2, Lcom/google/android/exoplayer2/metadata/id3/MlltFrame;->millisecondsDeviations:[I
add-int/lit8 v10, v7, -0x1
aget v9, v9, v10
add-int/2addr v8, v9
int-to-long v8, v8
add-long/2addr v5, v8
.line 45
aput-wide v3, v1, v7
.line 46
aput-wide v5, v2, v7
.line 42
add-int/lit8 v7, v7, 0x1
goto :goto_16
.line 48
.end local v7 # "i":I
:cond_35
new-instance v7, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;
invoke-direct {v7, v1, v2}, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;-><init>([J[J)V
return-object v7
.end method
.method private static linearlyInterpolate(J[J[J)Landroid/util/Pair;
.registers 22
.param p0, "x" # J
.param p2, "xReferences" # [J
.param p3, "yReferences" # [J
.annotation system Ldalvik/annotation/Signature;
value = {
"(J[J[J)",
"Landroid/util/Pair<",
"Ljava/lang/Long;",
"Ljava/lang/Long;",
">;"
}
.end annotation
.line 102
move-wide/from16 v0, p0
move-object/from16 v2, p2
.line 103
const/4 v3, 0x1
invoke-static {v2, v0, v1, v3, v3}, Lcom/google/android/exoplayer2/util/Util;->binarySearchFloor([JJZZ)I
move-result v3
.line 104
.local v3, "previousReferenceIndex":I
aget-wide v4, v2, v3
.line 105
.local v4, "xPreviousReference":J
aget-wide v6, p3, v3
.line 106
.local v6, "yPreviousReference":J
add-int/lit8 v8, v3, 0x1
.line 107
.local v8, "nextReferenceIndex":I
array-length v9, v2
if-ne v8, v9, :cond_1f
.line 108
invoke-static {v4, v5}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v9
invoke-static {v6, v7}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v10
invoke-static {v9, v10}, Landroid/util/Pair;->create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;
move-result-object v9
return-object v9
.line 110
:cond_1f
aget-wide v9, v2, v8
.line 111
.local v9, "xNextReference":J
aget-wide v11, p3, v8
.line 112
.local v11, "yNextReference":J
cmp-long v13, v9, v4
if-nez v13, :cond_2a
const-wide/16 v13, 0x0
goto :goto_3a
:cond_2a
long-to-double v13, v0
long-to-double v0, v4
invoke-static {v13, v14}, Ljava/lang/Double;->isNaN(D)Z
invoke-static {v0, v1}, Ljava/lang/Double;->isNaN(D)Z
sub-double/2addr v13, v0
sub-long v0, v9, v4
long-to-double v0, v0
invoke-static {v0, v1}, Ljava/lang/Double;->isNaN(D)Z
div-double/2addr v13, v0
:goto_3a
move-wide v0, v13
.line 116
.local v0, "proportion":D
sub-long v13, v11, v6
long-to-double v13, v13
invoke-static {v13, v14}, Ljava/lang/Double;->isNaN(D)Z
mul-double v13, v13, v0
double-to-long v13, v13
add-long/2addr v13, v6
.line 117
.local v13, "y":J
invoke-static/range {p0 .. p1}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v15
move-wide/from16 v16, v0
.end local v0 # "proportion":D
.local v16, "proportion":D
invoke-static {v13, v14}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v0
invoke-static {v15, v0}, Landroid/util/Pair;->create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;
move-result-object v0
return-object v0
.end method
# virtual methods
.method public getDataEndPosition()J
.registers 3
.line 123
const-wide/16 v0, -0x1
return-wide v0
.end method
.method public getDurationUs()J
.registers 3
.line 87
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;->durationUs:J
return-wide v0
.end method
.method public getSeekPoints(J)Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;
.registers 9
.param p1, "timeUs" # J
.line 70
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;->durationUs:J
const-wide/16 v2, 0x0
move-wide v0, p1
invoke-static/range {v0 .. v5}, Lcom/google/android/exoplayer2/util/Util;->constrainValue(JJJ)J
move-result-wide p1
.line 71
nop
.line 72
invoke-static {p1, p2}, Lcom/google/android/exoplayer2/C;->usToMs(J)J
move-result-wide v0
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;->referenceTimesMs:[J
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;->referencePositions:[J
invoke-static {v0, v1, v2, v3}, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;->linearlyInterpolate(J[J[J)Landroid/util/Pair;
move-result-object v0
.line 73
.local v0, "timeMsAndPosition":Landroid/util/Pair;, "Landroid/util/Pair<Ljava/lang/Long;Ljava/lang/Long;>;"
iget-object v1, v0, Landroid/util/Pair;->first:Ljava/lang/Object;
check-cast v1, Ljava/lang/Long;
invoke-virtual {v1}, Ljava/lang/Long;->longValue()J
move-result-wide v1
invoke-static {v1, v2}, Lcom/google/android/exoplayer2/C;->msToUs(J)J
move-result-wide p1
.line 74
iget-object v1, v0, Landroid/util/Pair;->second:Ljava/lang/Object;
check-cast v1, Ljava/lang/Long;
invoke-virtual {v1}, Ljava/lang/Long;->longValue()J
move-result-wide v1
.line 75
.local v1, "position":J
new-instance v3, Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;
new-instance v4, Lcom/google/android/exoplayer2/extractor/SeekPoint;
invoke-direct {v4, p1, p2, v1, v2}, Lcom/google/android/exoplayer2/extractor/SeekPoint;-><init>(JJ)V
invoke-direct {v3, v4}, Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;-><init>(Lcom/google/android/exoplayer2/extractor/SeekPoint;)V
return-object v3
.end method
.method public getTimeUs(J)J
.registers 6
.param p1, "position" # J
.line 80
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;->referencePositions:[J
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;->referenceTimesMs:[J
.line 81
invoke-static {p1, p2, v0, v1}, Lcom/google/android/exoplayer2/extractor/mp3/MlltSeeker;->linearlyInterpolate(J[J[J)Landroid/util/Pair;
move-result-object v0
.line 82
.local v0, "positionAndTimeMs":Landroid/util/Pair;, "Landroid/util/Pair<Ljava/lang/Long;Ljava/lang/Long;>;"
iget-object v1, v0, Landroid/util/Pair;->second:Ljava/lang/Object;
check-cast v1, Ljava/lang/Long;
invoke-virtual {v1}, Ljava/lang/Long;->longValue()J
move-result-wide v1
invoke-static {v1, v2}, Lcom/google/android/exoplayer2/C;->msToUs(J)J
move-result-wide v1
return-wide v1
.end method
.method public isSeekable()Z
.registers 2
.line 65
const/4 v0, 0x1
return v0
.end method