USBAudioDevice.smali

.class public Lorg/webrtc/ali/USBAudioDevice;
.super Ljava/lang/Object;
.source "USBAudioDevice.java"


# static fields
.field private static final DEFAULT_USBFS:Ljava/lang/String; = "/dev/bus/usb"

.field static final LOG_DEBUG:I = 0x2

.field static final LOG_ERROR:I = 0x5

.field static final LOG_FATAL:I = 0x6

.field static final LOG_INFO:I = 0x3

.field static final LOG_SILENT:I = 0x7

.field static final LOG_VERBOSE:I = 0x1

.field static final LOG_WARN:I = 0x4


# instance fields
.field private final TAG:Ljava/lang/String;

.field private audioDevicePlayerHandle_:J

.field private audioDeviceRecordHandle_:J

.field private audioPlayerDeviceCount_:I

.field private audioRecordDeviceCount_:I

.field private usbControlPlayBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

.field private usbControlRecordBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;


# direct methods
.method static constructor <clinit>()V
    .registers 1

    .line 19
    const-string v0, "usb100"

    invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V

    .line 20
    const-string v0, "USBAudioDevice"

    invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V

    .line 21
    return-void
.end method

.method public constructor <init>()V
    .registers 4

    .line 43
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 14
    const-string v0, "USBAudioDevice"

    iput-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->TAG:Ljava/lang/String;

    .line 61
    const-wide/16 v0, 0x0

    iput-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J

    .line 66
    const/4 v2, 0x0

    iput v2, p0, Lorg/webrtc/ali/USBAudioDevice;->audioRecordDeviceCount_:I

    .line 151
    iput-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J

    .line 152
    iput v2, p0, Lorg/webrtc/ali/USBAudioDevice;->audioPlayerDeviceCount_:I

    .line 44
    invoke-direct {p0}, Lorg/webrtc/ali/USBAudioDevice;->nativeCreateUSBRecord()J

    move-result-wide v0

    iput-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J

    .line 45
    invoke-direct {p0}, Lorg/webrtc/ali/USBAudioDevice;->nativeCreateUSBPlayer()J

    move-result-wide v0

    iput-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J

    .line 46
    return-void
.end method

.method public static declared-synchronized createLogFile(Ljava/lang/String;I)I
    .registers 4
    .param p0, "strPath"    # Ljava/lang/String;
    .param p1, "level"    # I

    const-class v0, Lorg/webrtc/ali/USBAudioDevice;

    monitor-enter v0

    .line 244
    :try_start_3
    invoke-static {p0, p1}, Lorg/webrtc/ali/USBAudioDevice;->nativeCreateUSBLog(Ljava/lang/String;I)I

    move-result v1
    :try_end_7
    .catchall {:try_start_3 .. :try_end_7} :catchall_9

    monitor-exit v0

    return v1

    .end local p0    # "strPath":Ljava/lang/String;
    .end local p1    # "level":I
    :catchall_9
    move-exception p0

    monitor-exit v0

    throw p0
.end method

