SonicAudioProcessor.smali
.class public final Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;
.super Ljava/lang/Object;
.source "SourceFile"
# interfaces
.implements Lcom/google/android/exoplayer2/audio/AudioProcessor;
# static fields
.field private static final CLOSE_THRESHOLD:F = 0.01f
.field public static final MAXIMUM_PITCH:F = 8.0f
.field public static final MAXIMUM_SPEED:F = 8.0f
.field public static final MINIMUM_PITCH:F = 0.1f
.field public static final MINIMUM_SPEED:F = 0.1f
.field private static final MIN_BYTES_FOR_SPEEDUP_CALCULATION:I = 0x400
.field public static final SAMPLE_RATE_NO_CHANGE:I = -0x1
# instance fields
.field private buffer:Ljava/nio/ByteBuffer;
.field private channelCount:I
.field private inputBytes:J
.field private inputEnded:Z
.field private outputBuffer:Ljava/nio/ByteBuffer;
.field private outputBytes:J
.field private outputSampleRateHz:I
.field private pendingOutputSampleRateHz:I
.field private pitch:F
.field private sampleRateHz:I
.field private shortBuffer:Ljava/nio/ShortBuffer;
.field private sonic:Lcom/google/android/exoplayer2/audio/Sonic;
.field private speed:F
# direct methods
.method public constructor <init>()V
.registers 3
.line 82
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/high16 v0, 0x3f800000 # 1.0f
.line 83
iput v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->speed:F
.line 84
iput v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->pitch:F
const/4 v0, -0x1
.line 85
iput v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->channelCount:I
.line 86
iput v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sampleRateHz:I
.line 87
iput v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputSampleRateHz:I
.line 88
sget-object v1, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
iput-object v1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
.line 89
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->asShortBuffer()Ljava/nio/ShortBuffer;
move-result-object v1
iput-object v1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->shortBuffer:Ljava/nio/ShortBuffer;
.line 90
sget-object v1, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
iput-object v1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
.line 91
iput v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->pendingOutputSampleRateHz:I
return-void
.end method
# virtual methods
.method public final configure(III)Z
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/audio/AudioProcessor$UnhandledFormatException;
}
.end annotation
const/4 v0, 0x2
if-ne p3, v0, :cond_1f
.line 153
iget p3, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->pendingOutputSampleRateHz:I
const/4 v0, -0x1
if-ne p3, v0, :cond_9
move p3, p1
.line 155
:cond_9
iget v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sampleRateHz:I
if-ne v0, p1, :cond_17
iget v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->channelCount:I
if-ne v0, p2, :cond_17
iget v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputSampleRateHz:I
if-ne v0, p3, :cond_17
const/4 p1, 0x0
return p1
.line 159
:cond_17
iput p1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sampleRateHz:I
.line 160
iput p2, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->channelCount:I
.line 161
iput p3, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputSampleRateHz:I
const/4 p1, 0x1
return p1
.line 151
:cond_1f
new-instance v0, Lcom/google/android/exoplayer2/audio/AudioProcessor$UnhandledFormatException;
invoke-direct {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/audio/AudioProcessor$UnhandledFormatException;-><init>(III)V
throw v0
.end method
.method public final flush()V
.registers 8
.line 231
new-instance v6, Lcom/google/android/exoplayer2/audio/Sonic;
iget v1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sampleRateHz:I
iget v2, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->channelCount:I
iget v3, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->speed:F
iget v4, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->pitch:F
iget v5, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputSampleRateHz:I
move-object v0, v6
invoke-direct/range {v0 .. v5}, Lcom/google/android/exoplayer2/audio/Sonic;-><init>(IIFFI)V
iput-object v6, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sonic:Lcom/google/android/exoplayer2/audio/Sonic;
.line 232
sget-object v0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
const-wide/16 v0, 0x0
.line 233
iput-wide v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->inputBytes:J
.line 234
iput-wide v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputBytes:J
const/4 v0, 0x0
.line 235
iput-boolean v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->inputEnded:Z
return-void
.end method
.method public final getOutput()Ljava/nio/ByteBuffer;
.registers 3
.line 219
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
.line 220
sget-object v1, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
iput-object v1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
return-object v0
.end method
.method public final getOutputChannelCount()I
.registers 2
.line 173
iget v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->channelCount:I
return v0
.end method
.method public final getOutputEncoding()I
.registers 2
const/4 v0, 0x2
return v0
.end method
.method public final getOutputSampleRateHz()I
.registers 2
.line 183
iget v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputSampleRateHz:I
return v0
.end method
.method public final isActive()Z
.registers 4
.line 167
iget v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->speed:F
const/high16 v1, 0x3f800000 # 1.0f
sub-float/2addr v0, v1
invoke-static {v0}, Ljava/lang/Math;->abs(F)F
move-result v0
const v2, 0x3c23d70a # 0.01f
cmpl-float v0, v0, v2
if-gez v0, :cond_24
iget v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->pitch:F
sub-float/2addr v0, v1
invoke-static {v0}, Ljava/lang/Math;->abs(F)F
move-result v0
cmpl-float v0, v0, v2
if-gez v0, :cond_24
iget v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputSampleRateHz:I
iget v1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sampleRateHz:I
if-eq v0, v1, :cond_22
goto :goto_24
:cond_22
const/4 v0, 0x0
return v0
:cond_24
:goto_24
const/4 v0, 0x1
return v0
.end method
.method public final isEnded()Z
.registers 2
.line 226
iget-boolean v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->inputEnded:Z
if-eqz v0, :cond_10
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sonic:Lcom/google/android/exoplayer2/audio/Sonic;
if-eqz v0, :cond_e
invoke-virtual {v0}, Lcom/google/android/exoplayer2/audio/Sonic;->getSamplesAvailable()I
move-result v0
if-nez v0, :cond_10
:cond_e
const/4 v0, 0x1
return v0
:cond_10
const/4 v0, 0x0
return v0
.end method
.method public final queueEndOfStream()V
.registers 2
.line 213
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sonic:Lcom/google/android/exoplayer2/audio/Sonic;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/audio/Sonic;->queueEndOfStream()V
const/4 v0, 0x1
.line 214
iput-boolean v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->inputEnded:Z
return-void
.end method
.method public final queueInput(Ljava/nio/ByteBuffer;)V
.registers 8
.line 188
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->hasRemaining()Z
move-result v0
if-eqz v0, :cond_21
.line 189
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->asShortBuffer()Ljava/nio/ShortBuffer;
move-result-object v0
.line 190
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I
move-result v1
.line 191
iget-wide v2, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->inputBytes:J
int-to-long v4, v1
add-long/2addr v2, v4
iput-wide v2, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->inputBytes:J
.line 192
iget-object v2, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sonic:Lcom/google/android/exoplayer2/audio/Sonic;
invoke-virtual {v2, v0}, Lcom/google/android/exoplayer2/audio/Sonic;->queueInput(Ljava/nio/ShortBuffer;)V
.line 193
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->position()I
move-result v0
add-int/2addr v0, v1
invoke-virtual {p1, v0}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 195
:cond_21
iget-object p1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sonic:Lcom/google/android/exoplayer2/audio/Sonic;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/audio/Sonic;->getSamplesAvailable()I
move-result p1
iget v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->channelCount:I
mul-int p1, p1, v0
mul-int/lit8 p1, p1, 0x2
if-lez p1, :cond_6c
.line 197
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->capacity()I
move-result v0
if-ge v0, p1, :cond_4c
.line 198
invoke-static {p1}, Ljava/nio/ByteBuffer;->allocateDirect(I)Ljava/nio/ByteBuffer;
move-result-object v0
invoke-static {}, Ljava/nio/ByteOrder;->nativeOrder()Ljava/nio/ByteOrder;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/nio/ByteBuffer;->order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
.line 199
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->asShortBuffer()Ljava/nio/ShortBuffer;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->shortBuffer:Ljava/nio/ShortBuffer;
goto :goto_56
.line 201
:cond_4c
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;
.line 202
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->shortBuffer:Ljava/nio/ShortBuffer;
invoke-virtual {v0}, Ljava/nio/ShortBuffer;->clear()Ljava/nio/Buffer;
.line 204
:goto_56
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sonic:Lcom/google/android/exoplayer2/audio/Sonic;
iget-object v1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->shortBuffer:Ljava/nio/ShortBuffer;
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/audio/Sonic;->getOutput(Ljava/nio/ShortBuffer;)V
.line 205
iget-wide v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputBytes:J
int-to-long v2, p1
add-long/2addr v0, v2
iput-wide v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputBytes:J
.line 206
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
invoke-virtual {v0, p1}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;
.line 207
iget-object p1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
iput-object p1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
:cond_6c
return-void
.end method
.method public final reset()V
.registers 4
const/4 v0, 0x0
.line 240
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sonic:Lcom/google/android/exoplayer2/audio/Sonic;
.line 241
sget-object v0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
.line 242
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->asShortBuffer()Ljava/nio/ShortBuffer;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->shortBuffer:Ljava/nio/ShortBuffer;
.line 243
sget-object v0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
const/4 v0, -0x1
.line 244
iput v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->channelCount:I
.line 245
iput v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sampleRateHz:I
.line 246
iput v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputSampleRateHz:I
const-wide/16 v1, 0x0
.line 247
iput-wide v1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->inputBytes:J
.line 248
iput-wide v1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputBytes:J
const/4 v1, 0x0
.line 249
iput-boolean v1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->inputEnded:Z
.line 250
iput v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->pendingOutputSampleRateHz:I
return-void
.end method
.method public final scaleDurationForSpeedup(J)J
.registers 18
move-object v0, p0
.line 137
iget-wide v5, v0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputBytes:J
const-wide/16 v1, 0x400
cmp-long v3, v5, v1
if-ltz v3, :cond_27
.line 138
iget v1, v0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->outputSampleRateHz:I
iget v2, v0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->sampleRateHz:I
if-ne v1, v2, :cond_18
iget-wide v3, v0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->inputBytes:J
move-wide/from16 v1, p1
.line 139
invoke-static/range {v1 .. v6}, Lcom/google/android/exoplayer2/util/Util;->scaleLargeTimestamp(JJJ)J
move-result-wide v1
return-wide v1
:cond_18
iget-wide v3, v0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->inputBytes:J
int-to-long v7, v1
mul-long v11, v3, v7
int-to-long v1, v2
mul-long v13, v5, v1
move-wide/from16 v9, p1
.line 140
invoke-static/range {v9 .. v14}, Lcom/google/android/exoplayer2/util/Util;->scaleLargeTimestamp(JJJ)J
move-result-wide v1
return-wide v1
.line 143
:cond_27
iget v1, v0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->speed:F
float-to-double v1, v1
move-wide/from16 v3, p1
long-to-double v3, v3
invoke-static {v1, v2}, Ljava/lang/Double;->isNaN(D)Z
invoke-static {v3, v4}, Ljava/lang/Double;->isNaN(D)Z
mul-double v1, v1, v3
double-to-long v1, v1
return-wide v1
.end method
.method public final setOutputSampleRateHz(I)V
.registers 2
.line 125
iput p1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->pendingOutputSampleRateHz:I
return-void
.end method
.method public final setPitch(F)F
.registers 4
const v0, 0x3dcccccd # 0.1f
const/high16 v1, 0x41000000 # 8.0f
.line 112
invoke-static {p1, v0, v1}, Lcom/google/android/exoplayer2/util/Util;->constrainValue(FFF)F
move-result v0
iput v0, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->pitch:F
return p1
.end method
.method public final setSpeed(F)F
.registers 4
const v0, 0x3dcccccd # 0.1f
const/high16 v1, 0x41000000 # 8.0f
.line 101
invoke-static {p1, v0, v1}, Lcom/google/android/exoplayer2/util/Util;->constrainValue(FFF)F
move-result p1
iput p1, p0, Lcom/google/android/exoplayer2/audio/SonicAudioProcessor;->speed:F
return p1
.end method