AliHardwareAudioDecoder.smali

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


# static fields
.field private static DECODE_READ_BUFFER_SIZE:I

.field private static HTTP_REQUEST_TIMEOUT:I

.field private static MAX_DECODER_RETRY_COUNT:I

.field private static TAG:Ljava/lang/String;


# instance fields
.field private channels_:I

.field private context_:Landroid/content/Context;

.field private decodeIsReady_:Z

.field private decodeReadBuffer_:Ljava/nio/ByteBuffer;

.field private extractor_:Landroid/media/MediaExtractor;

.field private fileLength_:J

.field info:Landroid/media/MediaCodec$BufferInfo;

.field private inputBuffers_:[Ljava/nio/ByteBuffer;

.field private inputStreamEnd_:Z

.field private isMeizu_:Z

.field private isVivo_:Z

.field private mediaCodec_:Landroid/media/MediaCodec;

.field private nativeAudioCodec_:J

.field private outputBuffers_:[Ljava/nio/ByteBuffer;

.field private outputStreamEnd_:Z

.field private retryCount_:I

.field private sampleRate_:I

.field private trackFormat_:Landroid/media/MediaFormat;


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

    .line 35
    const-string v0, "MediaCodecAudioDecoder"

    sput-object v0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    .line 37
    const/16 v0, 0x40

    sput v0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->MAX_DECODER_RETRY_COUNT:I

    .line 38
    const/16 v0, 0x1770

    sput v0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->HTTP_REQUEST_TIMEOUT:I

    .line 40
    const v0, 0x18000

    sput v0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->DECODE_READ_BUFFER_SIZE:I

    return-void
.end method

.method public constructor <init>(Landroid/content/Context;)V
    .registers 6
    .param p1, "context"    # Landroid/content/Context;

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

    .line 36
    const/4 v0, 0x0

    iput-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->context_:Landroid/content/Context;

    .line 45
    const/4 v1, 0x0

    iput-boolean v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->inputStreamEnd_:Z

    .line 49
    iput-boolean v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->outputStreamEnd_:Z

    .line 51
    sget v2, Lorg/webrtc/ali/AliHardwareAudioDecoder;->DECODE_READ_BUFFER_SIZE:I

    invoke-static {v2}, Ljava/nio/ByteBuffer;->allocateDirect(I)Ljava/nio/ByteBuffer;

    move-result-object v2

    iput-object v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->decodeReadBuffer_:Ljava/nio/ByteBuffer;

    .line 53
    iput-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    .line 54
    iput-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    .line 55
    iput-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->trackFormat_:Landroid/media/MediaFormat;

    .line 57
    iput-boolean v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->decodeIsReady_:Z

    .line 58
    const v0, 0xbb80

    iput v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->sampleRate_:I

    .line 59
    const/4 v0, 0x2

    iput v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->channels_:I

    .line 61
    iput v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->retryCount_:I

    .line 62
    const-wide/16 v2, 0x0

    iput-wide v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->nativeAudioCodec_:J

    .line 64
    iput-boolean v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->isMeizu_:Z

    .line 65
    iput-boolean v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->isVivo_:Z

    .line 70
    new-instance v0, Landroid/media/MediaCodec$BufferInfo;

    invoke-direct {v0}, Landroid/media/MediaCodec$BufferInfo;-><init>()V

    iput-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->info:Landroid/media/MediaCodec$BufferInfo;

    .line 73
    iput-object p1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->context_:Landroid/content/Context;

    .line 74
    sget-object v0, Landroid/os/Build;->BRAND:Ljava/lang/String;

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

    move-result-object v0

    const-string v2, "meizu"

    invoke-virtual {v0, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v0

    const/4 v3, 0x1

    if-nez v0, :cond_54

    sget-object v0, Landroid/os/Build;->MANUFACTURER:Ljava/lang/String;

    .line 75
    invoke-virtual {v0}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v0, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v0

    if-eqz v0, :cond_52

    goto :goto_54

    :cond_52
    const/4 v0, 0x0

    goto :goto_55

    :cond_54
    :goto_54
    const/4 v0, 0x1

    :goto_55
    iput-boolean v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->isMeizu_:Z

    .line 76
    sget-object v0, Landroid/os/Build;->BRAND:Ljava/lang/String;

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

    move-result-object v0

    const-string v2, "vivo"

    invoke-virtual {v0, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v0

    if-nez v0, :cond_71

    sget-object v0, Landroid/os/Build;->MANUFACTURER:Ljava/lang/String;

    .line 77
    invoke-virtual {v0}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v0, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v0

    if-eqz v0, :cond_72

    :cond_71
    const/4 v1, 0x1

    :cond_72
    iput-boolean v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->isVivo_:Z

    .line 78
    return-void
.end method

.method private checkAudioForamtChange()Z
    .registers 7

    .line 347
    sget v0, Landroid/os/Build$VERSION;->SDK_INT:I

    const/4 v1, 0x0

    const/16 v2, 0x10

    if-ge v0, v2, :cond_8

    .line 348
    return v1

    .line 351
    :cond_8
    const/4 v0, 0x0

    .line 355
    .local v0, "change":Z
    :try_start_9
    iget-object v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    invoke-virtual {v2}, Landroid/media/MediaCodec;->getOutputFormat()Landroid/media/MediaFormat;

    move-result-object v2

    .line 357
    .local v2, "newformat":Landroid/media/MediaFormat;
    const-string v3, "channel-count"

    invoke-virtual {v2, v3}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I

    move-result v3

    .line 358
    .local v3, "new_channels":I
    const-string v4, "sample-rate"

    invoke-virtual {v2, v4}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I

    move-result v4

    .line 360
    .local v4, "new_rate":I
    iget v5, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->sampleRate_:I

    if-ne v5, v4, :cond_23

    iget v5, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->channels_:I

    if-eq v5, v3, :cond_24

    .line 361
    :cond_23
    const/4 v0, 0x1

    .line 364
    :cond_24
    iput v4, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->sampleRate_:I

    .line 365
    iput v3, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->channels_:I
    :try_end_28
    .catch Ljava/lang/Exception; {:try_start_9 .. :try_end_28} :catch_29

    .line 367
    return v0

    .line 369
    .end local v2    # "newformat":Landroid/media/MediaFormat;
    .end local v3    # "new_channels":I
    .end local v4    # "new_rate":I
    :catch_29
    move-exception v2

    .line 370
    .local v2, "e":Ljava/lang/Exception;
    sget-object v3, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    const-string v4, "Failed to get new audio format!"

    invoke-static {v3, v4}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 371
    return v1
.end method

.method private copyToReadBuffer(Ljava/nio/ByteBuffer;I)V
    .registers 12
    .param p1, "inputBuffer"    # Ljava/nio/ByteBuffer;
    .param p2, "length"    # I

    .line 378
    const/4 v0, 0x0

    .line 379
    .local v0, "pos":I
    const/4 v1, 0x0

    .line 383
    .local v1, "bResetPos":Z
    :try_start_2
    invoke-direct {p0}, Lorg/webrtc/ali/AliHardwareAudioDecoder;->checkAudioForamtChange()Z

    .line 385
    :goto_5
    if-ge v0, p2, :cond_36

    .line 387
    sub-int v2, p2, v0

    .line 389
    .local v2, "readBytes":I
    sget v3, Lorg/webrtc/ali/AliHardwareAudioDecoder;->DECODE_READ_BUFFER_SIZE:I

    if-le v2, v3, :cond_13

    .line 390
    sget v3, Lorg/webrtc/ali/AliHardwareAudioDecoder;->DECODE_READ_BUFFER_SIZE:I

    move v2, v3

    .line 391
    const/4 v1, 0x1

    move v8, v2

    goto :goto_14

    .line 389
    :cond_13
    move v8, v2

    .line 394
    .end local v2    # "readBytes":I
    .local v8, "readBytes":I
    :goto_14
    if-eqz v1, :cond_1e

    .line 395
    invoke-virtual {p1, v0}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;

    .line 396
    add-int v2, v0, v8

    invoke-virtual {p1, v2}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;

    .line 399
    :cond_1e
    iget-object v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->decodeReadBuffer_:Ljava/nio/ByteBuffer;

    const/4 v3, 0x0

    invoke-virtual {v2, v3}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;

    .line 400
    iget-object v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->decodeReadBuffer_:Ljava/nio/ByteBuffer;

    invoke-virtual {v2, p1}, Ljava/nio/ByteBuffer;->put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;

    .line 402
    iget v4, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->sampleRate_:I

    iget v5, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->channels_:I

    iget-wide v6, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->nativeAudioCodec_:J

    move-object v2, p0

    move v3, v8

    invoke-direct/range {v2 .. v7}, Lorg/webrtc/ali/AliHardwareAudioDecoder;->nativeDataBufferIsReady(IIIJ)V
    :try_end_34
    .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_34} :catch_37

    .line 404
    add-int/2addr v0, v8

    .line 405
    .end local v8    # "readBytes":I
    goto :goto_5

    .line 409
    :cond_36
    goto :goto_3b

    .line 407
    :catch_37
    move-exception v2

    .line 408
    .local v2, "ex":Ljava/lang/Exception;
    invoke-virtual {v2}, Ljava/lang/Exception;->printStackTrace()V

    .line 410
    .end local v2    # "ex":Ljava/lang/Exception;
    :goto_3b
    return-void
.end method

.method private dequeueInputBuffer()V
    .registers 14

    .line 238
    iget-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    const-wide/16 v1, 0x0

    invoke-virtual {v0, v1, v2}, Landroid/media/MediaCodec;->dequeueInputBuffer(J)I

    move-result v0

    .line 240
    .local v0, "index":I
    if-ltz v0, :cond_4e

    .line 244
    sget v1, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v2, 0x15

    if-lt v1, v2, :cond_17

    .line 245
    iget-object v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    invoke-virtual {v1, v0}, Landroid/media/MediaCodec;->getInputBuffer(I)Ljava/nio/ByteBuffer;

    move-result-object v1

    .local v1, "inBuf":Ljava/nio/ByteBuffer;
    goto :goto_21

    .line 247
    .end local v1    # "inBuf":Ljava/nio/ByteBuffer;
    :cond_17
    iget-object v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    invoke-virtual {v1}, Landroid/media/MediaCodec;->getInputBuffers()[Ljava/nio/ByteBuffer;

    move-result-object v1

    iput-object v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->inputBuffers_:[Ljava/nio/ByteBuffer;

    .line 248
    aget-object v1, v1, v0

    .line 251
    .restart local v1    # "inBuf":Ljava/nio/ByteBuffer;
    :goto_21
    iget-object v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    invoke-virtual {v2}, Landroid/media/MediaExtractor;->getSampleTime()J

    move-result-wide v10

    .line 252
    .local v10, "sampleTime":J
    iget-object v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    invoke-virtual {v2}, Landroid/media/MediaExtractor;->getSampleFlags()I

    move-result v2

    .line 253
    .local v2, "flags":I
    iget-object v3, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    const/4 v4, 0x0

    invoke-virtual {v3, v1, v4}, Landroid/media/MediaExtractor;->readSampleData(Ljava/nio/ByteBuffer;I)I

    move-result v3

    .line 255
    .local v3, "sampleSize":I
    if-gtz v3, :cond_3e

    .line 256
    const/4 v4, 0x1

    iput-boolean v4, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->inputStreamEnd_:Z

    .line 257
    or-int/lit8 v2, v2, 0x4

    .line 258
    const/4 v3, 0x0

    move v12, v3

    goto :goto_3f

    .line 255
    :cond_3e
    move v12, v3

    .line 261
    .end local v3    # "sampleSize":I
    .local v12, "sampleSize":I
    :goto_3f
    iget-object v3, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    const/4 v5, 0x0

    move v4, v0

    move v6, v12

    move-wide v7, v10

    move v9, v2

    invoke-virtual/range {v3 .. v9}, Landroid/media/MediaCodec;->queueInputBuffer(IIIJI)V

    .line 262
    iget-object v3, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    invoke-virtual {v3}, Landroid/media/MediaExtractor;->advance()Z

    .line 264
    .end local v1    # "inBuf":Ljava/nio/ByteBuffer;
    .end local v2    # "flags":I
    .end local v10    # "sampleTime":J
    .end local v12    # "sampleSize":I
    :cond_4e
    return-void
.end method

.method private dequeueOutputBuffer()V
    .registers 8

    .line 274
    iget-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    iget-object v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->info:Landroid/media/MediaCodec$BufferInfo;

    const-wide/16 v2, 0x0

    invoke-virtual {v0, v1, v2, v3}, Landroid/media/MediaCodec;->dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I

    move-result v0

    .line 276
    .local v0, "index":I
    const/4 v1, 0x0

    iput-boolean v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->decodeIsReady_:Z

    .line 278
    const/4 v2, -0x3

    if-eq v0, v2, :cond_95

    const/4 v2, -0x2

    if-eq v0, v2, :cond_95

    const/4 v2, -0x1

    const/4 v3, 0x1

    if-eq v0, v2, :cond_52

    .line 298
    if-ltz v0, :cond_51

    .line 300
    iput v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->retryCount_:I

    .line 302
    iget-object v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->info:Landroid/media/MediaCodec$BufferInfo;

    iget v2, v2, Landroid/media/MediaCodec$BufferInfo;->flags:I

    and-int/lit8 v2, v2, 0x4

    if-eqz v2, :cond_25

    .line 303
    iput-boolean v3, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->outputStreamEnd_:Z

    .line 306
    :cond_25
    sget v2, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v4, 0x15

    if-lt v2, v4, :cond_39

    .line 307
    iget-object v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    invoke-virtual {v2, v0}, Landroid/media/MediaCodec;->getOutputBuffer(I)Ljava/nio/ByteBuffer;

    move-result-object v2

    .line 308
    .local v2, "outbuf":Ljava/nio/ByteBuffer;
    invoke-virtual {v2}, Ljava/nio/ByteBuffer;->limit()I

    move-result v4

    invoke-direct {p0, v2, v4}, Lorg/webrtc/ali/AliHardwareAudioDecoder;->copyToReadBuffer(Ljava/nio/ByteBuffer;I)V

    .line 309
    .end local v2    # "outbuf":Ljava/nio/ByteBuffer;
    goto :goto_4a

    .line 310
    :cond_39
    iget-object v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    invoke-virtual {v2}, Landroid/media/MediaCodec;->getOutputBuffers()[Ljava/nio/ByteBuffer;

    move-result-object v2

    iput-object v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->outputBuffers_:[Ljava/nio/ByteBuffer;

    .line 311
    aget-object v2, v2, v0

    .line 312
    .restart local v2    # "outbuf":Ljava/nio/ByteBuffer;
    iget-object v4, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->info:Landroid/media/MediaCodec$BufferInfo;

    iget v4, v4, Landroid/media/MediaCodec$BufferInfo;->size:I

    invoke-direct {p0, v2, v4}, Lorg/webrtc/ali/AliHardwareAudioDecoder;->copyToReadBuffer(Ljava/nio/ByteBuffer;I)V

    .line 315
    .end local v2    # "outbuf":Ljava/nio/ByteBuffer;
    :goto_4a
    iget-object v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    invoke-virtual {v2, v0, v1}, Landroid/media/MediaCodec;->releaseOutputBuffer(IZ)V

    .line 316
    iput-boolean v3, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->decodeIsReady_:Z

    .line 319
    :cond_51
    return-void

    .line 282
    :cond_52
    iget v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->retryCount_:I

    add-int/2addr v2, v3

    iput v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->retryCount_:I

    sget v4, Lorg/webrtc/ali/AliHardwareAudioDecoder;->MAX_DECODER_RETRY_COUNT:I

    if-lt v2, v4, :cond_95

    iget-boolean v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->isMeizu_:Z

    if-nez v2, :cond_63

    iget-boolean v2, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->isVivo_:Z

    if-eqz v2, :cond_95

    .line 284
    :cond_63
    sget-object v2, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    new-instance v4, Ljava/lang/StringBuilder;

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

    const-string v5, "Failed to dequeueBuffer trycount="

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

    iget v5, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->retryCount_:I

    invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    const-string v5, " presentationTime="

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

    iget-object v5, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->info:Landroid/media/MediaCodec$BufferInfo;

    iget-wide v5, v5, Landroid/media/MediaCodec$BufferInfo;->presentationTimeUs:J

    invoke-virtual {v4, v5, v6}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;

    const-string v5, " total="

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

    iget-wide v5, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->fileLength_:J

    invoke-virtual {v4, v5, v6}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;

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

    move-result-object v4

    invoke-static {v2, v4}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 288
    iput v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->retryCount_:I

    .line 289
    iput-boolean v3, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->outputStreamEnd_:Z

    .line 294
    :cond_95
    return-void
.end method

.method public static isAACSupported()Z
    .registers 10

    .line 415
    const/4 v0, 0x1

    .line 419
    .local v0, "supported":Z
    const/4 v1, 0x0

    :try_start_2
    sget v2, Landroid/os/Build$VERSION;->SDK_INT:I
    :try_end_4
    .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_4} :catch_5a

    const/16 v3, 0x15

    const-string v4, "nvidia"

    if-lt v2, v3, :cond_34

    .line 421
    :try_start_a
    new-instance v2, Landroid/media/MediaCodecList;

    const/4 v3, 0x1

    invoke-direct {v2, v3}, Landroid/media/MediaCodecList;-><init>(I)V

    .line 422
    .local v2, "codecList":Landroid/media/MediaCodecList;
    invoke-virtual {v2}, Landroid/media/MediaCodecList;->getCodecInfos()[Landroid/media/MediaCodecInfo;

    move-result-object v3

    .line 423
    .local v3, "codecInfos":[Landroid/media/MediaCodecInfo;
    array-length v5, v3

    const/4 v6, 0x0

    :goto_16
    if-ge v6, v5, :cond_33

    aget-object v7, v3, v6

    .line 424
    .local v7, "codecInfo":Landroid/media/MediaCodecInfo;
    invoke-virtual {v7}, Landroid/media/MediaCodecInfo;->isEncoder()Z

    move-result v8

    if-nez v8, :cond_30

    .line 426
    invoke-virtual {v7}, Landroid/media/MediaCodecInfo;->getName()Ljava/lang/String;

    move-result-object v8

    invoke-virtual {v8}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;

    move-result-object v8

    .line 427
    .local v8, "name":Ljava/lang/String;
    invoke-virtual {v8, v4}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v9

    if-eqz v9, :cond_30

    .line 428
    const/4 v0, 0x0

    .line 429
    goto :goto_33

    .line 423
    .end local v7    # "codecInfo":Landroid/media/MediaCodecInfo;
    .end local v8    # "name":Ljava/lang/String;
    :cond_30
    add-int/lit8 v6, v6, 0x1

    goto :goto_16

    .line 434
    .end local v2    # "codecList":Landroid/media/MediaCodecList;
    .end local v3    # "codecInfos":[Landroid/media/MediaCodecInfo;
    :cond_33
    :goto_33
    goto :goto_58

    .line 436
    :cond_34
    invoke-static {}, Landroid/media/MediaCodecList;->getCodecCount()I

    move-result v2

    .line 438
    .local v2, "numCodecs":I
    const/4 v3, 0x0

    .local v3, "i":I
    :goto_39
    if-ge v3, v2, :cond_58

    .line 439
    invoke-static {v3}, Landroid/media/MediaCodecList;->getCodecInfoAt(I)Landroid/media/MediaCodecInfo;

    move-result-object v5

    .line 440
    .local v5, "codecInfo":Landroid/media/MediaCodecInfo;
    invoke-virtual {v5}, Landroid/media/MediaCodecInfo;->isEncoder()Z

    move-result v6

    if-nez v6, :cond_55

    .line 442
    invoke-virtual {v5}, Landroid/media/MediaCodecInfo;->getName()Ljava/lang/String;

    move-result-object v6

    invoke-virtual {v6}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;

    move-result-object v6

    .line 443
    .local v6, "name":Ljava/lang/String;
    invoke-virtual {v6, v4}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v7
    :try_end_51
    .catch Ljava/lang/Exception; {:try_start_a .. :try_end_51} :catch_5a

    if-eqz v7, :cond_55

    .line 444
    const/4 v0, 0x0

    .line 445
    goto :goto_58

    .line 438
    .end local v5    # "codecInfo":Landroid/media/MediaCodecInfo;
    .end local v6    # "name":Ljava/lang/String;
    :cond_55
    add-int/lit8 v3, v3, 0x1

    goto :goto_39

    .line 456
    .end local v2    # "numCodecs":I
    .end local v3    # "i":I
    :cond_58
    :goto_58
    nop

    .line 458
    return v0

    .line 452
    :catch_5a
    move-exception v2

    .line 453
    .local v2, "ex":Ljava/lang/Exception;
    sget-object v3, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    const-string v4, "Failed to get aac decoder"

    invoke-static {v3, v4}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 454
    invoke-virtual {v2}, Ljava/lang/Exception;->printStackTrace()V

    .line 455
    return v1
.end method

.method private native nativeCacheDirectBufferAddress(Ljava/nio/ByteBuffer;J)V
.end method

.method private native nativeCodecInit(IIJJ)V
.end method

.method private native nativeDataBufferIsReady(IIIJ)V
.end method


# virtual methods
.method public decodeData()Z
    .registers 4

    .line 328
    :try_start_0
    iget-boolean v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->inputStreamEnd_:Z

    if-nez v0, :cond_7

    .line 329
    invoke-direct {p0}, Lorg/webrtc/ali/AliHardwareAudioDecoder;->dequeueInputBuffer()V

    .line 332
    :cond_7
    iget-boolean v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->outputStreamEnd_:Z

    if-nez v0, :cond_e

    .line 333
    invoke-direct {p0}, Lorg/webrtc/ali/AliHardwareAudioDecoder;->dequeueOutputBuffer()V
    :try_end_e
    .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_e} :catch_12

    .line 340
    :cond_e
    nop

    .line 342
    iget-boolean v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->outputStreamEnd_:Z

    return v0

    .line 336
    :catch_12
    move-exception v0

    .line 337
    .local v0, "ex":Ljava/lang/Exception;
    sget-object v1, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    const-string v2, "Failed to decode data!"

    invoke-static {v1, v2}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 338
    invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V

    .line 339
    const/4 v1, 0x0

    return v1
.end method

.method public decodeIsReady()Z
    .registers 2

    .line 470
    iget-boolean v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->decodeIsReady_:Z

    return v0
.end method

.method public getAudioChannels()I
    .registers 2

    .line 185
    iget v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->channels_:I

    return v0
.end method

.method public getAudioSampleRate()I
    .registers 2

    .line 189
    iget v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->sampleRate_:I

    return v0
.end method

.method public getFileLength()J
    .registers 3

    .line 193
    iget-wide v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->fileLength_:J

    return-wide v0
.end method

.method public getFilePosition()J
    .registers 3

    .line 462
    iget-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    invoke-virtual {v0}, Landroid/media/MediaExtractor;->getSampleTime()J

    move-result-wide v0

    return-wide v0
.end method

.method public initDecoder(Ljava/lang/String;)I
    .registers 17
    .param p1, "filename"    # Ljava/lang/String;

    .line 84
    move-object v8, p0

    move-object/from16 v9, p1

    const-string v1, "Failed to Connect URL:"

    const-string v0, "open Audio File name:"

    const/4 v10, 0x0

    :try_start_8
    iput v10, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->retryCount_:I

    .line 85
    iget-object v2, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->decodeReadBuffer_:Ljava/nio/ByteBuffer;

    invoke-virtual {v2}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;

    .line 88
    sget-object v2, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    new-instance v3, Ljava/lang/StringBuilder;

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

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

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

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

    move-result-object v3

    invoke-static {v2, v3}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 90
    invoke-virtual/range {p1 .. p1}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;

    move-result-object v2

    const-string v3, "http"

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

    move-result v2

    move v11, v2

    .line 91
    .local v11, "isHttpFile":Z
    const-string v2, "/assets/"

    move-object v12, v2

    .line 92
    .local v12, "assets_prefix":Ljava/lang/String;
    invoke-virtual {v9, v12}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z

    move-result v2

    move v13, v2

    .line 94
    .local v13, "isAssetsFile":Z
    new-instance v2, Landroid/media/MediaExtractor;

    invoke-direct {v2}, Landroid/media/MediaExtractor;-><init>()V

    iput-object v2, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    .line 96
    if-eqz v13, :cond_83

    .line 98
    iget-object v1, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->context_:Landroid/content/Context;
    :try_end_41
    .catch Ljava/lang/Exception; {:try_start_8 .. :try_end_41} :catch_184

    if-nez v1, :cond_45

    .line 99
    const/4 v0, -0x1

    return v0

    .line 103
    :cond_45
    :try_start_45
    iget-object v1, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->context_:Landroid/content/Context;

    invoke-virtual {v1}, Landroid/content/Context;->getAssets()Landroid/content/res/AssetManager;

    move-result-object v1

    invoke-virtual {v12}, Ljava/lang/String;->length()I

    move-result v2

    invoke-virtual {v9, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Landroid/content/res/AssetManager;->openFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;

    move-result-object v1

    .line 104
    .local v1, "assetfd":Landroid/content/res/AssetFileDescriptor;
    iget-object v2, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    invoke-virtual {v1}, Landroid/content/res/AssetFileDescriptor;->getFileDescriptor()Ljava/io/FileDescriptor;

    move-result-object v3

    invoke-virtual {v1}, Landroid/content/res/AssetFileDescriptor;->getStartOffset()J

    move-result-wide v4

    invoke-virtual {v1}, Landroid/content/res/AssetFileDescriptor;->getLength()J

    move-result-wide v6

    invoke-virtual/range {v2 .. v7}, Landroid/media/MediaExtractor;->setDataSource(Ljava/io/FileDescriptor;JJ)V
    :try_end_68
    .catch Ljava/io/IOException; {:try_start_45 .. :try_end_68} :catch_6a
    .catch Ljava/lang/Exception; {:try_start_45 .. :try_end_68} :catch_184

    .line 109
    .end local v1    # "assetfd":Landroid/content/res/AssetFileDescriptor;
    goto/16 :goto_ef

    .line 106
    :catch_6a
    move-exception v0

    .line 107
    .local v0, "ex":Ljava/io/IOException;
    :try_start_6b
    sget-object v1, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    new-instance v2, Ljava/lang/StringBuilder;

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

    const-string v3, "Failed to open assert File:"

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

    invoke-virtual {v2, v9}, 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/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V
    :try_end_81
    .catch Ljava/lang/Exception; {:try_start_6b .. :try_end_81} :catch_184

    .line 108
    const/4 v1, -0x2

    return v1

    .line 111
    .end local v0    # "ex":Ljava/io/IOException;
    :cond_83
    if-eqz v11, :cond_ec

    .line 115
    const/4 v2, 0x1

    :try_start_86
    invoke-static {v2}, Ljava/net/HttpURLConnection;->setFollowRedirects(Z)V

    .line 116
    new-instance v2, Ljava/net/URL;

    invoke-direct {v2, v9}, Ljava/net/URL;-><init>(Ljava/lang/String;)V

    invoke-virtual {v2}, Ljava/net/URL;->openConnection()Ljava/net/URLConnection;

    move-result-object v2

    check-cast v2, Ljava/net/HttpURLConnection;

    .line 118
    .local v2, "con":Ljava/net/HttpURLConnection;
    sget v3, Lorg/webrtc/ali/AliHardwareAudioDecoder;->HTTP_REQUEST_TIMEOUT:I

    invoke-virtual {v2, v3}, Ljava/net/HttpURLConnection;->setConnectTimeout(I)V

    .line 119
    sget v3, Lorg/webrtc/ali/AliHardwareAudioDecoder;->HTTP_REQUEST_TIMEOUT:I

    invoke-virtual {v2, v3}, Ljava/net/HttpURLConnection;->setReadTimeout(I)V

    .line 120
    invoke-virtual {v2}, Ljava/net/HttpURLConnection;->connect()V

    .line 122
    invoke-virtual {v2}, Ljava/net/HttpURLConnection;->getResponseCode()I

    move-result v3

    const/16 v4, 0xc8

    if-ne v3, v4, :cond_af

    .line 123
    iget-object v3, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    invoke-virtual {v3, v9}, Landroid/media/MediaExtractor;->setDataSource(Ljava/lang/String;)V
    :try_end_ae
    .catch Ljava/net/SocketTimeoutException; {:try_start_86 .. :try_end_ae} :catch_d0
    .catch Ljava/io/IOException; {:try_start_86 .. :try_end_ae} :catch_b1
    .catch Ljava/lang/Exception; {:try_start_86 .. :try_end_ae} :catch_184

    .line 135
    .end local v2    # "con":Ljava/net/HttpURLConnection;
    goto :goto_ef

    .line 125
    .restart local v2    # "con":Ljava/net/HttpURLConnection;
    :cond_af
    const/4 v0, -0x3

    return v0

    .line 131
    .end local v2    # "con":Ljava/net/HttpURLConnection;
    :catch_b1
    move-exception v0

    .line 132
    .restart local v0    # "ex":Ljava/io/IOException;
    :try_start_b2
    sget-object v2, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    new-instance v3, Ljava/lang/StringBuilder;

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

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

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

    const-string v1, " exception!"

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

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

    move-result-object v1

    invoke-static {v2, v1}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 133
    invoke-virtual {v0}, Ljava/io/IOException;->printStackTrace()V

    .line 134
    const/4 v1, -0x5

    return v1

    .line 128
    .end local v0    # "ex":Ljava/io/IOException;
    :catch_d0
    move-exception v0

    .line 129
    .local v0, "ex":Ljava/net/SocketTimeoutException;
    sget-object v2, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    new-instance v3, Ljava/lang/StringBuilder;

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

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

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

    const-string v1, " timeout!"

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

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

    move-result-object v1

    invoke-static {v2, v1}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 130
    const/4 v1, -0x4

    return v1

    .line 138
    .end local v0    # "ex":Ljava/net/SocketTimeoutException;
    :cond_ec
    invoke-virtual {v2, v9}, Landroid/media/MediaExtractor;->setDataSource(Ljava/lang/String;)V

    .line 141
    :goto_ef
    iget-object v1, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    invoke-virtual {v1}, Landroid/media/MediaExtractor;->getTrackCount()I

    move-result v1

    move v14, v1

    .line 143
    .local v14, "nTrackCount":I
    const/4 v1, 0x0

    .local v1, "i":I
    :goto_f7
    if-ge v1, v14, :cond_101

    .line 144
    iget-object v2, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    invoke-virtual {v2, v1}, Landroid/media/MediaExtractor;->unselectTrack(I)V

    .line 143
    add-int/lit8 v1, v1, 0x1

    goto :goto_f7

    .line 147
    .end local v1    # "i":I
    :cond_101
    const/4 v1, 0x0

    .restart local v1    # "i":I
    :goto_102
    if-ge v1, v14, :cond_12f

    .line 149
    iget-object v2, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    invoke-virtual {v2, v1}, Landroid/media/MediaExtractor;->getTrackFormat(I)Landroid/media/MediaFormat;

    move-result-object v2

    iput-object v2, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->trackFormat_:Landroid/media/MediaFormat;

    .line 150
    const-string v3, "mime"

    invoke-virtual {v2, v3}, Landroid/media/MediaFormat;->getString(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v2

    .line 152
    .local v2, "mimeType":Ljava/lang/String;
    const-string v3, "audio/"

    invoke-virtual {v2, v3}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v3

    if-eqz v3, :cond_12c

    .line 153
    iget-object v3, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    invoke-virtual {v3, v1}, Landroid/media/MediaExtractor;->selectTrack(I)V

    .line 154
    invoke-static {v2}, Landroid/media/MediaCodec;->createDecoderByType(Ljava/lang/String;)Landroid/media/MediaCodec;

    move-result-object v3

    iput-object v3, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    .line 155
    iget-object v4, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->trackFormat_:Landroid/media/MediaFormat;

    const/4 v5, 0x0

    invoke-virtual {v3, v4, v5, v5, v10}, Landroid/media/MediaCodec;->configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;I)V

    .line 156
    goto :goto_12f

    .line 147
    .end local v2    # "mimeType":Ljava/lang/String;
    :cond_12c
    add-int/lit8 v1, v1, 0x1

    goto :goto_102

    .line 160
    .end local v1    # "i":I
    :cond_12f
    :goto_12f
    iget-object v1, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    if-nez v1, :cond_135

    .line 161
    const/4 v0, -0x6

    return v0

    .line 164
    :cond_135
    iget-object v1, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    invoke-virtual {v1}, Landroid/media/MediaCodec;->start()V

    .line 166
    iget-object v1, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->trackFormat_:Landroid/media/MediaFormat;

    const-string v2, "sample-rate"

    invoke-virtual {v1, v2}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I

    move-result v1

    iput v1, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->sampleRate_:I

    .line 167
    iget-object v1, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->trackFormat_:Landroid/media/MediaFormat;

    const-string v2, "channel-count"

    invoke-virtual {v1, v2}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I

    move-result v1

    iput v1, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->channels_:I

    .line 168
    iget-object v1, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->trackFormat_:Landroid/media/MediaFormat;

    const-string v2, "durationUs"

    invoke-virtual {v1, v2}, Landroid/media/MediaFormat;->getLong(Ljava/lang/String;)J

    move-result-wide v4

    iput-wide v4, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->fileLength_:J

    .line 170
    iget v2, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->sampleRate_:I

    iget v3, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->channels_:I

    iget-wide v6, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->nativeAudioCodec_:J

    move-object v1, p0

    invoke-direct/range {v1 .. v7}, Lorg/webrtc/ali/AliHardwareAudioDecoder;->nativeCodecInit(IIJJ)V

    .line 171
    iget-object v1, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->decodeReadBuffer_:Ljava/nio/ByteBuffer;

    iget-wide v2, v8, Lorg/webrtc/ali/AliHardwareAudioDecoder;->nativeAudioCodec_:J

    invoke-direct {p0, v1, v2, v3}, Lorg/webrtc/ali/AliHardwareAudioDecoder;->nativeCacheDirectBufferAddress(Ljava/nio/ByteBuffer;J)V

    .line 173
    sget-object v1, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    new-instance v2, Ljava/lang/StringBuilder;

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

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

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

    const-string v0, " succ!"

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

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

    move-result-object v0

    invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
    :try_end_182
    .catch Ljava/lang/Exception; {:try_start_b2 .. :try_end_182} :catch_184

    .line 179
    .end local v11    # "isHttpFile":Z
    .end local v12    # "assets_prefix":Ljava/lang/String;
    .end local v13    # "isAssetsFile":Z
    .end local v14    # "nTrackCount":I
    nop

    .line 181
    return v10

    .line 175
    :catch_184
    move-exception v0

    .line 176
    .local v0, "ex":Ljava/lang/Exception;
    sget-object v1, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    new-instance v2, Ljava/lang/StringBuilder;

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

    const-string v3, "Failed to open file:"

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

    invoke-virtual {v2, v9}, 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/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 177
    invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V

    .line 178
    const/4 v1, -0x7

    return v1
.end method

.method public releaseDecoder()V
    .registers 4

    .line 213
    :try_start_0
    iget-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    const/4 v1, 0x0

    if-eqz v0, :cond_11

    .line 214
    iget-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    invoke-virtual {v0}, Landroid/media/MediaCodec;->stop()V

    .line 215
    iget-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    invoke-virtual {v0}, Landroid/media/MediaCodec;->release()V

    .line 216
    iput-object v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    .line 219
    :cond_11
    iget-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    if-eqz v0, :cond_1c

    .line 220
    iget-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    invoke-virtual {v0}, Landroid/media/MediaExtractor;->release()V

    .line 221
    iput-object v1, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;
    :try_end_1c
    .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_1c} :catch_1d

    .line 226
    :cond_1c
    goto :goto_28

    .line 223
    :catch_1d
    move-exception v0

    .line 224
    .local v0, "e":Ljava/lang/Exception;
    sget-object v1, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    const-string v2, "Failed to releaseDecoder file!"

    invoke-static {v1, v2}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 225
    invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V

    .line 228
    .end local v0    # "e":Ljava/lang/Exception;
    :goto_28
    sget-object v0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    const-string v1, "releaseDecoder!"

    invoke-static {v0, v1}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 229
    const/4 v0, 0x0

    iput-boolean v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->outputStreamEnd_:Z

    .line 230
    iput-boolean v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->inputStreamEnd_:Z

    .line 231
    return-void
.end method

.method public rewindDecoder()V
    .registers 5

    .line 199
    :try_start_0
    iget-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    const-wide/16 v1, 0x0

    const/4 v3, 0x1

    invoke-virtual {v0, v1, v2, v3}, Landroid/media/MediaExtractor;->seekTo(JI)V

    .line 200
    iget-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->mediaCodec_:Landroid/media/MediaCodec;

    invoke-virtual {v0}, Landroid/media/MediaCodec;->flush()V
    :try_end_d
    .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_d} :catch_e

    .line 203
    goto :goto_16

    .line 201
    :catch_e
    move-exception v0

    .line 202
    .local v0, "e":Ljava/lang/Exception;
    sget-object v1, Lorg/webrtc/ali/AliHardwareAudioDecoder;->TAG:Ljava/lang/String;

    const-string v2, "Failed to rewind file!"

    invoke-static {v1, v2}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 205
    .end local v0    # "e":Ljava/lang/Exception;
    :goto_16
    const/4 v0, 0x0

    iput-boolean v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->inputStreamEnd_:Z

    .line 206
    iput-boolean v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->outputStreamEnd_:Z

    .line 207
    iput-boolean v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->decodeIsReady_:Z

    .line 208
    return-void
.end method

.method public setFilePosition(J)V
    .registers 5
    .param p1, "pos"    # J

    .line 466
    iget-object v0, p0, Lorg/webrtc/ali/AliHardwareAudioDecoder;->extractor_:Landroid/media/MediaExtractor;

    const/4 v1, 0x2

    invoke-virtual {v0, p1, p2, v1}, Landroid/media/MediaExtractor;->seekTo(JI)V

    .line 467
    return-void
.end method