.method private final getUSBFSName(Ljava/lang/String;)Ljava/lang/String;
    .registers 9
    .param p1, "deviceName"    # Ljava/lang/String;

    .line 26
    const/4 v0, 0x0

    .line 27
    .local v0, "result":Ljava/lang/String;
    invoke-static {p1}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v1

    const-string v2, "/"

    if-nez v1, :cond_e

    invoke-virtual {p1, v2}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;

    move-result-object v1

    goto :goto_f

    :cond_e
    const/4 v1, 0x0

    .line 28
    .local v1, "v":[Ljava/lang/String;
    :goto_f
    if-eqz v1, :cond_31

    array-length v3, v1

    const/4 v4, 0x2

    if-le v3, v4, :cond_31

    .line 29
    new-instance v3, Ljava/lang/StringBuilder;

    const/4 v5, 0x0

    aget-object v5, v1, v5

    invoke-direct {v3, v5}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    .line 30
    .local v3, "sb":Ljava/lang/StringBuilder;
    const/4 v5, 0x1

    .local v5, "i":I
    :goto_1e
    array-length v6, v1

    sub-int/2addr v6, v4

    if-ge v5, v6, :cond_2d

    .line 31
    invoke-virtual {v3, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    aget-object v6, v1, v5

    invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    .line 30
    add-int/lit8 v5, v5, 0x1

    goto :goto_1e

    .line 32
    .end local v5    # "i":I
    :cond_2d
    invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    .line 34
    .end local v3    # "sb":Ljava/lang/StringBuilder;
    :cond_31
    invoke-static {v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v2

    if-eqz v2, :cond_4f

    .line 35
    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "failed to get USBFS path, try to use default path:"

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    const-string v3, "USBAudioDevice"

    invoke-static {v3, v2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

    .line 36
    const-string v0, "/dev/bus/usb"

    .line 39
    :cond_4f
    return-object v0
.end method

.method private static final native nativeCloseUSBPlayer(J)I
.end method

.method private static final native nativeCloseUSBRecord(J)I
.end method

.method private final native nativeConnectUSBPlayer(JIIIIILjava/lang/String;)I
.end method

.method private final native nativeConnectUSBRecord(JIIIIILjava/lang/String;)I
.end method

.method private static final native nativeCreateUSBLog(Ljava/lang/String;I)I
.end method

.method private final native nativeCreateUSBPlayer()J
.end method

.method private final native nativeCreateUSBRecord()J
.end method

.method private static final native nativeDestroyUSBLog(I)I
.end method

.method private final native nativeDestroyUSBPlayer(J)V
.end method

.method private final native nativeDestroyUSBRecord(J)V
.end method

.method private static final native nativeStopUSBPlayer(J)I
.end method

.method private static final native nativeStopUSBRecord(J)I
.end method

.method private static final native nativeWriteUSBLog(ILjava/lang/String;)I
.end method

.method public static declared-synchronized releaseLogFile(I)I
    .registers 3
    .param p0, "param"    # I

    const-class v0, Lorg/webrtc/ali/USBAudioDevice;

    monitor-enter v0

    .line 284
    :try_start_3
    invoke-static {p0}, Lorg/webrtc/ali/USBAudioDevice;->nativeDestroyUSBLog(I)I

    move-result v1
    :try_end_7
    .catchall {:try_start_3 .. :try_end_7} :catchall_9

    monitor-exit v0

    return v1

    .end local p0    # "param":I
    :catchall_9
    move-exception p0

    monitor-exit v0

    throw p0
.end method

.method public static writeLog(ILjava/lang/String;)I
    .registers 3
    .param p0, "tag"    # I
    .param p1, "strLog"    # Ljava/lang/String;

    .line 270
    invoke-static {p0, p1}, Lorg/webrtc/ali/USBAudioDevice;->nativeWriteUSBLog(ILjava/lang/String;)I

    move-result v0

    return v0
.end method

.method public static writeLog(Ljava/lang/String;)I
    .registers 2
    .param p0, "strLog"    # Ljava/lang/String;

    .line 277
    const/4 v0, 0x3

    invoke-static {v0, p0}, Lorg/webrtc/ali/USBAudioDevice;->nativeWriteUSBLog(ILjava/lang/String;)I

    move-result v0

    return v0
.end method


# virtual methods
.method public declared-synchronized closeUSBPlayer()I
    .registers 6

    monitor-enter p0

    .line 205
    :try_start_1
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_17

    const-wide/16 v2, 0x0

    cmp-long v4, v0, v2

    if-nez v4, :cond_c

    .line 206
    const/4 v0, -0x1

    monitor-exit p0

    return v0

    .line 209
    :cond_c
    const/4 v0, 0x0

    :try_start_d
    iput v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioPlayerDeviceCount_:I

    .line 210
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J

    invoke-static {v0, v1}, Lorg/webrtc/ali/USBAudioDevice;->nativeCloseUSBPlayer(J)I

    move-result v0
    :try_end_15
    .catchall {:try_start_d .. :try_end_15} :catchall_17

    monitor-exit p0

    return v0

    .line 204
    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catchall_17
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized closeUSBRecord()I
    .registers 6

    monitor-enter p0

    .line 117
    :try_start_1
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_17

    const-wide/16 v2, 0x0

    cmp-long v4, v0, v2

    if-nez v4, :cond_c

    .line 118
    const/4 v0, -0x1

    monitor-exit p0

    return v0

    .line 121
    :cond_c
    const/4 v0, 0x0

    :try_start_d
    iput v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioRecordDeviceCount_:I

    .line 122
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J

    invoke-static {v0, v1}, Lorg/webrtc/ali/USBAudioDevice;->nativeCloseUSBRecord(J)I

    move-result v0
    :try_end_15
    .catchall {:try_start_d .. :try_end_15} :catchall_17

    monitor-exit p0

    return v0

    .line 116
    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catchall_17
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized connectUSBPlayer(Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;)I
    .registers 12
    .param p1, "usbControlBlock"    # Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    monitor-enter p0

    .line 169
    :try_start_1
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_66

    const-wide/16 v2, 0x0

    cmp-long v4, v0, v2

    if-nez v4, :cond_c

    .line 170
    const/4 v0, -0x1

    monitor-exit p0

    return v0

    .line 175
    :cond_c
    :try_start_c
    invoke-virtual {p1}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->clone()Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    move-result-object v0

    iput-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlPlayBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 177
    iget-wide v2, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J

    .line 179
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getVenderId()I

    move-result v4

    iget-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlPlayBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 180
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getProductId()I

    move-result v5

    iget-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlPlayBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 181
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getFileDescriptor()I

    move-result v6

    iget-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlPlayBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 182
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getBusNum()I

    move-result v7

    iget-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlPlayBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 183
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getDevNum()I

    move-result v8

    iget-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlPlayBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 184
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getDeviceName()Ljava/lang/String;

    move-result-object v0

    invoke-direct {p0, v0}, Lorg/webrtc/ali/USBAudioDevice;->getUSBFSName(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v9

    .line 177
    move-object v1, p0

    invoke-direct/range {v1 .. v9}, Lorg/webrtc/ali/USBAudioDevice;->nativeConnectUSBPlayer(JIIIIILjava/lang/String;)I

    move-result v0
    :try_end_3f
    .catch Ljava/lang/Exception; {:try_start_c .. :try_end_3f} :catch_49
    .catchall {:try_start_c .. :try_end_3f} :catchall_66

    .line 186
    .local v0, "rc":I
    if-gtz v0, :cond_44

    .line 187
    const/4 v1, -0x2

    monitor-exit p0

    return v1

    .line 190
    :cond_44
    :try_start_44
    iput v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioPlayerDeviceCount_:I
    :try_end_46
    .catch Ljava/lang/Exception; {:try_start_44 .. :try_end_46} :catch_49
    .catchall {:try_start_44 .. :try_end_46} :catchall_66

    .line 191
    const/4 v1, 0x0

    monitor-exit p0

    return v1

    .line 193
    .end local v0    # "rc":I
    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catch_49
    move-exception v0

    .line 194
    .local v0, "e":Ljava/lang/Exception;
    const/4 v1, 0x5

    :try_start_4b
    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "info:"

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/Exception;->getMessage()Ljava/lang/String;

    move-result-object v3

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-static {v1, v2}, Lorg/webrtc/ali/USBAudioDevice;->writeLog(ILjava/lang/String;)I
    :try_end_63
    .catchall {:try_start_4b .. :try_end_63} :catchall_66

    .line 195
    const/4 v1, -0x3

    monitor-exit p0

    return v1

    .line 168
    .end local v0    # "e":Ljava/lang/Exception;
    .end local p1    # "usbControlBlock":Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;
    :catchall_66
    move-exception p1

    monitor-exit p0

    throw p1
.end method

.method public declared-synchronized connectUSBRecord(Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;)I
    .registers 12
    .param p1, "usbControlBlock"    # Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    monitor-enter p0

    .line 82
    :try_start_1
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_66

    const-wide/16 v2, 0x0

    cmp-long v4, v0, v2

    if-nez v4, :cond_c

    .line 83
    const/4 v0, -0x1

    monitor-exit p0

    return v0

    .line 87
    :cond_c
    :try_start_c
    invoke-virtual {p1}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->clone()Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    move-result-object v0

    iput-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlRecordBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 88
    iget-wide v2, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J

    .line 90
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getVenderId()I

    move-result v4

    iget-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlRecordBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 91
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getProductId()I

    move-result v5

    iget-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlRecordBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 92
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getFileDescriptor()I

    move-result v6

    iget-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlRecordBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 93
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getBusNum()I

    move-result v7

    iget-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlRecordBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 94
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getDevNum()I

    move-result v8

    iget-object v0, p0, Lorg/webrtc/ali/USBAudioDevice;->usbControlRecordBlock_:Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;

    .line 95
    invoke-virtual {v0}, Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;->getDeviceName()Ljava/lang/String;

    move-result-object v0

    invoke-direct {p0, v0}, Lorg/webrtc/ali/USBAudioDevice;->getUSBFSName(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v9

    .line 88
    move-object v1, p0

    invoke-direct/range {v1 .. v9}, Lorg/webrtc/ali/USBAudioDevice;->nativeConnectUSBRecord(JIIIIILjava/lang/String;)I

    move-result v0
    :try_end_3f
    .catch Ljava/lang/Exception; {:try_start_c .. :try_end_3f} :catch_49
    .catchall {:try_start_c .. :try_end_3f} :catchall_66

    .line 97
    .local v0, "rc":I
    if-gtz v0, :cond_44

    .line 98
    const/4 v1, -0x2

    monitor-exit p0

    return v1

    .line 101
    :cond_44
    :try_start_44
    iput v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioRecordDeviceCount_:I
    :try_end_46
    .catch Ljava/lang/Exception; {:try_start_44 .. :try_end_46} :catch_49
    .catchall {:try_start_44 .. :try_end_46} :catchall_66

    .line 102
    const/4 v1, 0x0

    monitor-exit p0

    return v1

    .line 104
    .end local v0    # "rc":I
    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catch_49
    move-exception v0

    .line 105
    .local v0, "e":Ljava/lang/Exception;
    const/4 v1, 0x5

    :try_start_4b
    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "info:"

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/Exception;->getMessage()Ljava/lang/String;

    move-result-object v3

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-static {v1, v2}, Lorg/webrtc/ali/USBAudioDevice;->writeLog(ILjava/lang/String;)I
    :try_end_63
    .catchall {:try_start_4b .. :try_end_63} :catchall_66

    .line 106
    const/4 v1, -0x3

    monitor-exit p0

    return v1

    .line 81
    .end local v0    # "e":Ljava/lang/Exception;
    .end local p1    # "usbControlBlock":Lcom/serenegiant/usb/USBMonitor$UsbControlBlock;
    :catchall_66
    move-exception p1

    monitor-exit p0

    throw p1
.end method

.method public declared-synchronized getAudioPlayerDeviceCount()I
    .registers 2

    monitor-enter p0

    .line 162
    :try_start_1
    iget v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioPlayerDeviceCount_:I
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_5

    monitor-exit p0

    return v0

    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catchall_5
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized getAudioPlayerHandle()J
    .registers 3

    monitor-enter p0

    .line 157
    :try_start_1
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_5

    monitor-exit p0

    return-wide v0

    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catchall_5
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public getAudioRecordDeviceCount()I
    .registers 2

    .line 69
    iget v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioRecordDeviceCount_:I

    return v0
.end method

.method public declared-synchronized getAudioRecordHandle()J
    .registers 3

    monitor-enter p0

    .line 68
    :try_start_1
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_5

    monitor-exit p0

    return-wide v0

    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catchall_5
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized release()V
    .registers 2

    monitor-enter p0

    .line 52
    :try_start_1
    invoke-virtual {p0}, Lorg/webrtc/ali/USBAudioDevice;->releaseUSBRecord()V

    .line 53
    invoke-virtual {p0}, Lorg/webrtc/ali/USBAudioDevice;->releaseUSBPlayer()V

    .line 54
    const/4 v0, 0x0

    invoke-static {v0}, Lorg/webrtc/ali/USBAudioDevice;->releaseLogFile(I)I
    :try_end_b
    .catchall {:try_start_1 .. :try_end_b} :catchall_d

    .line 55
    monitor-exit p0

    return-void

    .line 51
    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catchall_d
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized releaseUSBPlayer()V
    .registers 6

    monitor-enter p0

    .line 230
    :try_start_1
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_17

    const-wide/16 v2, 0x0

    cmp-long v4, v0, v2

    if-nez v4, :cond_b

    .line 231
    monitor-exit p0

    return-void

    .line 234
    :cond_b
    :try_start_b
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J

    invoke-direct {p0, v0, v1}, Lorg/webrtc/ali/USBAudioDevice;->nativeDestroyUSBPlayer(J)V

    .line 235
    iput-wide v2, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J

    .line 236
    const/4 v0, 0x0

    iput v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioPlayerDeviceCount_:I
    :try_end_15
    .catchall {:try_start_b .. :try_end_15} :catchall_17

    .line 237
    monitor-exit p0

    return-void

    .line 229
    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catchall_17
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized releaseUSBRecord()V
    .registers 6

    monitor-enter p0

    .line 138
    :try_start_1
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_17

    const-wide/16 v2, 0x0

    cmp-long v4, v0, v2

    if-nez v4, :cond_b

    .line 139
    monitor-exit p0

    return-void

    .line 142
    :cond_b
    :try_start_b
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J

    invoke-direct {p0, v0, v1}, Lorg/webrtc/ali/USBAudioDevice;->nativeDestroyUSBRecord(J)V

    .line 143
    iput-wide v2, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J

    .line 144
    const/4 v0, 0x0

    iput v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioRecordDeviceCount_:I
    :try_end_15
    .catchall {:try_start_b .. :try_end_15} :catchall_17

    .line 145
    monitor-exit p0

    return-void

    .line 137
    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catchall_17
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized stopUSBPlayer()I
    .registers 6

    monitor-enter p0

    .line 218
    :try_start_1
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_14

    const-wide/16 v2, 0x0

    cmp-long v4, v0, v2

    if-nez v4, :cond_c

    .line 219
    const/4 v0, -0x1

    monitor-exit p0

    return v0

    .line 222
    :cond_c
    :try_start_c
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDevicePlayerHandle_:J

    invoke-static {v0, v1}, Lorg/webrtc/ali/USBAudioDevice;->nativeStopUSBPlayer(J)I

    move-result v0
    :try_end_12
    .catchall {:try_start_c .. :try_end_12} :catchall_14

    monitor-exit p0

    return v0

    .line 217
    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catchall_14
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized stopUSBRecord()I
    .registers 6

    monitor-enter p0

    .line 128
    :try_start_1
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_14

    const-wide/16 v2, 0x0

    cmp-long v4, v0, v2

    if-nez v4, :cond_c

    .line 129
    const/4 v0, -0x1

    monitor-exit p0

    return v0

    .line 132
    :cond_c
    :try_start_c
    iget-wide v0, p0, Lorg/webrtc/ali/USBAudioDevice;->audioDeviceRecordHandle_:J

    invoke-static {v0, v1}, Lorg/webrtc/ali/USBAudioDevice;->nativeStopUSBRecord(J)I

    move-result v0
    :try_end_12
    .catchall {:try_start_c .. :try_end_12} :catchall_14

    monitor-exit p0

    return v0

    .line 127
    .end local p0    # "this":Lorg/webrtc/ali/USBAudioDevice;
    :catchall_14
    move-exception v0

    monitor-exit p0

    throw v0
.end method