AudioTrackJNI.smali
.class public Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;
.super Ljava/lang/Object;
.source "AudioTrackJNI.java"
# instance fields
.field private audioTrack:Landroid/media/AudioTrack;
.field private buffer:[B
.field private bufferSize:I
.field private nativeInst:J
.field private needResampling:Z
.field private running:Z
.field private thread:Ljava/lang/Thread;
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>(J)V
.registers 4
.param p1, "nativeInst" # J
.line 22
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 15
const/16 v0, 0x780
new-array v0, v0, [B
iput-object v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->buffer:[B
.line 23
iput-wide p1, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->nativeInst:J
.line 24
return-void
.end method
.method static synthetic access$000(Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;)Landroid/media/AudioTrack;
.registers 2
.param p0, "x0" # Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;
.line 13
iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->audioTrack:Landroid/media/AudioTrack;
return-object v0
.end method
.method static synthetic access$100(Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;)Z
.registers 2
.param p0, "x0" # Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;
.line 13
iget-boolean v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->needResampling:Z
return v0
.end method
.method static synthetic access$200(Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;)Z
.registers 2
.param p0, "x0" # Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;
.line 13
iget-boolean v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->running:Z
return v0
.end method
.method static synthetic access$300(Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;)[B
.registers 2
.param p0, "x0" # Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;
.line 13
iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->buffer:[B
return-object v0
.end method
.method static synthetic access$400(Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;[B)V
.registers 2
.param p0, "x0" # Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;
.param p1, "x1" # [B
.line 13
invoke-direct {p0, p1}, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->nativeCallback([B)V
return-void
.end method
.method private getBufferSize(II)I
.registers 5
.param p1, "min" # I
.param p2, "sampleRate" # I
.line 27
const/4 v0, 0x4
const/4 v1, 0x2
invoke-static {p2, v0, v1}, Landroid/media/AudioTrack;->getMinBufferSize(III)I
move-result v0
invoke-static {v0, p1}, Ljava/lang/Math;->max(II)I
move-result v0
return v0
.end method
.method private native nativeCallback([B)V
.end method
.method private startThread()V
.registers 3
.line 85
iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->thread:Ljava/lang/Thread;
if-nez v0, :cond_17
.line 88
const/4 v0, 0x1
iput-boolean v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->running:Z
.line 89
new-instance v0, Ljava/lang/Thread;
new-instance v1, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI$1;
invoke-direct {v1, p0}, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI$1;-><init>(Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;)V
invoke-direct {v0, v1}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
iput-object v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->thread:Ljava/lang/Thread;
.line 125
invoke-virtual {v0}, Ljava/lang/Thread;->start()V
.line 126
return-void
.line 86
:cond_17
new-instance v0, Ljava/lang/IllegalStateException;
const-string/jumbo v1, "thread already started"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
# virtual methods
.method public init(IIII)V
.registers 27
.param p1, "sampleRate" # I
.param p2, "bitsPerSample" # I
.param p3, "channels" # I
.param p4, "bufferSize" # I
.line 31
move-object/from16 v1, p0
move/from16 v2, p3
move/from16 v3, p4
iget-object v0, v1, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->audioTrack:Landroid/media/AudioTrack;
if-nez v0, :cond_79
.line 34
const v0, 0xbb80
invoke-direct {v1, v3, v0}, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->getBufferSize(II)I
move-result v11
.line 35
.local v11, "size":I
iput v3, v1, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->bufferSize:I
.line 36
new-instance v0, Landroid/media/AudioTrack;
const/4 v5, 0x0
const v6, 0xbb80
const/4 v12, 0x4
const/16 v13, 0xc
const/4 v14, 0x1
if-ne v2, v14, :cond_21
const/4 v7, 0x4
goto :goto_23
:cond_21
const/16 v7, 0xc
:goto_23
const/4 v8, 0x2
const/4 v10, 0x1
move-object v4, v0
move v9, v11
invoke-direct/range {v4 .. v10}, Landroid/media/AudioTrack;-><init>(IIIIII)V
iput-object v0, v1, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->audioTrack:Landroid/media/AudioTrack;
.line 37
invoke-virtual {v0}, Landroid/media/AudioTrack;->getState()I
move-result v0
if-eq v0, v14, :cond_78
.line 38
const-string v0, "Error initializing AudioTrack with 48k, trying 44.1k with resampling"
invoke-static {v0}, Lim/tpelyyftgw/messenger/voip/VLog;->w(Ljava/lang/String;)V
.line 40
:try_start_37
iget-object v0, v1, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->release()V
:try_end_3c
.catchall {:try_start_37 .. :try_end_3c} :catchall_3d
goto :goto_3e
.line 41
:catchall_3d
move-exception v0
:goto_3e
nop
.line 42
mul-int/lit8 v0, v3, 0x6
const v4, 0xac44
invoke-direct {v1, v0, v4}, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->getBufferSize(II)I
move-result v11
.line 43
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "buffer size: "
invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, v11}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Lim/tpelyyftgw/messenger/voip/VLog;->d(Ljava/lang/String;)V
.line 44
new-instance v0, Landroid/media/AudioTrack;
const/16 v16, 0x0
const v17, 0xac44
if-ne v2, v14, :cond_68
const/16 v18, 0x4
goto :goto_6a
:cond_68
const/16 v18, 0xc
:goto_6a
const/16 v19, 0x2
const/16 v21, 0x1
move-object v15, v0
move/from16 v20, v11
invoke-direct/range {v15 .. v21}, Landroid/media/AudioTrack;-><init>(IIIIII)V
iput-object v0, v1, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->audioTrack:Landroid/media/AudioTrack;
.line 45
iput-boolean v14, v1, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->needResampling:Z
.line 47
:cond_78
return-void
.line 32
.end local v11 # "size":I
:cond_79
new-instance v0, Ljava/lang/IllegalStateException;
const-string v4, "already inited"
invoke-direct {v0, v4}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public release()V
.registers 3
.line 61
const/4 v0, 0x0
iput-boolean v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->running:Z
.line 62
iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->thread:Ljava/lang/Thread;
const/4 v1, 0x0
if-eqz v0, :cond_12
.line 64
:try_start_8
invoke-virtual {v0}, Ljava/lang/Thread;->join()V
:try_end_b
.catch Ljava/lang/InterruptedException; {:try_start_8 .. :try_end_b} :catch_c
.line 67
goto :goto_10
.line 65
:catch_c
move-exception v0
.line 66
.local v0, "e":Ljava/lang/InterruptedException;
invoke-static {v0}, Lim/tpelyyftgw/messenger/voip/VLog;->e(Ljava/lang/Throwable;)V
.line 68
.end local v0 # "e":Ljava/lang/InterruptedException;
:goto_10
iput-object v1, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->thread:Ljava/lang/Thread;
.line 70
:cond_12
iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->audioTrack:Landroid/media/AudioTrack;
if-eqz v0, :cond_1b
.line 71
invoke-virtual {v0}, Landroid/media/AudioTrack;->release()V
.line 72
iput-object v1, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->audioTrack:Landroid/media/AudioTrack;
.line 74
:cond_1b
return-void
.end method
.method public start()V
.registers 2
.line 77
iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->thread:Ljava/lang/Thread;
if-nez v0, :cond_8
.line 78
invoke-direct {p0}, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->startThread()V
goto :goto_d
.line 80
:cond_8
iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->play()V
.line 82
:goto_d
return-void
.end method
.method public stop()V
.registers 2
.line 50
iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/AudioTrackJNI;->audioTrack:Landroid/media/AudioTrack;
if-eqz v0, :cond_9
.line 52
:try_start_4
invoke-virtual {v0}, Landroid/media/AudioTrack;->stop()V
:try_end_7
.catch Ljava/lang/Exception; {:try_start_4 .. :try_end_7} :catch_8
.line 55
goto :goto_9
.line 53
:catch_8
move-exception v0
.line 58
:cond_9
:goto_9
return-void
.end method