WebRtcAudioTrack.smali
.class public Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;
.super Ljava/lang/Object;
.source "WebRtcAudioTrack.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;,
Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;
}
.end annotation
# static fields
.field private static final BITS_PER_SAMPLE:I = 0x10
.field private static final BUFFERS_PER_SECOND:I = 0x64
.field private static final CALLBACK_BUFFER_SIZE_MS:I = 0xa
.field private static final DEBUG:Z = false
.field private static final TAG:Ljava/lang/String; = "WebRtcAudioTrack"
.field private static errorCallback:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;
.field private static volatile speakerMute:Z
# instance fields
.field private final audioManager:Landroid/media/AudioManager;
.field private audioThread:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;
.field private audioTrack:Landroid/media/AudioTrack;
.field private byteBuffer:Ljava/nio/ByteBuffer;
.field private emptyBytes:[B
.field private final nativeAudioTrack:J
.field private streamType:I
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 52
const/4 v0, 0x0
sput-boolean v0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->speakerMute:Z
.line 61
const/4 v0, 0x0
sput-object v0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->errorCallback:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;
return-void
.end method
.method constructor <init>(J)V
.registers 5
.param p1, "nativeAudioTrack" # J
.line 170
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 45
const/4 v0, 0x0
iput-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 46
iput-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioThread:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;
.line 171
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "ctor"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-static {}, Lorg/webrtc/ali/voiceengine/WebRtcAudioUtils;->getThreadInfo()Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "WebRtcAudioTrack"
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 172
iput-wide p1, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->nativeAudioTrack:J
.line 173
nop
.line 174
invoke-static {}, Lorg/webrtc/ali/ContextUtils;->getApplicationContext()Landroid/content/Context;
move-result-object v0
const-string v1, "audio"
invoke-virtual {v0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/media/AudioManager;
iput-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioManager:Landroid/media/AudioManager;
.line 178
return-void
.end method
.method static synthetic access$000(Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;)Landroid/media/AudioTrack;
.registers 2
.param p0, "x0" # Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;
.line 25
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
return-object v0
.end method
.method static synthetic access$100(Z)V
.registers 1
.param p0, "x0" # Z
.line 25
invoke-static {p0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->assertTrue(Z)V
return-void
.end method
.method static synthetic access$200(Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;Ljava/lang/String;)V
.registers 2
.param p0, "x0" # Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;
.param p1, "x1" # Ljava/lang/String;
.line 25
invoke-direct {p0, p1}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->reportWebRtcAudioTrackStartError(Ljava/lang/String;)V
return-void
.end method
.method static synthetic access$300(Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;)V
.registers 1
.param p0, "x0" # Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;
.line 25
invoke-direct {p0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->releaseAudioResources()V
return-void
.end method
.method static synthetic access$400(Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;)Ljava/nio/ByteBuffer;
.registers 2
.param p0, "x0" # Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;
.line 25
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->byteBuffer:Ljava/nio/ByteBuffer;
return-object v0
.end method
.method static synthetic access$500(Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;)J
.registers 3
.param p0, "x0" # Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;
.line 25
iget-wide v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->nativeAudioTrack:J
return-wide v0
.end method
.method static synthetic access$600(Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;IJ)V
.registers 4
.param p0, "x0" # Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;
.param p1, "x1" # I
.param p2, "x2" # J
.line 25
invoke-direct {p0, p1, p2, p3}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->nativeGetPlayoutData(IJ)V
return-void
.end method
.method static synthetic access$700()Z
.registers 1
.line 25
sget-boolean v0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->speakerMute:Z
return v0
.end method
.method static synthetic access$800(Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;)[B
.registers 2
.param p0, "x0" # Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;
.line 25
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->emptyBytes:[B
return-object v0
.end method
.method static synthetic access$900(Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;Ljava/lang/String;)V
.registers 2
.param p0, "x0" # Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;
.param p1, "x1" # Ljava/lang/String;
.line 25
invoke-direct {p0, p1}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->reportWebRtcAudioTrackError(Ljava/lang/String;)V
return-void
.end method
.method private static assertTrue(Z)V
.registers 3
.param p0, "condition" # Z
.line 378
if-eqz p0, :cond_3
.line 381
return-void
.line 379
:cond_3
new-instance v0, Ljava/lang/AssertionError;
const-string v1, "Expected condition to be true"
invoke-direct {v0, v1}, Ljava/lang/AssertionError;-><init>(Ljava/lang/Object;)V
throw v0
.end method
.method private channelCountToConfiguration(I)I
.registers 3
.param p1, "channels" # I
.line 384
const/4 v0, 0x1
if-ne p1, v0, :cond_5
const/4 v0, 0x4
goto :goto_7
:cond_5
const/16 v0, 0xc
:goto_7
return v0
.end method
.method private createAudioTrackOnLollipopOrHigher(III)Landroid/media/AudioTrack;
.registers 13
.param p1, "sampleRateInHz" # I
.param p2, "channelConfig" # I
.param p3, "bufferSizeInBytes" # I
.line 324
const-string v0, "WebRtcAudioTrack"
const-string v1, "createAudioTrackOnLollipopOrHigher"
invoke-static {v0, v1}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 327
nop
.line 328
const/4 v1, 0x0
invoke-static {v1}, Landroid/media/AudioTrack;->getNativeOutputSampleRate(I)I
move-result v1
.line 329
.local v1, "nativeOutputSampleRate":I
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v3, "nativeOutputSampleRate: "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-static {v0, v2}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 330
if-eq p1, v1, :cond_28
.line 331
const-string v2, "Unable to use fast mode since requested sample rate is not native"
invoke-static {v0, v2}, Lorg/webrtc/ali/Logging;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 334
:cond_28
new-instance v0, Landroid/media/AudioTrack;
new-instance v2, Landroid/media/AudioAttributes$Builder;
invoke-direct {v2}, Landroid/media/AudioAttributes$Builder;-><init>()V
.line 336
const/4 v3, 0x2
invoke-virtual {v2, v3}, Landroid/media/AudioAttributes$Builder;->setUsage(I)Landroid/media/AudioAttributes$Builder;
move-result-object v2
const/4 v4, 0x1
.line 337
invoke-virtual {v2, v4}, Landroid/media/AudioAttributes$Builder;->setContentType(I)Landroid/media/AudioAttributes$Builder;
move-result-object v2
.line 338
invoke-virtual {v2}, Landroid/media/AudioAttributes$Builder;->build()Landroid/media/AudioAttributes;
move-result-object v4
new-instance v2, Landroid/media/AudioFormat$Builder;
invoke-direct {v2}, Landroid/media/AudioFormat$Builder;-><init>()V
.line 340
invoke-virtual {v2, v3}, Landroid/media/AudioFormat$Builder;->setEncoding(I)Landroid/media/AudioFormat$Builder;
move-result-object v2
.line 341
invoke-virtual {v2, p1}, Landroid/media/AudioFormat$Builder;->setSampleRate(I)Landroid/media/AudioFormat$Builder;
move-result-object v2
.line 342
invoke-virtual {v2, p2}, Landroid/media/AudioFormat$Builder;->setChannelMask(I)Landroid/media/AudioFormat$Builder;
move-result-object v2
.line 343
invoke-virtual {v2}, Landroid/media/AudioFormat$Builder;->build()Landroid/media/AudioFormat;
move-result-object v5
const/4 v7, 0x1
const/4 v8, 0x0
move-object v3, v0
move v6, p3
invoke-direct/range {v3 .. v8}, Landroid/media/AudioTrack;-><init>(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;III)V
.line 334
return-object v0
.end method
.method private getStreamMaxVolume()I
.registers 3
.line 279
const-string v0, "WebRtcAudioTrack"
const-string v1, "getStreamMaxVolume"
invoke-static {v0, v1}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 280
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioManager:Landroid/media/AudioManager;
const/4 v1, 0x0
if-eqz v0, :cond_e
const/4 v0, 0x1
goto :goto_f
:cond_e
const/4 v0, 0x0
:goto_f
invoke-static {v0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->assertTrue(Z)V
.line 281
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioManager:Landroid/media/AudioManager;
invoke-virtual {v0, v1}, Landroid/media/AudioManager;->getStreamMaxVolume(I)I
move-result v0
return v0
.end method
.method private getStreamVolume()I
.registers 3
.line 304
const-string v0, "WebRtcAudioTrack"
const-string v1, "getStreamVolume"
invoke-static {v0, v1}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 305
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioManager:Landroid/media/AudioManager;
const/4 v1, 0x0
if-eqz v0, :cond_e
const/4 v0, 0x1
goto :goto_f
:cond_e
const/4 v0, 0x0
:goto_f
invoke-static {v0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->assertTrue(Z)V
.line 306
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioManager:Landroid/media/AudioManager;
invoke-virtual {v0, v1}, Landroid/media/AudioManager;->getStreamVolume(I)I
move-result v0
return v0
.end method
.method private initPlayout(III)Z
.registers 16
.param p1, "streamType" # I
.param p2, "sampleRate" # I
.param p3, "channels" # I
.line 181
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "initPlayout(sampleRate="
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, ", channels="
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, ")"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "WebRtcAudioTrack"
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 182
mul-int/lit8 v0, p3, 0x2
.line 183
.local v0, "bytesPerFrame":I
div-int/lit8 v2, p2, 0x64
mul-int v2, v2, v0
invoke-static {v2}, Ljava/nio/ByteBuffer;->allocateDirect(I)Ljava/nio/ByteBuffer;
move-result-object v2
iput-object v2, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->byteBuffer:Ljava/nio/ByteBuffer;
.line 184
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v3, "byteBuffer.capacity: "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v3, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->byteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->capacity()I
move-result v3
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-static {v1, v2}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 185
iget-object v2, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->byteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v2}, Ljava/nio/ByteBuffer;->capacity()I
move-result v2
new-array v2, v2, [B
iput-object v2, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->emptyBytes:[B
.line 189
iget-object v2, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->byteBuffer:Ljava/nio/ByteBuffer;
iget-wide v3, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->nativeAudioTrack:J
invoke-direct {p0, v2, v3, v4}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->nativeCacheDirectBufferAddress(Ljava/nio/ByteBuffer;J)V
.line 195
invoke-direct {p0, p3}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->channelCountToConfiguration(I)I
move-result v2
.line 196
.local v2, "channelConfig":I
nop
.line 197
const/4 v3, 0x2
invoke-static {p2, v2, v3}, Landroid/media/AudioTrack;->getMinBufferSize(III)I
move-result v3
.line 198
.local v3, "minBufferSizeInBytes":I
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
const-string v5, "AudioTrack.getMinBufferSize: "
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
invoke-static {v1, v4}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 204
iget-object v1, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->byteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->capacity()I
move-result v1
const/4 v4, 0x0
if-ge v3, v1, :cond_87
.line 205
const-string v1, "AudioTrack.getMinBufferSize returns an invalid value."
invoke-direct {p0, v1}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->reportWebRtcAudioTrackInitError(Ljava/lang/String;)V
.line 206
return v4
.line 211
:cond_87
iget-object v1, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
if-eqz v1, :cond_91
.line 212
const-string v1, "Conflict with existing AudioTrack."
invoke-direct {p0, v1}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->reportWebRtcAudioTrackInitError(Ljava/lang/String;)V
.line 213
return v4
.line 215
:cond_91
iput p1, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->streamType:I
.line 220
:try_start_93
invoke-static {}, Lorg/webrtc/ali/voiceengine/WebRtcAudioUtils;->runningOnLollipopOrHigher()Z
move-result v1
if-eqz v1, :cond_a0
.line 226
invoke-direct {p0, p2, v2, v3}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->createAudioTrackOnLollipopOrHigher(III)Landroid/media/AudioTrack;
move-result-object v1
iput-object v1, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
goto :goto_ae
.line 232
:cond_a0
new-instance v1, Landroid/media/AudioTrack;
const/4 v9, 0x2
const/4 v11, 0x1
move-object v5, v1
move v6, p1
move v7, p2
move v8, v2
move v10, v3
invoke-direct/range {v5 .. v11}, Landroid/media/AudioTrack;-><init>(IIIIII)V
iput-object v1, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
:try_end_ae
.catch Ljava/lang/IllegalArgumentException; {:try_start_93 .. :try_end_ae} :catch_cb
.line 239
:goto_ae
nop
.line 244
iget-object v1, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
if-eqz v1, :cond_c2
invoke-virtual {v1}, Landroid/media/AudioTrack;->getState()I
move-result v1
const/4 v5, 0x1
if-eq v1, v5, :cond_bb
goto :goto_c2
.line 249
:cond_bb
invoke-direct {p0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->logMainParameters()V
.line 250
invoke-direct {p0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->logMainParametersExtended()V
.line 251
return v5
.line 245
:cond_c2
:goto_c2
const-string v1, "Initialization of audio track failed."
invoke-direct {p0, v1}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->reportWebRtcAudioTrackInitError(Ljava/lang/String;)V
.line 246
invoke-direct {p0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->releaseAudioResources()V
.line 247
return v4
.line 235
:catch_cb
move-exception v1
.line 236
.local v1, "e":Ljava/lang/IllegalArgumentException;
invoke-virtual {v1}, Ljava/lang/IllegalArgumentException;->getMessage()Ljava/lang/String;
move-result-object v5
invoke-direct {p0, v5}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->reportWebRtcAudioTrackInitError(Ljava/lang/String;)V
.line 237
invoke-direct {p0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->releaseAudioResources()V
.line 238
return v4
.end method
.method private isVolumeFixed()Z
.registers 2
.line 297
invoke-static {}, Lorg/webrtc/ali/voiceengine/WebRtcAudioUtils;->runningOnLollipopOrHigher()Z
move-result v0
if-nez v0, :cond_8
.line 298
const/4 v0, 0x0
return v0
.line 299
:cond_8
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioManager:Landroid/media/AudioManager;
invoke-virtual {v0}, Landroid/media/AudioManager;->isVolumeFixed()Z
move-result v0
return v0
.end method
.method private logMainParameters()V
.registers 3
.line 310
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "AudioTrack: session ID: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 311
invoke-virtual {v1}, Landroid/media/AudioTrack;->getAudioSessionId()I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, ", channels: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 312
invoke-virtual {v1}, Landroid/media/AudioTrack;->getChannelCount()I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, ", sample rate: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 313
invoke-virtual {v1}, Landroid/media/AudioTrack;->getSampleRate()I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, ", max gain: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 315
invoke-static {}, Landroid/media/AudioTrack;->getMaxVolume()F
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(F)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
.line 310
const-string v1, "WebRtcAudioTrack"
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 316
return-void
.end method
.method private logMainParametersExtended()V
.registers 4
.line 351
invoke-static {}, Lorg/webrtc/ali/voiceengine/WebRtcAudioUtils;->runningOnMarshmallowOrHigher()Z
move-result v0
const-string v1, "WebRtcAudioTrack"
if-eqz v0, :cond_22
.line 352
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "AudioTrack: buffer size in frames: "
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v2, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 354
invoke-virtual {v2}, Landroid/media/AudioTrack;->getBufferSizeInFrames()I
move-result v2
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
.line 352
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 356
:cond_22
invoke-static {}, Lorg/webrtc/ali/voiceengine/WebRtcAudioUtils;->runningOnNougatOrHigher()Z
move-result v0
if-eqz v0, :cond_42
.line 357
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "AudioTrack: buffer capacity in frames: "
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v2, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 359
invoke-virtual {v2}, Landroid/media/AudioTrack;->getBufferCapacityInFrames()I
move-result v2
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
.line 357
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 361
:cond_42
return-void
.end method
.method private logUnderrunCount()V
.registers 3
.line 371
invoke-static {}, Lorg/webrtc/ali/voiceengine/WebRtcAudioUtils;->runningOnNougatOrHigher()Z
move-result v0
if-eqz v0, :cond_22
.line 372
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "underrun count: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v1}, Landroid/media/AudioTrack;->getUnderrunCount()I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "WebRtcAudioTrack"
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 374
:cond_22
return-void
.end method
.method private native nativeCacheDirectBufferAddress(Ljava/nio/ByteBuffer;J)V
.end method
.method private native nativeGetPlayoutData(IJ)V
.end method
.method private releaseAudioResources()V
.registers 2
.line 400
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
if-eqz v0, :cond_a
.line 401
invoke-virtual {v0}, Landroid/media/AudioTrack;->release()V
.line 402
const/4 v0, 0x0
iput-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
.line 404
:cond_a
return-void
.end method
.method private reportWebRtcAudioTrackError(Ljava/lang/String;)V
.registers 4
.param p1, "errorMessage" # Ljava/lang/String;
.line 421
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "Run-time playback error: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "WebRtcAudioTrack"
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V
.line 422
sget-object v0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->errorCallback:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;
if-eqz v0, :cond_1d
.line 423
invoke-interface {v0, p1}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;->onWebRtcAudioTrackError(Ljava/lang/String;)V
.line 425
:cond_1d
return-void
.end method
.method private reportWebRtcAudioTrackInitError(Ljava/lang/String;)V
.registers 4
.param p1, "errorMessage" # Ljava/lang/String;
.line 407
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "Init error: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "WebRtcAudioTrack"
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V
.line 408
sget-object v0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->errorCallback:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;
if-eqz v0, :cond_1d
.line 409
invoke-interface {v0, p1}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;->onWebRtcAudioTrackInitError(Ljava/lang/String;)V
.line 411
:cond_1d
return-void
.end method
.method private reportWebRtcAudioTrackStartError(Ljava/lang/String;)V
.registers 4
.param p1, "errorMessage" # Ljava/lang/String;
.line 414
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "Start error: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "WebRtcAudioTrack"
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V
.line 415
sget-object v0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->errorCallback:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;
if-eqz v0, :cond_1d
.line 416
invoke-interface {v0, p1}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;->onWebRtcAudioTrackStartError(Ljava/lang/String;)V
.line 418
:cond_1d
return-void
.end method
.method public static setErrorCallback(Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;)V
.registers 3
.param p0, "errorCallback" # Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;
.line 64
const-string v0, "WebRtcAudioTrack"
const-string v1, "Set error callback"
invoke-static {v0, v1}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 65
sput-object p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->errorCallback:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$WebRtcAudioTrackErrorCallback;
.line 66
return-void
.end method
.method public static setSpeakerMute(Z)V
.registers 3
.param p0, "mute" # Z
.line 394
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "setSpeakerMute("
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder;
const-string v1, ")"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "WebRtcAudioTrack"
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 395
sput-boolean p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->speakerMute:Z
.line 396
return-void
.end method
.method private setStreamVolume(I)Z
.registers 6
.param p1, "volume" # I
.line 286
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "setStreamVolume("
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, ")"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "WebRtcAudioTrack"
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 287
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioManager:Landroid/media/AudioManager;
const/4 v2, 0x1
const/4 v3, 0x0
if-eqz v0, :cond_23
const/4 v0, 0x1
goto :goto_24
:cond_23
const/4 v0, 0x0
:goto_24
invoke-static {v0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->assertTrue(Z)V
.line 288
invoke-direct {p0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->isVolumeFixed()Z
move-result v0
if-eqz v0, :cond_33
.line 289
const-string v0, "The device implements a fixed volume policy."
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V
.line 290
return v3
.line 292
:cond_33
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioManager:Landroid/media/AudioManager;
invoke-virtual {v0, v3, p1, v3}, Landroid/media/AudioManager;->setStreamVolume(III)V
.line 293
return v2
.end method
.method private startPlayout()Z
.registers 4
.line 255
const-string v0, "WebRtcAudioTrack"
const-string v1, "startPlayout"
invoke-static {v0, v1}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 256
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
const/4 v1, 0x0
const/4 v2, 0x1
if-eqz v0, :cond_f
const/4 v0, 0x1
goto :goto_10
:cond_f
const/4 v0, 0x0
:goto_10
invoke-static {v0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->assertTrue(Z)V
.line 257
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioThread:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;
if-nez v0, :cond_19
const/4 v0, 0x1
goto :goto_1a
:cond_19
const/4 v0, 0x0
:goto_1a
invoke-static {v0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->assertTrue(Z)V
.line 258
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->getState()I
move-result v0
if-eq v0, v2, :cond_2b
.line 259
const-string v0, "AudioTrack instance is not successfully initialized."
invoke-direct {p0, v0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->reportWebRtcAudioTrackStartError(Ljava/lang/String;)V
.line 260
return v1
.line 262
:cond_2b
new-instance v0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;
const-string v1, "AudioTrackJavaThread"
invoke-direct {v0, p0, v1}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;-><init>(Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;Ljava/lang/String;)V
iput-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioThread:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;
.line 263
invoke-virtual {v0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;->start()V
.line 264
return v2
.end method
.method private stopPlayout()Z
.registers 3
.line 268
const-string v0, "WebRtcAudioTrack"
const-string v1, "stopPlayout"
invoke-static {v0, v1}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 269
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioThread:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;
const/4 v1, 0x1
if-eqz v0, :cond_e
const/4 v0, 0x1
goto :goto_f
:cond_e
const/4 v0, 0x0
:goto_f
invoke-static {v0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->assertTrue(Z)V
.line 270
invoke-direct {p0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->logUnderrunCount()V
.line 271
iget-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioThread:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;
invoke-virtual {v0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;->joinThread()V
.line 272
const/4 v0, 0x0
iput-object v0, p0, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->audioThread:Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack$AudioTrackThread;
.line 273
invoke-direct {p0}, Lorg/webrtc/ali/voiceengine/WebRtcAudioTrack;->releaseAudioResources()V
.line 274
return v1
.end method