AudioTrack.smali
.class public final Lcom/google/android/exoplayer2/audio/AudioTrack;
.super Ljava/lang/Object;
.source "AudioTrack.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtilV23;,
Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtilV19;,
Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;,
Lcom/google/android/exoplayer2/audio/AudioTrack$InvalidAudioTrackTimestampException;,
Lcom/google/android/exoplayer2/audio/AudioTrack$WriteException;,
Lcom/google/android/exoplayer2/audio/AudioTrack$InitializationException;,
Lcom/google/android/exoplayer2/audio/AudioTrack$Listener;
}
.end annotation
# static fields
.field private static final BUFFER_MULTIPLICATION_FACTOR:I = 0x4
.field public static final CURRENT_POSITION_NOT_SET:J = -0x8000000000000000L
.field private static final ERROR_BAD_VALUE:I = -0x2
.field private static final MAX_AUDIO_TIMESTAMP_OFFSET_US:J = 0x4c4b40L
.field private static final MAX_BUFFER_DURATION_US:J = 0xb71b0L
.field private static final MAX_LATENCY_US:J = 0x4c4b40L
.field private static final MAX_PLAYHEAD_OFFSET_COUNT:I = 0xa
.field private static final MIN_BUFFER_DURATION_US:J = 0x3d090L
.field private static final MIN_PLAYHEAD_OFFSET_SAMPLE_INTERVAL_US:I = 0x7530
.field private static final MIN_TIMESTAMP_SAMPLE_INTERVAL_US:I = 0x7a120
.field private static final MODE_STATIC:I = 0x0
.field private static final MODE_STREAM:I = 0x1
.field private static final PASSTHROUGH_BUFFER_DURATION_US:J = 0x3d090L
.field private static final PLAYSTATE_PAUSED:I = 0x2
.field private static final PLAYSTATE_PLAYING:I = 0x3
.field private static final PLAYSTATE_STOPPED:I = 0x1
.field private static final START_IN_SYNC:I = 0x1
.field private static final START_NEED_SYNC:I = 0x2
.field private static final START_NOT_SET:I = 0x0
.field private static final STATE_INITIALIZED:I = 0x1
.field private static final TAG:Ljava/lang/String; = "AudioTrack"
.field private static final WRITE_NON_BLOCKING:I = 0x1
.field public static enablePreV21AudioSessionWorkaround:Z = false
.field public static failOnSpuriousAudioTimestamp:Z = false
# instance fields
.field private final audioCapabilities:Lcom/google/android/exoplayer2/audio/AudioCapabilities;
.field private audioSessionId:I
.field private audioTimestampSet:Z
.field private audioTrack:Landroid/media/AudioTrack;
.field private final audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
.field private avSyncHeader:Ljava/nio/ByteBuffer;
.field private bufferSize:I
.field private bufferSizeUs:J
.field private bytesUntilNextAvSync:I
.field private channelConfig:I
.field private currentSourceBuffer:Ljava/nio/ByteBuffer;
.field private framesPerEncodedSample:I
.field private getLatencyMethod:Ljava/lang/reflect/Method;
.field private hasData:Z
.field private keepSessionIdAudioTrack:Landroid/media/AudioTrack;
.field private lastFeedElapsedRealtimeMs:J
.field private lastPlayheadSampleTimeUs:J
.field private lastTimestampSampleTimeUs:J
.field private latencyUs:J
.field private final listener:Lcom/google/android/exoplayer2/audio/AudioTrack$Listener;
.field private nextPlayheadOffsetIndex:I
.field private passthrough:Z
.field private pcmFrameSize:I
.field private playheadOffsetCount:I
.field private final playheadOffsets:[J
.field private playing:Z
.field private final releasingConditionVariable:Landroid/os/ConditionVariable;
.field private resampledBuffer:Ljava/nio/ByteBuffer;
.field private resumeSystemTimeUs:J
.field private sampleRate:I
.field private smoothedPlayheadOffsetUs:J
.field private sourceEncoding:I
.field private startMediaTimeState:I
.field private startMediaTimeUs:J
.field private streamType:I
.field private submittedEncodedFrames:J
.field private submittedPcmBytes:J
.field private targetEncoding:I
.field private temporaryBuffer:[B
.field private temporaryBufferOffset:I
.field private tunneling:Z
.field private useResampledBuffer:Z
.field private volume:F
# direct methods
.method static constructor <clinit>()V
.registers 0
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/audio/AudioCapabilities;Lcom/google/android/exoplayer2/audio/AudioTrack$Listener;)V
.registers 5
.line 319
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 320
iput-object p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioCapabilities:Lcom/google/android/exoplayer2/audio/AudioCapabilities;
.line 321
iput-object p2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->listener:Lcom/google/android/exoplayer2/audio/AudioTrack$Listener;
.line 322
new-instance p1, Landroid/os/ConditionVariable;
const/4 p2, 0x1
invoke-direct {p1, p2}, Landroid/os/ConditionVariable;-><init>(Z)V
iput-object p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->releasingConditionVariable:Landroid/os/ConditionVariable;
.line 323
sget p1, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/4 p2, 0x0
const/16 v0, 0x12
if-lt p1, v0, :cond_25
.line 325
:try_start_16
const-class p1, Landroid/media/AudioTrack;
const-string v0, "getLatency"
move-object v1, p2
check-cast v1, [Ljava/lang/Class;
.line 326
invoke-virtual {p1, v0, v1}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->getLatencyMethod:Ljava/lang/reflect/Method;
:try_end_23
.catch Ljava/lang/NoSuchMethodException; {:try_start_16 .. :try_end_23} :catch_24
goto :goto_25
:catch_24
nop
.line 331
:cond_25
:goto_25
sget p1, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v0, 0x17
if-lt p1, v0, :cond_33
.line 332
new-instance p1, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtilV23;
invoke-direct {p1}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtilV23;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
goto :goto_48
.line 333
:cond_33
sget p1, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v0, 0x13
if-lt p1, v0, :cond_41
.line 334
new-instance p1, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtilV19;
invoke-direct {p1}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtilV19;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
goto :goto_48
.line 336
:cond_41
new-instance p1, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-direct {p1, p2}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;-><init>(Lcom/google/android/exoplayer2/audio/AudioTrack$1;)V
iput-object p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
:goto_48
const/16 p1, 0xa
new-array p1, p1, [J
.line 338
iput-object p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playheadOffsets:[J
const/high16 p1, 0x3f800000 # 1.0f
.line 339
iput p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->volume:F
const/4 p1, 0x0
.line 340
iput p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeState:I
const/4 p2, 0x3
.line 341
iput p2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->streamType:I
.line 342
iput p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
return-void
.end method
.method static synthetic access$100(Lcom/google/android/exoplayer2/audio/AudioTrack;)Landroid/os/ConditionVariable;
.registers 1
.line 61
iget-object p0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->releasingConditionVariable:Landroid/os/ConditionVariable;
return-object p0
.end method
.method private checkAudioTrackInitialized()V
.registers 6
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/audio/AudioTrack$InitializationException;
}
.end annotation
.line 1045
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->getState()I
move-result v0
const/4 v1, 0x1
if-ne v0, v1, :cond_a
return-void
:cond_a
const/4 v1, 0x0
.line 1051
:try_start_b
iget-object v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v2}, Landroid/media/AudioTrack;->release()V
:try_end_10
.catch Ljava/lang/Exception; {:try_start_b .. :try_end_10} :catch_15
.catchall {:try_start_b .. :try_end_10} :catchall_11
goto :goto_15
:catchall_11
move-exception v0
.line 1056
iput-object v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
throw v0
:catch_15
:goto_15
iput-object v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 1059
new-instance v1, Lcom/google/android/exoplayer2/audio/AudioTrack$InitializationException;
iget v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->sampleRate:I
iget v3, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->channelConfig:I
iget v4, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSize:I
invoke-direct {v1, v0, v2, v3, v4}, Lcom/google/android/exoplayer2/audio/AudioTrack$InitializationException;-><init>(IIII)V
throw v1
.end method
.method private static createHwAvSyncAudioTrackV21(IIIII)Landroid/media/AudioTrack;
.registers 12
.line 1118
new-instance v0, Landroid/media/AudioAttributes$Builder;
invoke-direct {v0}, Landroid/media/AudioAttributes$Builder;-><init>()V
const/4 v1, 0x1
.line 1119
invoke-virtual {v0, v1}, Landroid/media/AudioAttributes$Builder;->setUsage(I)Landroid/media/AudioAttributes$Builder;
move-result-object v0
const/4 v1, 0x3
.line 1120
invoke-virtual {v0, v1}, Landroid/media/AudioAttributes$Builder;->setContentType(I)Landroid/media/AudioAttributes$Builder;
move-result-object v0
const/16 v1, 0x10
.line 1121
invoke-virtual {v0, v1}, Landroid/media/AudioAttributes$Builder;->setFlags(I)Landroid/media/AudioAttributes$Builder;
move-result-object v0
.line 1122
invoke-virtual {v0}, Landroid/media/AudioAttributes$Builder;->build()Landroid/media/AudioAttributes;
move-result-object v2
.line 1123
new-instance v0, Landroid/media/AudioFormat$Builder;
invoke-direct {v0}, Landroid/media/AudioFormat$Builder;-><init>()V
.line 1124
invoke-virtual {v0, p1}, Landroid/media/AudioFormat$Builder;->setChannelMask(I)Landroid/media/AudioFormat$Builder;
move-result-object p1
.line 1125
invoke-virtual {p1, p2}, Landroid/media/AudioFormat$Builder;->setEncoding(I)Landroid/media/AudioFormat$Builder;
move-result-object p1
.line 1126
invoke-virtual {p1, p0}, Landroid/media/AudioFormat$Builder;->setSampleRate(I)Landroid/media/AudioFormat$Builder;
move-result-object p0
.line 1127
invoke-virtual {p0}, Landroid/media/AudioFormat$Builder;->build()Landroid/media/AudioFormat;
move-result-object v3
.line 1128
new-instance p0, Landroid/media/AudioTrack;
const/4 v5, 0x1
move-object v1, p0
move v4, p3
move v6, p4
invoke-direct/range {v1 .. v6}, Landroid/media/AudioTrack;-><init>(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;III)V
return-object p0
.end method
.method private durationUsToFrames(J)J
.registers 5
.line 1075
iget v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->sampleRate:I
int-to-long v0, v0
mul-long p1, p1, v0
const-wide/32 v0, 0xf4240
div-long/2addr p1, v0
return-wide p1
.end method
.method private framesToDurationUs(J)J
.registers 5
const-wide/32 v0, 0xf4240
mul-long p1, p1, v0
.line 1071
iget v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->sampleRate:I
int-to-long v0, v0
div-long/2addr p1, v0
return-wide p1
.end method
.method private static getEncodingForMimeType(Ljava/lang/String;)I
.registers 6
.line 1210
invoke-virtual {p0}, Ljava/lang/String;->hashCode()I
move-result v0
const/4 v1, 0x0
const/4 v2, 0x3
const/4 v3, 0x2
const/4 v4, 0x1
sparse-switch v0, :sswitch_data_48
goto :goto_34
:sswitch_c
const-string v0, "audio/vnd.dts.hd"
invoke-virtual {p0, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result p0
if-eqz p0, :cond_34
const/4 p0, 0x3
goto :goto_35
:sswitch_16
const-string v0, "audio/eac3"
invoke-virtual {p0, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result p0
if-eqz p0, :cond_34
const/4 p0, 0x1
goto :goto_35
:sswitch_20
const-string v0, "audio/ac3"
invoke-virtual {p0, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result p0
if-eqz p0, :cond_34
const/4 p0, 0x0
goto :goto_35
:sswitch_2a
const-string v0, "audio/vnd.dts"
invoke-virtual {p0, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result p0
if-eqz p0, :cond_34
const/4 p0, 0x2
goto :goto_35
:cond_34
:goto_34
const/4 p0, -0x1
:goto_35
if-eqz p0, :cond_45
if-eq p0, v4, :cond_43
if-eq p0, v3, :cond_41
if-eq p0, v2, :cond_3e
return v1
:cond_3e
const/16 p0, 0x8
return p0
:cond_41
const/4 p0, 0x7
return p0
:cond_43
const/4 p0, 0x6
return p0
:cond_45
const/4 p0, 0x5
return p0
nop
:sswitch_data_48
.sparse-switch
-0x41455b98 -> :sswitch_2a
0xb269698 -> :sswitch_20
0x59ae0c65 -> :sswitch_16
0x59c2dc42 -> :sswitch_c
.end sparse-switch
.end method
.method private static getFramesPerEncodedSample(ILjava/nio/ByteBuffer;)I
.registers 4
const/4 v0, 0x7
if-eq p0, v0, :cond_2f
const/16 v0, 0x8
if-ne p0, v0, :cond_8
goto :goto_2f
:cond_8
const/4 v0, 0x5
if-ne p0, v0, :cond_10
.line 1228
invoke-static {}, Lcom/google/android/exoplayer2/audio/Ac3Util;->getAc3SyncframeAudioSampleCount()I
move-result p0
return p0
:cond_10
const/4 v0, 0x6
if-ne p0, v0, :cond_18
.line 1230
invoke-static {p1}, Lcom/google/android/exoplayer2/audio/Ac3Util;->parseEAc3SyncframeAudioSampleCount(Ljava/nio/ByteBuffer;)I
move-result p0
return p0
.line 1232
:cond_18
new-instance p1, Ljava/lang/IllegalStateException;
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "Unexpected audio encoding: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p0
invoke-direct {p1, p0}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p1
.line 1226
:cond_2f
:goto_2f
invoke-static {p1}, Lcom/google/android/exoplayer2/audio/DtsUtil;->parseDtsAudioSampleCount(Ljava/nio/ByteBuffer;)I
move-result p0
return p0
.end method
.method private getSubmittedFrames()J
.registers 3
.line 1079
iget-boolean v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->passthrough:Z
if-eqz v0, :cond_7
iget-wide v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->submittedEncodedFrames:J
goto :goto_d
:cond_7
iget-wide v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->submittedPcmBytes:J
invoke-direct {p0, v0, v1}, Lcom/google/android/exoplayer2/audio/AudioTrack;->pcmBytesToFrames(J)J
move-result-wide v0
:goto_d
return-wide v0
.end method
.method private hasCurrentPositionUs()Z
.registers 2
.line 950
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->isInitialized()Z
move-result v0
if-eqz v0, :cond_c
iget v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeState:I
if-eqz v0, :cond_c
const/4 v0, 0x1
goto :goto_d
:cond_c
const/4 v0, 0x0
:goto_d
return v0
.end method
.method private initialize()V
.registers 18
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/audio/AudioTrack$InitializationException;
}
.end annotation
move-object/from16 v0, p0
.line 531
iget-object v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->releasingConditionVariable:Landroid/os/ConditionVariable;
invoke-virtual {v1}, Landroid/os/ConditionVariable;->block()V
.line 533
iget-boolean v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->tunneling:Z
if-eqz v1, :cond_1c
.line 534
iget v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->sampleRate:I
iget v2, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->channelConfig:I
iget v3, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->targetEncoding:I
iget v4, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSize:I
iget v5, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
invoke-static {v1, v2, v3, v4, v5}, Lcom/google/android/exoplayer2/audio/AudioTrack;->createHwAvSyncAudioTrackV21(IIIII)Landroid/media/AudioTrack;
move-result-object v1
iput-object v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
goto :goto_4b
.line 536
:cond_1c
iget v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
if-nez v1, :cond_34
.line 537
new-instance v1, Landroid/media/AudioTrack;
iget v3, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->streamType:I
iget v4, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->sampleRate:I
iget v5, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->channelConfig:I
iget v6, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->targetEncoding:I
iget v7, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSize:I
const/4 v8, 0x1
move-object v2, v1
invoke-direct/range {v2 .. v8}, Landroid/media/AudioTrack;-><init>(IIIIII)V
iput-object v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
goto :goto_4b
.line 541
:cond_34
new-instance v1, Landroid/media/AudioTrack;
iget v10, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->streamType:I
iget v11, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->sampleRate:I
iget v12, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->channelConfig:I
iget v13, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->targetEncoding:I
iget v14, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSize:I
const/4 v15, 0x1
iget v2, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
move-object v9, v1
move/from16 v16, v2
invoke-direct/range {v9 .. v16}, Landroid/media/AudioTrack;-><init>(IIIIIII)V
iput-object v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 544
:goto_4b
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->checkAudioTrackInitialized()V
.line 546
iget-object v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v1}, Landroid/media/AudioTrack;->getAudioSessionId()I
move-result v1
.line 547
sget-boolean v2, Lcom/google/android/exoplayer2/audio/AudioTrack;->enablePreV21AudioSessionWorkaround:Z
if-eqz v2, :cond_80
.line 548
sget v2, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v3, 0x15
if-ge v2, v3, :cond_80
.line 551
iget-object v2, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->keepSessionIdAudioTrack:Landroid/media/AudioTrack;
if-eqz v2, :cond_6b
.line 552
invoke-virtual {v2}, Landroid/media/AudioTrack;->getAudioSessionId()I
move-result v2
if-eq v1, v2, :cond_6b
.line 553
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->releaseKeepSessionIdAudioTrack()V
.line 555
:cond_6b
iget-object v2, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->keepSessionIdAudioTrack:Landroid/media/AudioTrack;
if-nez v2, :cond_80
const/16 v4, 0xfa0
const/4 v5, 0x4
const/4 v6, 0x2
const/4 v7, 0x2
.line 560
new-instance v10, Landroid/media/AudioTrack;
iget v3, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->streamType:I
const/4 v8, 0x0
move-object v2, v10
move v9, v1
invoke-direct/range {v2 .. v9}, Landroid/media/AudioTrack;-><init>(IIIIIII)V
iput-object v10, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->keepSessionIdAudioTrack:Landroid/media/AudioTrack;
.line 565
:cond_80
iget v2, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
if-eq v2, v1, :cond_8b
.line 566
iput v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
.line 567
iget-object v2, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->listener:Lcom/google/android/exoplayer2/audio/AudioTrack$Listener;
invoke-interface {v2, v1}, Lcom/google/android/exoplayer2/audio/AudioTrack$Listener;->onAudioSessionId(I)V
.line 570
:cond_8b
iget-object v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
iget-object v2, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->needsPassthroughWorkarounds()Z
move-result v3
invoke-virtual {v1, v2, v3}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->reconfigure(Landroid/media/AudioTrack;Z)V
.line 571
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->setVolumeInternal()V
const/4 v1, 0x0
.line 572
iput-boolean v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->hasData:Z
return-void
.end method
.method private isInitialized()Z
.registers 2
.line 1063
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
if-eqz v0, :cond_6
const/4 v0, 0x1
goto :goto_7
:cond_6
const/4 v0, 0x0
:goto_7
return v0
.end method
.method private maybeSampleSyncParams()V
.registers 18
move-object/from16 v0, p0
.line 957
iget-object v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->getPlaybackHeadPositionUs()J
move-result-wide v1
const-wide/16 v3, 0x0
cmp-long v5, v1, v3
if-nez v5, :cond_f
return-void
.line 962
:cond_f
invoke-static {}, Ljava/lang/System;->nanoTime()J
move-result-wide v5
const-wide/16 v7, 0x3e8
div-long/2addr v5, v7
.line 963
iget-wide v9, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->lastPlayheadSampleTimeUs:J
sub-long v9, v5, v9
const-wide/16 v11, 0x7530
const/4 v13, 0x0
cmp-long v14, v9, v11
if-ltz v14, :cond_51
.line 965
iget-object v9, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playheadOffsets:[J
iget v10, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->nextPlayheadOffsetIndex:I
sub-long v11, v1, v5
aput-wide v11, v9, v10
add-int/lit8 v10, v10, 0x1
const/16 v9, 0xa
.line 966
rem-int/2addr v10, v9
iput v10, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->nextPlayheadOffsetIndex:I
.line 967
iget v10, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playheadOffsetCount:I
if-ge v10, v9, :cond_38
add-int/lit8 v10, v10, 0x1
.line 968
iput v10, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playheadOffsetCount:I
.line 970
:cond_38
iput-wide v5, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->lastPlayheadSampleTimeUs:J
.line 971
iput-wide v3, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->smoothedPlayheadOffsetUs:J
const/4 v9, 0x0
.line 972
:goto_3d
iget v10, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playheadOffsetCount:I
if-ge v9, v10, :cond_51
.line 973
iget-wide v11, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->smoothedPlayheadOffsetUs:J
iget-object v14, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playheadOffsets:[J
aget-wide v15, v14, v9
int-to-long v3, v10
div-long/2addr v15, v3
add-long/2addr v11, v15
iput-wide v11, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->smoothedPlayheadOffsetUs:J
add-int/lit8 v9, v9, 0x1
const-wide/16 v3, 0x0
goto :goto_3d
.line 977
:cond_51
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->needsPassthroughWorkarounds()Z
move-result v3
if-eqz v3, :cond_58
return-void
.line 983
:cond_58
iget-wide v3, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->lastTimestampSampleTimeUs:J
sub-long v3, v5, v3
const-wide/32 v9, 0x7a120
cmp-long v11, v3, v9
if-ltz v11, :cond_155
.line 984
iget-object v3, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-virtual {v3}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->updateTimestamp()Z
move-result v3
iput-boolean v3, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTimestampSet:Z
const-string v4, "AudioTrack"
const-wide/32 v9, 0x4c4b40
if-eqz v3, :cond_108
.line 987
iget-object v3, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-virtual {v3}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->getTimestampNanoTime()J
move-result-wide v11
div-long/2addr v11, v7
.line 988
iget-object v3, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-virtual {v3}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->getTimestampFramePosition()J
move-result-wide v14
.line 989
iget-wide v7, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->resumeSystemTimeUs:J
cmp-long v3, v11, v7
if-gez v3, :cond_89
.line 991
iput-boolean v13, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTimestampSet:Z
goto/16 :goto_108
:cond_89
sub-long v7, v11, v5
.line 992
invoke-static {v7, v8}, Ljava/lang/Math;->abs(J)J
move-result-wide v7
const-string v3, ", "
cmp-long v16, v7, v9
if-lez v16, :cond_c8
.line 994
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
const-string v8, "Spurious audio timestamp (system clock mismatch): "
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7, v14, v15}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v7, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7, v11, v12}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v7, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7, v5, v6}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v7, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
.line 997
sget-boolean v2, Lcom/google/android/exoplayer2/audio/AudioTrack;->failOnSpuriousAudioTimestamp:Z
if-nez v2, :cond_c2
.line 1000
invoke-static {v4, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
.line 1001
iput-boolean v13, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTimestampSet:Z
goto :goto_108
.line 998
:cond_c2
new-instance v2, Lcom/google/android/exoplayer2/audio/AudioTrack$InvalidAudioTrackTimestampException;
invoke-direct {v2, v1}, Lcom/google/android/exoplayer2/audio/AudioTrack$InvalidAudioTrackTimestampException;-><init>(Ljava/lang/String;)V
throw v2
.line 1002
:cond_c8
invoke-direct {v0, v14, v15}, Lcom/google/android/exoplayer2/audio/AudioTrack;->framesToDurationUs(J)J
move-result-wide v7
sub-long/2addr v7, v1
invoke-static {v7, v8}, Ljava/lang/Math;->abs(J)J
move-result-wide v7
cmp-long v16, v7, v9
if-lez v16, :cond_108
.line 1005
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
const-string v8, "Spurious audio timestamp (frame position mismatch): "
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7, v14, v15}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v7, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7, v11, v12}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v7, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7, v5, v6}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v7, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
.line 1008
sget-boolean v2, Lcom/google/android/exoplayer2/audio/AudioTrack;->failOnSpuriousAudioTimestamp:Z
if-nez v2, :cond_102
.line 1011
invoke-static {v4, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
.line 1012
iput-boolean v13, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTimestampSet:Z
goto :goto_108
.line 1009
:cond_102
new-instance v2, Lcom/google/android/exoplayer2/audio/AudioTrack$InvalidAudioTrackTimestampException;
invoke-direct {v2, v1}, Lcom/google/android/exoplayer2/audio/AudioTrack$InvalidAudioTrackTimestampException;-><init>(Ljava/lang/String;)V
throw v2
.line 1015
:cond_108
:goto_108
iget-object v1, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->getLatencyMethod:Ljava/lang/reflect/Method;
if-eqz v1, :cond_153
iget-boolean v2, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->passthrough:Z
if-nez v2, :cond_153
const/4 v2, 0x0
.line 1019
:try_start_111
iget-object v3, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
move-object v7, v2
check-cast v7, [Ljava/lang/Object;
invoke-virtual {v1, v3, v7}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/lang/Integer;
invoke-virtual {v1}, Ljava/lang/Integer;->intValue()I
move-result v1
int-to-long v7, v1
const-wide/16 v11, 0x3e8
mul-long v7, v7, v11
iget-wide v11, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSizeUs:J
sub-long/2addr v7, v11
iput-wide v7, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->latencyUs:J
const-wide/16 v11, 0x0
.line 1022
invoke-static {v7, v8, v11, v12}, Ljava/lang/Math;->max(JJ)J
move-result-wide v7
iput-wide v7, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->latencyUs:J
cmp-long v1, v7, v9
if-lez v1, :cond_153
.line 1025
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v3, "Ignoring impossibly large audio latency: "
invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-wide v7, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->latencyUs:J
invoke-virtual {v1, v7, v8}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-static {v4, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
const-wide/16 v3, 0x0
.line 1026
iput-wide v3, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->latencyUs:J
:try_end_150
.catch Ljava/lang/Exception; {:try_start_111 .. :try_end_150} :catch_151
goto :goto_153
.line 1030
:catch_151
iput-object v2, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->getLatencyMethod:Ljava/lang/reflect/Method;
.line 1033
:cond_153
:goto_153
iput-wide v5, v0, Lcom/google/android/exoplayer2/audio/AudioTrack;->lastTimestampSampleTimeUs:J
:cond_155
return-void
.end method
.method private needsPassthroughWorkarounds()Z
.registers 3
.line 1096
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x17
if-ge v0, v1, :cond_10
iget v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->targetEncoding:I
const/4 v1, 0x5
if-eq v0, v1, :cond_e
const/4 v1, 0x6
if-ne v0, v1, :cond_10
:cond_e
const/4 v0, 0x1
goto :goto_11
:cond_10
const/4 v0, 0x0
:goto_11
return v0
.end method
.method private overrideHasPendingData()Z
.registers 3
.line 1107
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->needsPassthroughWorkarounds()Z
move-result v0
if-eqz v0, :cond_19
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 1108
invoke-virtual {v0}, Landroid/media/AudioTrack;->getPlayState()I
move-result v0
const/4 v1, 0x2
if-ne v0, v1, :cond_19
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 1109
invoke-virtual {v0}, Landroid/media/AudioTrack;->getPlaybackHeadPosition()I
move-result v0
if-nez v0, :cond_19
const/4 v0, 0x1
goto :goto_1a
:cond_19
const/4 v0, 0x0
:goto_1a
return v0
.end method
.method private pcmBytesToFrames(J)J
.registers 5
.line 1067
iget v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->pcmFrameSize:I
int-to-long v0, v0
div-long/2addr p1, v0
return-wide p1
.end method
.method private releaseKeepSessionIdAudioTrack()V
.registers 3
.line 931
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->keepSessionIdAudioTrack:Landroid/media/AudioTrack;
if-nez v0, :cond_5
return-void
:cond_5
const/4 v1, 0x0
.line 937
iput-object v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->keepSessionIdAudioTrack:Landroid/media/AudioTrack;
.line 938
new-instance v1, Lcom/google/android/exoplayer2/audio/AudioTrack$2;
invoke-direct {v1, p0, v0}, Lcom/google/android/exoplayer2/audio/AudioTrack$2;-><init>(Lcom/google/android/exoplayer2/audio/AudioTrack;Landroid/media/AudioTrack;)V
.line 943
invoke-virtual {v1}, Lcom/google/android/exoplayer2/audio/AudioTrack$2;->start()V
return-void
.end method
.method private static resampleTo16BitPcm(Ljava/nio/ByteBuffer;ILjava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
.registers 10
.line 1143
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->position()I
move-result v0
.line 1144
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->limit()I
move-result v1
sub-int v2, v1, v0
const/high16 v3, 0x40000000 # 2.0f
const/high16 v4, -0x80000000
const/4 v5, 0x3
if-eq p1, v4, :cond_1e
if-eq p1, v5, :cond_1f
if-ne p1, v3, :cond_18
.line 1156
div-int/lit8 v2, v2, 0x2
goto :goto_21
.line 1163
:cond_18
new-instance p0, Ljava/lang/IllegalStateException;
invoke-direct {p0}, Ljava/lang/IllegalStateException;-><init>()V
throw p0
.line 1153
:cond_1e
div-int/2addr v2, v5
:cond_1f
mul-int/lit8 v2, v2, 0x2
:goto_21
if-eqz p2, :cond_29
.line 1167
invoke-virtual {p2}, Ljava/nio/ByteBuffer;->capacity()I
move-result v6
if-ge v6, v2, :cond_2d
.line 1168
:cond_29
invoke-static {v2}, Ljava/nio/ByteBuffer;->allocateDirect(I)Ljava/nio/ByteBuffer;
move-result-object p2
:cond_2d
const/4 v6, 0x0
.line 1170
invoke-virtual {p2, v6}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 1171
invoke-virtual {p2, v2}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;
if-eq p1, v4, :cond_6b
if-eq p1, v5, :cond_57
if-ne p1, v3, :cond_51
:goto_3a
if-ge v0, v1, :cond_82
add-int/lit8 p1, v0, 0x2
.line 1192
invoke-virtual {p0, p1}, Ljava/nio/ByteBuffer;->get(I)B
move-result p1
invoke-virtual {p2, p1}, Ljava/nio/ByteBuffer;->put(B)Ljava/nio/ByteBuffer;
add-int/lit8 p1, v0, 0x3
.line 1193
invoke-virtual {p0, p1}, Ljava/nio/ByteBuffer;->get(I)B
move-result p1
invoke-virtual {p2, p1}, Ljava/nio/ByteBuffer;->put(B)Ljava/nio/ByteBuffer;
add-int/lit8 v0, v0, 0x4
goto :goto_3a
.line 1201
:cond_51
new-instance p0, Ljava/lang/IllegalStateException;
invoke-direct {p0}, Ljava/lang/IllegalStateException;-><init>()V
throw p0
:cond_57
:goto_57
if-ge v0, v1, :cond_82
.line 1178
invoke-virtual {p2, v6}, Ljava/nio/ByteBuffer;->put(B)Ljava/nio/ByteBuffer;
.line 1179
invoke-virtual {p0, v0}, Ljava/nio/ByteBuffer;->get(I)B
move-result p1
and-int/lit16 p1, p1, 0xff
add-int/lit8 p1, p1, -0x80
int-to-byte p1, p1
invoke-virtual {p2, p1}, Ljava/nio/ByteBuffer;->put(B)Ljava/nio/ByteBuffer;
add-int/lit8 v0, v0, 0x1
goto :goto_57
:cond_6b
:goto_6b
if-ge v0, v1, :cond_82
add-int/lit8 p1, v0, 0x1
.line 1185
invoke-virtual {p0, p1}, Ljava/nio/ByteBuffer;->get(I)B
move-result p1
invoke-virtual {p2, p1}, Ljava/nio/ByteBuffer;->put(B)Ljava/nio/ByteBuffer;
add-int/lit8 p1, v0, 0x2
.line 1186
invoke-virtual {p0, p1}, Ljava/nio/ByteBuffer;->get(I)B
move-result p1
invoke-virtual {p2, p1}, Ljava/nio/ByteBuffer;->put(B)Ljava/nio/ByteBuffer;
add-int/lit8 v0, v0, 0x3
goto :goto_6b
.line 1204
:cond_82
invoke-virtual {p2, v6}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
return-object p2
.end method
.method private resetSyncParams()V
.registers 4
const-wide/16 v0, 0x0
.line 1083
iput-wide v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->smoothedPlayheadOffsetUs:J
const/4 v2, 0x0
.line 1084
iput v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playheadOffsetCount:I
.line 1085
iput v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->nextPlayheadOffsetIndex:I
.line 1086
iput-wide v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->lastPlayheadSampleTimeUs:J
.line 1087
iput-boolean v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTimestampSet:Z
.line 1088
iput-wide v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->lastTimestampSampleTimeUs:J
return-void
.end method
.method private setVolumeInternal()V
.registers 3
.line 856
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->isInitialized()Z
move-result v0
if-nez v0, :cond_7
goto :goto_1c
.line 858
:cond_7
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x15
if-lt v0, v1, :cond_15
.line 859
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
iget v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->volume:F
invoke-static {v0, v1}, Lcom/google/android/exoplayer2/audio/AudioTrack;->setVolumeInternalV21(Landroid/media/AudioTrack;F)V
goto :goto_1c
.line 861
:cond_15
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
iget v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->volume:F
invoke-static {v0, v1}, Lcom/google/android/exoplayer2/audio/AudioTrack;->setVolumeInternalV3(Landroid/media/AudioTrack;F)V
:goto_1c
return-void
.end method
.method private static setVolumeInternalV21(Landroid/media/AudioTrack;F)V
.registers 2
.line 1283
invoke-virtual {p0, p1}, Landroid/media/AudioTrack;->setVolume(F)I
return-void
.end method
.method private static setVolumeInternalV3(Landroid/media/AudioTrack;F)V
.registers 2
.line 1288
invoke-virtual {p0, p1, p1}, Landroid/media/AudioTrack;->setStereoVolume(FF)I
return-void
.end method
.method private writeBuffer(Ljava/nio/ByteBuffer;J)Z
.registers 20
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/audio/AudioTrack$WriteException;
}
.end annotation
move-object/from16 v6, p0
move-object/from16 v0, p1
move-wide/from16 v4, p2
.line 636
iget-object v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->currentSourceBuffer:Ljava/nio/ByteBuffer;
const/4 v7, 0x1
const/4 v8, 0x0
if-nez v1, :cond_e
const/4 v1, 0x1
goto :goto_f
:cond_e
const/4 v1, 0x0
:goto_f
if-nez v1, :cond_18
.line 637
iget-object v2, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->currentSourceBuffer:Ljava/nio/ByteBuffer;
if-ne v2, v0, :cond_16
goto :goto_18
:cond_16
const/4 v2, 0x0
goto :goto_19
:cond_18
:goto_18
const/4 v2, 0x1
:goto_19
invoke-static {v2}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 638
iput-object v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->currentSourceBuffer:Ljava/nio/ByteBuffer;
.line 640
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->needsPassthroughWorkarounds()Z
move-result v2
const-wide/16 v9, 0x0
const/4 v3, 0x2
if-eqz v2, :cond_43
.line 643
iget-object v2, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v2}, Landroid/media/AudioTrack;->getPlayState()I
move-result v2
if-ne v2, v3, :cond_30
return v8
.line 650
:cond_30
iget-object v2, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v2}, Landroid/media/AudioTrack;->getPlayState()I
move-result v2
if-ne v2, v7, :cond_43
iget-object v2, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
.line 651
invoke-virtual {v2}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->getPlaybackHeadPosition()J
move-result-wide v11
cmp-long v2, v11, v9
if-eqz v2, :cond_43
return v8
:cond_43
const/16 v2, 0x15
const/4 v11, 0x0
if-eqz v1, :cond_107
.line 659
iget-object v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->currentSourceBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->hasRemaining()Z
move-result v1
if-nez v1, :cond_53
.line 661
iput-object v11, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->currentSourceBuffer:Ljava/nio/ByteBuffer;
return v7
.line 665
:cond_53
iget v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->targetEncoding:I
iget v12, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->sourceEncoding:I
if-eq v1, v12, :cond_5b
const/4 v1, 0x1
goto :goto_5c
:cond_5b
const/4 v1, 0x0
:goto_5c
iput-boolean v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->useResampledBuffer:Z
if-eqz v1, :cond_76
.line 667
iget v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->targetEncoding:I
if-ne v0, v3, :cond_66
const/4 v0, 0x1
goto :goto_67
:cond_66
const/4 v0, 0x0
:goto_67
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 669
iget-object v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->currentSourceBuffer:Ljava/nio/ByteBuffer;
iget v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->sourceEncoding:I
iget-object v12, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->resampledBuffer:Ljava/nio/ByteBuffer;
invoke-static {v0, v1, v12}, Lcom/google/android/exoplayer2/audio/AudioTrack;->resampleTo16BitPcm(Ljava/nio/ByteBuffer;ILjava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
move-result-object v0
iput-object v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->resampledBuffer:Ljava/nio/ByteBuffer;
.line 673
:cond_76
iget-boolean v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->passthrough:Z
if-eqz v1, :cond_86
iget v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->framesPerEncodedSample:I
if-nez v1, :cond_86
.line 675
iget v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->targetEncoding:I
invoke-static {v1, v0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->getFramesPerEncodedSample(ILjava/nio/ByteBuffer;)I
move-result v1
iput v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->framesPerEncodedSample:I
.line 677
:cond_86
iget v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeState:I
if-nez v1, :cond_93
.line 678
invoke-static {v9, v10, v4, v5}, Ljava/lang/Math;->max(JJ)J
move-result-wide v9
iput-wide v9, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeUs:J
.line 679
iput v7, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeState:I
goto :goto_e6
.line 682
:cond_93
iget-wide v9, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeUs:J
.line 683
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->getSubmittedFrames()J
move-result-wide v12
invoke-direct {v6, v12, v13}, Lcom/google/android/exoplayer2/audio/AudioTrack;->framesToDurationUs(J)J
move-result-wide v12
add-long/2addr v9, v12
.line 684
iget v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeState:I
if-ne v1, v7, :cond_d4
sub-long v12, v9, v4
.line 685
invoke-static {v12, v13}, Ljava/lang/Math;->abs(J)J
move-result-wide v12
const-wide/32 v14, 0x30d40
cmp-long v1, v12, v14
if-lez v1, :cond_d4
.line 686
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v12, "Discontinuity detected [expected "
invoke-virtual {v1, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, v9, v10}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
const-string v12, ", got "
invoke-virtual {v1, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, v4, v5}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
const-string v12, "]"
invoke-virtual {v1, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
const-string v12, "AudioTrack"
invoke-static {v12, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
.line 688
iput v3, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeState:I
.line 690
:cond_d4
iget v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeState:I
if-ne v1, v3, :cond_e6
.line 693
iget-wide v12, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeUs:J
sub-long v9, v4, v9
add-long/2addr v12, v9
iput-wide v12, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeUs:J
.line 694
iput v7, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeState:I
.line 695
iget-object v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->listener:Lcom/google/android/exoplayer2/audio/AudioTrack$Listener;
invoke-interface {v1}, Lcom/google/android/exoplayer2/audio/AudioTrack$Listener;->onPositionDiscontinuity()V
.line 698
:cond_e6
:goto_e6
sget v1, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
if-ge v1, v2, :cond_107
.line 700
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->remaining()I
move-result v1
.line 701
iget-object v3, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->temporaryBuffer:[B
if-eqz v3, :cond_f5
array-length v3, v3
if-ge v3, v1, :cond_f9
.line 702
:cond_f5
new-array v3, v1, [B
iput-object v3, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->temporaryBuffer:[B
.line 704
:cond_f9
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->position()I
move-result v3
.line 705
iget-object v9, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->temporaryBuffer:[B
invoke-virtual {v0, v9, v8, v1}, Ljava/nio/ByteBuffer;->get([BII)Ljava/nio/ByteBuffer;
.line 706
invoke-virtual {v0, v3}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 707
iput v8, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->temporaryBufferOffset:I
.line 711
:cond_107
iget-boolean v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->useResampledBuffer:Z
if-eqz v1, :cond_10d
iget-object v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->resampledBuffer:Ljava/nio/ByteBuffer;
:cond_10d
move-object v3, v0
.line 712
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->remaining()I
move-result v9
.line 714
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
if-ge v0, v2, :cond_14a
.line 716
iget-wide v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->submittedPcmBytes:J
iget-object v2, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
.line 717
invoke-virtual {v2}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->getPlaybackHeadPosition()J
move-result-wide v4
iget v2, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->pcmFrameSize:I
int-to-long v12, v2
mul-long v4, v4, v12
sub-long/2addr v0, v4
long-to-int v1, v0
.line 718
iget v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSize:I
sub-int/2addr v0, v1
if-lez v0, :cond_148
.line 720
invoke-static {v9, v0}, Ljava/lang/Math;->min(II)I
move-result v0
.line 721
iget-object v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
iget-object v2, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->temporaryBuffer:[B
iget v4, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->temporaryBufferOffset:I
invoke-virtual {v1, v2, v4, v0}, Landroid/media/AudioTrack;->write([BII)I
move-result v0
if-ltz v0, :cond_13f
.line 723
iget v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->temporaryBufferOffset:I
add-int/2addr v1, v0
iput v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->temporaryBufferOffset:I
.line 725
:cond_13f
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->position()I
move-result v1
add-int/2addr v1, v0
invoke-virtual {v3, v1}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
goto :goto_161
:cond_148
const/4 v0, 0x0
goto :goto_161
.line 728
:cond_14a
iget-boolean v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->tunneling:Z
if-eqz v0, :cond_15b
iget-object v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
move-object/from16 v0, p0
move-object v2, v3
move v3, v9
move-wide/from16 v4, p2
.line 729
invoke-direct/range {v0 .. v5}, Lcom/google/android/exoplayer2/audio/AudioTrack;->writeNonBlockingWithAvSyncV21(Landroid/media/AudioTrack;Ljava/nio/ByteBuffer;IJ)I
move-result v0
goto :goto_161
:cond_15b
iget-object v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 730
invoke-static {v0, v3, v9}, Lcom/google/android/exoplayer2/audio/AudioTrack;->writeNonBlockingV21(Landroid/media/AudioTrack;Ljava/nio/ByteBuffer;I)I
move-result v0
:goto_161
if-ltz v0, :cond_17f
.line 737
iget-boolean v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->passthrough:Z
if-nez v1, :cond_16d
.line 738
iget-wide v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->submittedPcmBytes:J
int-to-long v3, v0
add-long/2addr v1, v3
iput-wide v1, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->submittedPcmBytes:J
:cond_16d
if-ne v0, v9, :cond_17e
.line 741
iget-boolean v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->passthrough:Z
if-eqz v0, :cond_17b
.line 742
iget-wide v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->submittedEncodedFrames:J
iget v2, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->framesPerEncodedSample:I
int-to-long v2, v2
add-long/2addr v0, v2
iput-wide v0, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->submittedEncodedFrames:J
.line 744
:cond_17b
iput-object v11, v6, Lcom/google/android/exoplayer2/audio/AudioTrack;->currentSourceBuffer:Ljava/nio/ByteBuffer;
return v7
:cond_17e
return v8
.line 734
:cond_17f
new-instance v1, Lcom/google/android/exoplayer2/audio/AudioTrack$WriteException;
invoke-direct {v1, v0}, Lcom/google/android/exoplayer2/audio/AudioTrack$WriteException;-><init>(I)V
throw v1
.end method
.method private static writeNonBlockingV21(Landroid/media/AudioTrack;Ljava/nio/ByteBuffer;I)I
.registers 4
const/4 v0, 0x1
.line 1239
invoke-virtual {p0, p1, p2, v0}, Landroid/media/AudioTrack;->write(Ljava/nio/ByteBuffer;II)I
move-result p0
return p0
.end method
.method private writeNonBlockingWithAvSyncV21(Landroid/media/AudioTrack;Ljava/nio/ByteBuffer;IJ)I
.registers 11
.line 1250
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->avSyncHeader:Ljava/nio/ByteBuffer;
if-nez v0, :cond_19
const/16 v0, 0x10
.line 1251
invoke-static {v0}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->avSyncHeader:Ljava/nio/ByteBuffer;
.line 1252
sget-object v1, Ljava/nio/ByteOrder;->BIG_ENDIAN:Ljava/nio/ByteOrder;
invoke-virtual {v0, v1}, Ljava/nio/ByteBuffer;->order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
.line 1253
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->avSyncHeader:Ljava/nio/ByteBuffer;
const v1, 0x55550001
invoke-virtual {v0, v1}, Ljava/nio/ByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;
.line 1255
:cond_19
iget v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bytesUntilNextAvSync:I
const/4 v1, 0x0
if-nez v0, :cond_36
.line 1256
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->avSyncHeader:Ljava/nio/ByteBuffer;
const/4 v2, 0x4
invoke-virtual {v0, v2, p3}, Ljava/nio/ByteBuffer;->putInt(II)Ljava/nio/ByteBuffer;
.line 1257
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->avSyncHeader:Ljava/nio/ByteBuffer;
const/16 v2, 0x8
const-wide/16 v3, 0x3e8
mul-long p4, p4, v3
invoke-virtual {v0, v2, p4, p5}, Ljava/nio/ByteBuffer;->putLong(IJ)Ljava/nio/ByteBuffer;
.line 1258
iget-object p4, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->avSyncHeader:Ljava/nio/ByteBuffer;
invoke-virtual {p4, v1}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 1259
iput p3, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bytesUntilNextAvSync:I
.line 1261
:cond_36
iget-object p4, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->avSyncHeader:Ljava/nio/ByteBuffer;
invoke-virtual {p4}, Ljava/nio/ByteBuffer;->remaining()I
move-result p4
if-lez p4, :cond_4d
.line 1263
iget-object p5, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->avSyncHeader:Ljava/nio/ByteBuffer;
const/4 v0, 0x1
invoke-virtual {p1, p5, p4, v0}, Landroid/media/AudioTrack;->write(Ljava/nio/ByteBuffer;II)I
move-result p5
if-gez p5, :cond_4a
.line 1265
iput v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bytesUntilNextAvSync:I
return p5
:cond_4a
if-ge p5, p4, :cond_4d
return v1
.line 1272
:cond_4d
invoke-static {p1, p2, p3}, Lcom/google/android/exoplayer2/audio/AudioTrack;->writeNonBlockingV21(Landroid/media/AudioTrack;Ljava/nio/ByteBuffer;I)I
move-result p1
if-gez p1, :cond_56
.line 1274
iput v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bytesUntilNextAvSync:I
return p1
.line 1277
:cond_56
iget p2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bytesUntilNextAvSync:I
sub-int/2addr p2, p1
iput p2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bytesUntilNextAvSync:I
return p1
.end method
# virtual methods
.method public configure(Ljava/lang/String;IIII)V
.registers 14
const/16 v0, 0xfc
const/16 v1, 0xc
packed-switch p2, :pswitch_data_132
.line 447
new-instance p1, Ljava/lang/IllegalArgumentException;
new-instance p3, Ljava/lang/StringBuilder;
invoke-direct {p3}, Ljava/lang/StringBuilder;-><init>()V
const-string p4, "Unsupported channel count: "
invoke-virtual {p3, p4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p3, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {p3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p2
invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw p1
.line 444
:pswitch_1e
sget v2, Lcom/google/android/exoplayer2/C;->CHANNEL_OUT_7POINT1_SURROUND:I
goto :goto_34
:pswitch_21
const/16 v2, 0x4fc
goto :goto_34
:pswitch_24
const/16 v2, 0xfc
goto :goto_34
:pswitch_27
const/16 v2, 0xdc
goto :goto_34
:pswitch_2a
const/16 v2, 0xcc
goto :goto_34
:pswitch_2d
const/16 v2, 0x1c
goto :goto_34
:pswitch_30
const/16 v2, 0xc
goto :goto_34
:pswitch_33
const/4 v2, 0x4
.line 451
:goto_34
sget v3, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v4, 0x17
const/4 v5, 0x5
const/4 v6, 0x3
if-gt v3, v4, :cond_5b
sget-object v3, Lcom/google/android/exoplayer2/util/Util;->DEVICE:Ljava/lang/String;
const-string v4, "foster"
invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v3
if-eqz v3, :cond_5b
sget-object v3, Lcom/google/android/exoplayer2/util/Util;->MANUFACTURER:Ljava/lang/String;
const-string v4, "NVIDIA"
invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v3
if-eqz v3, :cond_5b
if-eq p2, v6, :cond_5c
if-eq p2, v5, :cond_5c
const/4 v0, 0x7
if-eq p2, v0, :cond_58
goto :goto_5b
.line 454
:cond_58
sget v0, Lcom/google/android/exoplayer2/C;->CHANNEL_OUT_7POINT1_SURROUND:I
goto :goto_5c
:cond_5b
:goto_5b
move v0, v2
:cond_5c
:goto_5c
const-string v2, "audio/raw"
.line 465
invoke-virtual {v2, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v2
const/4 v3, 0x1
xor-int/2addr v2, v3
.line 469
sget v4, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v7, 0x19
if-gt v4, v7, :cond_79
sget-object v4, Lcom/google/android/exoplayer2/util/Util;->DEVICE:Ljava/lang/String;
const-string v7, "fugu"
invoke-virtual {v7, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_79
if-eqz v2, :cond_79
if-ne p2, v3, :cond_79
goto :goto_7a
:cond_79
move v1, v0
:goto_7a
const/4 v0, 0x2
if-eqz v2, :cond_82
.line 475
invoke-static {p1}, Lcom/google/android/exoplayer2/audio/AudioTrack;->getEncodingForMimeType(Ljava/lang/String;)I
move-result p4
goto :goto_a6
:cond_82
if-eq p4, v6, :cond_a6
if-eq p4, v0, :cond_a6
const/high16 p1, -0x80000000
if-eq p4, p1, :cond_a6
const/high16 p1, 0x40000000 # 2.0f
if-ne p4, p1, :cond_8f
goto :goto_a6
.line 480
:cond_8f
new-instance p1, Ljava/lang/IllegalArgumentException;
new-instance p2, Ljava/lang/StringBuilder;
invoke-direct {p2}, Ljava/lang/StringBuilder;-><init>()V
const-string p3, "Unsupported PCM encoding: "
invoke-virtual {p2, p3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p2, p4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p2
invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw p1
.line 483
:cond_a6
:goto_a6
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->isInitialized()Z
move-result p1
if-eqz p1, :cond_b9
iget p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->sourceEncoding:I
if-ne p1, p4, :cond_b9
iget p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->sampleRate:I
if-ne p1, p3, :cond_b9
iget p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->channelConfig:I
if-ne p1, v1, :cond_b9
return-void
.line 489
:cond_b9
invoke-virtual {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->reset()V
.line 491
iput p4, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->sourceEncoding:I
.line 492
iput-boolean v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->passthrough:Z
.line 493
iput p3, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->sampleRate:I
.line 494
iput v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->channelConfig:I
if-eqz v2, :cond_c7
goto :goto_c8
:cond_c7
const/4 p4, 0x2
.line 495
:goto_c8
iput p4, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->targetEncoding:I
mul-int/lit8 p2, p2, 0x2
.line 496
iput p2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->pcmFrameSize:I
if-eqz p5, :cond_d3
.line 499
iput p5, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSize:I
goto :goto_11b
:cond_d3
if-eqz v2, :cond_e6
if-eq p4, v5, :cond_e1
const/4 p1, 0x6
if-ne p4, p1, :cond_db
goto :goto_e1
:cond_db
const p1, 0xc000
.line 508
iput p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSize:I
goto :goto_11b
:cond_e1
:goto_e1
const/16 p1, 0x5000
.line 505
iput p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSize:I
goto :goto_11b
.line 512
:cond_e6
invoke-static {p3, v1, p4}, Landroid/media/AudioTrack;->getMinBufferSize(III)I
move-result p1
const/4 p2, -0x2
if-eq p1, p2, :cond_ee
goto :goto_ef
:cond_ee
const/4 v3, 0x0
.line 513
:goto_ef
invoke-static {v3}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
mul-int/lit8 p2, p1, 0x4
const-wide/32 p3, 0x3d090
.line 515
invoke-direct {p0, p3, p4}, Lcom/google/android/exoplayer2/audio/AudioTrack;->durationUsToFrames(J)J
move-result-wide p3
long-to-int p4, p3
iget p3, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->pcmFrameSize:I
mul-int p4, p4, p3
int-to-long v0, p1
const-wide/32 v3, 0xb71b0
.line 517
invoke-direct {p0, v3, v4}, Lcom/google/android/exoplayer2/audio/AudioTrack;->durationUsToFrames(J)J
move-result-wide v3
iget p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->pcmFrameSize:I
int-to-long v5, p1
mul-long v3, v3, v5
.line 516
invoke-static {v0, v1, v3, v4}, Ljava/lang/Math;->max(JJ)J
move-result-wide v0
long-to-int p1, v0
if-ge p2, p4, :cond_116
move p2, p4
goto :goto_119
:cond_116
if-le p2, p1, :cond_119
move p2, p1
.line 518
:cond_119
:goto_119
iput p2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSize:I
:goto_11b
if-eqz v2, :cond_123
const-wide p1, -0x7fffffffffffffffL # -4.9E-324
goto :goto_12e
.line 522
:cond_123
iget p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSize:I
int-to-long p1, p1
invoke-direct {p0, p1, p2}, Lcom/google/android/exoplayer2/audio/AudioTrack;->pcmBytesToFrames(J)J
move-result-wide p1
invoke-direct {p0, p1, p2}, Lcom/google/android/exoplayer2/audio/AudioTrack;->framesToDurationUs(J)J
move-result-wide p1
:goto_12e
iput-wide p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSizeUs:J
return-void
nop
:pswitch_data_132
.packed-switch 0x1
:pswitch_33
:pswitch_30
:pswitch_2d
:pswitch_2a
:pswitch_27
:pswitch_24
:pswitch_21
:pswitch_1e
.end packed-switch
.end method
.method public disableTunneling()V
.registers 2
.line 836
iget-boolean v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->tunneling:Z
if-eqz v0, :cond_c
const/4 v0, 0x0
.line 837
iput-boolean v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->tunneling:Z
.line 838
iput v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
.line 839
invoke-virtual {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->reset()V
:cond_c
return-void
.end method
.method public enableTunnelingV21(I)V
.registers 5
.line 823
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/4 v1, 0x1
const/16 v2, 0x15
if-lt v0, v2, :cond_9
const/4 v0, 0x1
goto :goto_a
:cond_9
const/4 v0, 0x0
:goto_a
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 824
iget-boolean v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->tunneling:Z
if-eqz v0, :cond_15
iget v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
if-eq v0, p1, :cond_1c
.line 825
:cond_15
iput-boolean v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->tunneling:Z
.line 826
iput p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
.line 827
invoke-virtual {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->reset()V
:cond_1c
return-void
.end method
.method public getCurrentPositionUs(Z)J
.registers 8
.line 368
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->hasCurrentPositionUs()Z
move-result v0
if-nez v0, :cond_9
const-wide/high16 v0, -0x8000000000000000L
return-wide v0
.line 372
:cond_9
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->getPlayState()I
move-result v0
const/4 v1, 0x3
if-ne v0, v1, :cond_15
.line 373
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->maybeSampleSyncParams()V
.line 376
:cond_15
invoke-static {}, Ljava/lang/System;->nanoTime()J
move-result-wide v0
const-wide/16 v2, 0x3e8
div-long/2addr v0, v2
.line 378
iget-boolean v4, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTimestampSet:Z
if-eqz v4, :cond_45
.line 380
iget-object p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->getTimestampNanoTime()J
move-result-wide v4
div-long/2addr v4, v2
sub-long/2addr v0, v4
long-to-float p1, v0
.line 382
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
.line 383
invoke-virtual {v0}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->getPlaybackSpeed()F
move-result v0
mul-float p1, p1, v0
float-to-long v0, p1
.line 384
invoke-direct {p0, v0, v1}, Lcom/google/android/exoplayer2/audio/AudioTrack;->durationUsToFrames(J)J
move-result-wide v0
.line 386
iget-object p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->getTimestampFramePosition()J
move-result-wide v2
add-long/2addr v2, v0
.line 387
invoke-direct {p0, v2, v3}, Lcom/google/android/exoplayer2/audio/AudioTrack;->framesToDurationUs(J)J
move-result-wide v0
iget-wide v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeUs:J
add-long/2addr v0, v2
goto :goto_5d
.line 389
:cond_45
iget v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playheadOffsetCount:I
if-nez v2, :cond_52
.line 391
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->getPlaybackHeadPositionUs()J
move-result-wide v0
iget-wide v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeUs:J
goto :goto_57
.line 396
:cond_52
iget-wide v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->smoothedPlayheadOffsetUs:J
add-long/2addr v0, v2
iget-wide v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeUs:J
:goto_57
add-long/2addr v0, v2
if-nez p1, :cond_5d
.line 399
iget-wide v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->latencyUs:J
sub-long/2addr v0, v2
:cond_5d
:goto_5d
return-wide v0
.end method
.method public handleBuffer(Ljava/nio/ByteBuffer;J)Z
.registers 14
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/audio/AudioTrack$InitializationException;,
Lcom/google/android/exoplayer2/audio/AudioTrack$WriteException;
}
.end annotation
.line 616
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->isInitialized()Z
move-result v0
if-nez v0, :cond_10
.line 617
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->initialize()V
.line 618
iget-boolean v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playing:Z
if-eqz v0, :cond_10
.line 619
invoke-virtual {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->play()V
.line 623
:cond_10
iget-boolean v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->hasData:Z
.line 624
invoke-virtual {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->hasPendingData()Z
move-result v1
iput-boolean v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->hasData:Z
if-eqz v0, :cond_3a
if-nez v1, :cond_3a
.line 625
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->getPlayState()I
move-result v0
const/4 v1, 0x1
if-eq v0, v1, :cond_3a
.line 626
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v0
iget-wide v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->lastFeedElapsedRealtimeMs:J
sub-long v8, v0, v2
.line 627
iget-object v4, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->listener:Lcom/google/android/exoplayer2/audio/AudioTrack$Listener;
iget v5, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSize:I
iget-wide v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bufferSizeUs:J
invoke-static {v0, v1}, Lcom/google/android/exoplayer2/C;->usToMs(J)J
move-result-wide v6
invoke-interface/range {v4 .. v9}, Lcom/google/android/exoplayer2/audio/AudioTrack$Listener;->onUnderrun(IJJ)V
.line 629
:cond_3a
invoke-direct {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/audio/AudioTrack;->writeBuffer(Ljava/nio/ByteBuffer;J)Z
move-result p1
.line 630
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide p2
iput-wide p2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->lastFeedElapsedRealtimeMs:J
return p1
.end method
.method public handleDiscontinuity()V
.registers 3
.line 591
iget v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeState:I
const/4 v1, 0x1
if-ne v0, v1, :cond_8
const/4 v0, 0x2
.line 592
iput v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeState:I
:cond_8
return-void
.end method
.method public handleEndOfStream()V
.registers 4
.line 754
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->isInitialized()Z
move-result v0
if-eqz v0, :cond_12
.line 755
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->getSubmittedFrames()J
move-result-wide v1
invoke-virtual {v0, v1, v2}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->handleEndOfStream(J)V
const/4 v0, 0x0
.line 756
iput v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bytesUntilNextAvSync:I
:cond_12
return-void
.end method
.method public hasPendingData()Z
.registers 6
.line 764
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->isInitialized()Z
move-result v0
if-eqz v0, :cond_1c
.line 765
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->getSubmittedFrames()J
move-result-wide v0
iget-object v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->getPlaybackHeadPosition()J
move-result-wide v2
cmp-long v4, v0, v2
if-gtz v4, :cond_1a
.line 766
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->overrideHasPendingData()Z
move-result v0
if-eqz v0, :cond_1c
:cond_1a
const/4 v0, 0x1
goto :goto_1d
:cond_1c
const/4 v0, 0x0
:goto_1d
return v0
.end method
.method public isPassthroughSupported(Ljava/lang/String;)Z
.registers 3
.line 352
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioCapabilities:Lcom/google/android/exoplayer2/audio/AudioCapabilities;
if-eqz v0, :cond_10
.line 353
invoke-static {p1}, Lcom/google/android/exoplayer2/audio/AudioTrack;->getEncodingForMimeType(Ljava/lang/String;)I
move-result p1
invoke-virtual {v0, p1}, Lcom/google/android/exoplayer2/audio/AudioCapabilities;->supportsEncoding(I)Z
move-result p1
if-eqz p1, :cond_10
const/4 p1, 0x1
goto :goto_11
:cond_10
const/4 p1, 0x0
:goto_11
return p1
.end method
.method public pause()V
.registers 2
const/4 v0, 0x0
.line 869
iput-boolean v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playing:Z
.line 870
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->isInitialized()Z
move-result v0
if-eqz v0, :cond_11
.line 871
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->resetSyncParams()V
.line 872
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->pause()V
:cond_11
return-void
.end method
.method public play()V
.registers 5
const/4 v0, 0x1
.line 579
iput-boolean v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playing:Z
.line 580
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->isInitialized()Z
move-result v0
if-eqz v0, :cond_17
.line 581
invoke-static {}, Ljava/lang/System;->nanoTime()J
move-result-wide v0
const-wide/16 v2, 0x3e8
div-long/2addr v0, v2
iput-wide v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->resumeSystemTimeUs:J
.line 582
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->play()V
:cond_17
return-void
.end method
.method public release()V
.registers 2
.line 921
invoke-virtual {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->reset()V
.line 922
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->releaseKeepSessionIdAudioTrack()V
const/4 v0, 0x0
.line 923
iput v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
.line 924
iput-boolean v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->playing:Z
return-void
.end method
.method public reset()V
.registers 5
.line 884
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->isInitialized()Z
move-result v0
if-eqz v0, :cond_41
const-wide/16 v0, 0x0
.line 885
iput-wide v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->submittedPcmBytes:J
.line 886
iput-wide v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->submittedEncodedFrames:J
const/4 v2, 0x0
.line 887
iput v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->framesPerEncodedSample:I
const/4 v3, 0x0
.line 888
iput-object v3, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->currentSourceBuffer:Ljava/nio/ByteBuffer;
.line 889
iput-object v3, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->avSyncHeader:Ljava/nio/ByteBuffer;
.line 890
iput v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->bytesUntilNextAvSync:I
.line 891
iput v2, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->startMediaTimeState:I
.line 892
iput-wide v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->latencyUs:J
.line 893
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->resetSyncParams()V
.line 894
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->getPlayState()I
move-result v0
const/4 v1, 0x3
if-ne v0, v1, :cond_2b
.line 896
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->pause()V
.line 899
:cond_2b
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 900
iput-object v3, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 901
iget-object v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-virtual {v1, v3, v2}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->reconfigure(Landroid/media/AudioTrack;Z)V
.line 902
iget-object v1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->releasingConditionVariable:Landroid/os/ConditionVariable;
invoke-virtual {v1}, Landroid/os/ConditionVariable;->close()V
.line 903
new-instance v1, Lcom/google/android/exoplayer2/audio/AudioTrack$1;
invoke-direct {v1, p0, v0}, Lcom/google/android/exoplayer2/audio/AudioTrack$1;-><init>(Lcom/google/android/exoplayer2/audio/AudioTrack;Landroid/media/AudioTrack;)V
.line 913
invoke-virtual {v1}, Lcom/google/android/exoplayer2/audio/AudioTrack$1;->start()V
:cond_41
return-void
.end method
.method public setAudioSessionId(I)V
.registers 3
.line 809
iget v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
if-eq v0, p1, :cond_9
.line 810
iput p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
.line 811
invoke-virtual {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->reset()V
:cond_9
return-void
.end method
.method public setPlaybackParams(Landroid/media/PlaybackParams;)V
.registers 3
.line 778
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioTrackUtil:Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;
invoke-virtual {v0, p1}, Lcom/google/android/exoplayer2/audio/AudioTrack$AudioTrackUtil;->setPlaybackParams(Landroid/media/PlaybackParams;)V
return-void
.end method
.method public setStreamType(I)V
.registers 3
.line 793
iget v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->streamType:I
if-ne v0, p1, :cond_5
return-void
.line 796
:cond_5
iput p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->streamType:I
.line 797
iget-boolean p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->tunneling:Z
if-eqz p1, :cond_c
return-void
.line 801
:cond_c
invoke-virtual {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->reset()V
const/4 p1, 0x0
.line 802
iput p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->audioSessionId:I
return-void
.end method
.method public setVolume(F)V
.registers 3
.line 849
iget v0, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->volume:F
cmpl-float v0, v0, p1
if-eqz v0, :cond_b
.line 850
iput p1, p0, Lcom/google/android/exoplayer2/audio/AudioTrack;->volume:F
.line 851
invoke-direct {p0}, Lcom/google/android/exoplayer2/audio/AudioTrack;->setVolumeInternal()V
:cond_b
return-void
.end method