Ac3Util.smali

.class public final Lcom/google/android/exoplayer2/audio/Ac3Util;
.super Ljava/lang/Object;
.source "Ac3Util.java"


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lcom/google/android/exoplayer2/audio/Ac3Util$SyncFrameInfo;
    }
.end annotation


# static fields
.field private static final AC3_SYNCFRAME_AUDIO_SAMPLE_COUNT:I = 0x600

.field private static final AUDIO_SAMPLES_PER_AUDIO_BLOCK:I = 0x100

.field private static final BITRATE_BY_HALF_FRMSIZECOD:[I

.field private static final BLOCKS_PER_SYNCFRAME_BY_NUMBLKSCOD:[I

.field private static final CHANNEL_COUNT_BY_ACMOD:[I

.field private static final SAMPLE_RATE_BY_FSCOD:[I

.field private static final SAMPLE_RATE_BY_FSCOD2:[I

.field private static final SYNCFRAME_SIZE_WORDS_BY_HALF_FRMSIZECOD_44_1:[I

.field public static final TRUEHD_RECHUNK_SAMPLE_COUNT:I = 0x10

.field public static final TRUEHD_SYNCFRAME_PREFIX_LENGTH:I = 0xa


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

    .line 123
    const/4 v0, 0x4

    new-array v0, v0, [I

    fill-array-data v0, :array_32

    sput-object v0, Lcom/google/android/exoplayer2/audio/Ac3Util;->BLOCKS_PER_SYNCFRAME_BY_NUMBLKSCOD:[I

    .line 127
    const/4 v0, 0x3

    new-array v1, v0, [I

    fill-array-data v1, :array_3e

    sput-object v1, Lcom/google/android/exoplayer2/audio/Ac3Util;->SAMPLE_RATE_BY_FSCOD:[I

    .line 131
    new-array v0, v0, [I

    fill-array-data v0, :array_48

    sput-object v0, Lcom/google/android/exoplayer2/audio/Ac3Util;->SAMPLE_RATE_BY_FSCOD2:[I

    .line 135
    const/16 v0, 0x8

    new-array v0, v0, [I

    fill-array-data v0, :array_52

    sput-object v0, Lcom/google/android/exoplayer2/audio/Ac3Util;->CHANNEL_COUNT_BY_ACMOD:[I

    .line 139
    const/16 v0, 0x13

    new-array v1, v0, [I

    fill-array-data v1, :array_66

    sput-object v1, Lcom/google/android/exoplayer2/audio/Ac3Util;->BITRATE_BY_HALF_FRMSIZECOD:[I

    .line 144
    new-array v0, v0, [I

    fill-array-data v0, :array_90

    sput-object v0, Lcom/google/android/exoplayer2/audio/Ac3Util;->SYNCFRAME_SIZE_WORDS_BY_HALF_FRMSIZECOD_44_1:[I

    return-void

    nop

    :array_32
    .array-data 4
        0x1
        0x2
        0x3
        0x6
    .end array-data

    :array_3e
    .array-data 4
        0xbb80
        0xac44
        0x7d00
    .end array-data

    :array_48
    .array-data 4
        0x5dc0
        0x5622
        0x3e80
    .end array-data

    :array_52
    .array-data 4
        0x2
        0x1
        0x2
        0x3
        0x3
        0x4
        0x4
        0x5
    .end array-data

    :array_66
    .array-data 4
        0x20
        0x28
        0x30
        0x38
        0x40
        0x50
        0x60
        0x70
        0x80
        0xa0
        0xc0
        0xe0
        0x100
        0x140
        0x180
        0x1c0
        0x200
        0x240
        0x280
    .end array-data

    :array_90
    .array-data 4
        0x45
        0x57
        0x68
        0x79
        0x8b
        0xae
        0xd0
        0xf3
        0x116
        0x15c
        0x1a1
        0x1e7
        0x22d
        0x2b8
        0x343
        0x3cf
        0x45a
        0x4e5
        0x571
    .end array-data
.end method

.method private constructor <init>()V
    .registers 1

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

    return-void
.end method

.method public static findTrueHdSyncframeOffset(Ljava/nio/ByteBuffer;)I
    .registers 6
    .param p0, "buffer"    # Ljava/nio/ByteBuffer;

    .line 510
    invoke-virtual {p0}, Ljava/nio/ByteBuffer;->position()I

    move-result v0

    .line 511
    .local v0, "startIndex":I
    invoke-virtual {p0}, Ljava/nio/ByteBuffer;->limit()I

    move-result v1

    add-int/lit8 v1, v1, -0xa

    .line 512
    .local v1, "endIndex":I
    move v2, v0

    .local v2, "i":I
    :goto_b
    if-gt v2, v1, :cond_22

    .line 514
    add-int/lit8 v3, v2, 0x4

    invoke-virtual {p0, v3}, Ljava/nio/ByteBuffer;->getInt(I)I

    move-result v3

    const v4, -0x1000001

    and-int/2addr v3, v4

    const v4, -0x45908d08

    if-ne v3, v4, :cond_1f

    .line 515
    sub-int v3, v2, v0

    return v3

    .line 512
    :cond_1f
    add-int/lit8 v2, v2, 0x1

    goto :goto_b

    .line 518
    .end local v2    # "i":I
    :cond_22
    const/4 v2, -0x1

    return v2
.end method

.method public static getAc3SyncframeAudioSampleCount()I
    .registers 1

    .line 484
    const/16 v0, 0x600

    return v0
.end method

.method private static getAc3SyncframeSize(II)I
    .registers 6
    .param p0, "fscod"    # I
    .param p1, "frmsizecod"    # I

    .line 558
    div-int/lit8 v0, p1, 0x2

    .line 559
    .local v0, "halfFrmsizecod":I
    if-ltz p0, :cond_2e

    sget-object v1, Lcom/google/android/exoplayer2/audio/Ac3Util;->SAMPLE_RATE_BY_FSCOD:[I

    array-length v2, v1

    if-ge p0, v2, :cond_2e

    if-ltz p1, :cond_2e

    sget-object v2, Lcom/google/android/exoplayer2/audio/Ac3Util;->SYNCFRAME_SIZE_WORDS_BY_HALF_FRMSIZECOD_44_1:[I

    array-length v3, v2

    if-lt v0, v3, :cond_11

    goto :goto_2e

    .line 564
    :cond_11
    aget v1, v1, p0

    .line 565
    .local v1, "sampleRate":I
    const v3, 0xac44

    if-ne v1, v3, :cond_20

    .line 566
    aget v2, v2, v0

    rem-int/lit8 v3, p1, 0x2

    add-int/2addr v2, v3

    mul-int/lit8 v2, v2, 0x2

    return v2

    .line 568
    :cond_20
    sget-object v2, Lcom/google/android/exoplayer2/audio/Ac3Util;->BITRATE_BY_HALF_FRMSIZECOD:[I

    aget v2, v2, v0

    .line 569
    .local v2, "bitrate":I
    const/16 v3, 0x7d00

    if-ne v1, v3, :cond_2b

    .line 570
    mul-int/lit8 v3, v2, 0x6

    return v3

    .line 572
    :cond_2b
    mul-int/lit8 v3, v2, 0x4

    return v3

    .line 562
    .end local v1    # "sampleRate":I
    .end local v2    # "bitrate":I
    :cond_2e
    :goto_2e
    const/4 v1, -0x1

    return v1
.end method

.method public static parseAc3AnnexFFormat(Lcom/google/android/exoplayer2/util/ParsableByteArray;Ljava/lang/String;Ljava/lang/String;Lcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
    .registers 19
    .param p0, "data"    # Lcom/google/android/exoplayer2/util/ParsableByteArray;
    .param p1, "trackId"    # Ljava/lang/String;
    .param p2, "language"    # Ljava/lang/String;
    .param p3, "drmInitData"    # Lcom/google/android/exoplayer2/drm/DrmInitData;

    .line 159
    invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I

    move-result v0

    and-int/lit16 v0, v0, 0xc0

    shr-int/lit8 v0, v0, 0x6

    .line 160
    .local v0, "fscod":I
    sget-object v1, Lcom/google/android/exoplayer2/audio/Ac3Util;->SAMPLE_RATE_BY_FSCOD:[I

    aget v1, v1, v0

    .line 161
    .local v1, "sampleRate":I
    invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I

    move-result v13

    .line 162
    .local v13, "nextByte":I
    sget-object v2, Lcom/google/android/exoplayer2/audio/Ac3Util;->CHANNEL_COUNT_BY_ACMOD:[I

    and-int/lit8 v3, v13, 0x38

    shr-int/lit8 v3, v3, 0x3

    aget v2, v2, v3

    .line 163
    .local v2, "channelCount":I
    and-int/lit8 v3, v13, 0x4

    if-eqz v3, :cond_20

    .line 164
    add-int/lit8 v2, v2, 0x1

    move v14, v2

    goto :goto_21

    .line 163
    :cond_20
    move v14, v2

    .line 166
    .end local v2    # "channelCount":I
    .local v14, "channelCount":I
    :goto_21
    const/4 v4, 0x0

    const/4 v5, -0x1

    const/4 v6, -0x1

    const/4 v9, 0x0

    const/4 v11, 0x0

    const-string v3, "audio/ac3"

    move-object/from16 v2, p1

    move v7, v14

    move v8, v1

    move-object/from16 v10, p3

    move-object/from16 v12, p2

    invoke-static/range {v2 .. v12}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;

    move-result-object v2

    return-object v2
.end method

.method public static parseAc3SyncframeInfo(Lcom/google/android/exoplayer2/util/ParsableBitArray;)Lcom/google/android/exoplayer2/audio/Ac3Util$SyncFrameInfo;
    .registers 29
    .param p0, "data"    # Lcom/google/android/exoplayer2/util/ParsableBitArray;

    .line 243
    move-object/from16 v0, p0

    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->getPosition()I

    move-result v1

    .line 244
    .local v1, "initialPosition":I
    const/16 v2, 0x28

    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 245
    const/4 v2, 0x5

    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v3

    const/16 v4, 0x10

    const/4 v5, 0x1

    if-ne v3, v4, :cond_17

    const/4 v3, 0x1

    goto :goto_18

    :cond_17
    const/4 v3, 0x0

    .line 246
    .local v3, "isEac3":Z
    :goto_18
    invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->setPosition(I)V

    .line 248
    const/4 v6, -0x1

    .line 255
    .local v6, "streamType":I
    const/4 v7, 0x3

    const/16 v8, 0x8

    const/4 v10, 0x2

    if-eqz v3, :cond_231

    .line 257
    invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 258
    invoke-virtual {v0, v10}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v11

    if-eqz v11, :cond_35

    if-eq v11, v5, :cond_33

    if-eq v11, v10, :cond_31

    .line 269
    const/4 v6, -0x1

    goto :goto_37

    .line 266
    :cond_31
    const/4 v6, 0x2

    .line 267
    goto :goto_37

    .line 263
    :cond_33
    const/4 v6, 0x1

    .line 264
    goto :goto_37

    .line 260
    :cond_35
    const/4 v6, 0x0

    .line 261
    nop

    .line 272
    :goto_37
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 273
    const/16 v11, 0xb

    invoke-virtual {v0, v11}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v11

    add-int/2addr v11, v5

    mul-int/lit8 v11, v11, 0x2

    .line 274
    .local v11, "frameSize":I
    invoke-virtual {v0, v10}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v12

    .line 277
    .local v12, "fscod":I
    if-ne v12, v7, :cond_54

    .line 278
    const/4 v13, 0x3

    .line 279
    .local v13, "numblkscod":I
    sget-object v14, Lcom/google/android/exoplayer2/audio/Ac3Util;->SAMPLE_RATE_BY_FSCOD2:[I

    invoke-virtual {v0, v10}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v15

    aget v14, v14, v15

    .line 280
    .local v14, "sampleRate":I
    const/4 v15, 0x6

    .local v15, "audioBlocks":I
    goto :goto_60

    .line 282
    .end local v13    # "numblkscod":I
    .end local v14    # "sampleRate":I
    .end local v15    # "audioBlocks":I
    :cond_54
    invoke-virtual {v0, v10}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v13

    .line 283
    .restart local v13    # "numblkscod":I
    sget-object v14, Lcom/google/android/exoplayer2/audio/Ac3Util;->BLOCKS_PER_SYNCFRAME_BY_NUMBLKSCOD:[I

    aget v15, v14, v13

    .line 284
    .restart local v15    # "audioBlocks":I
    sget-object v14, Lcom/google/android/exoplayer2/audio/Ac3Util;->SAMPLE_RATE_BY_FSCOD:[I

    aget v14, v14, v12

    .line 286
    .restart local v14    # "sampleRate":I
    :goto_60
    mul-int/lit16 v9, v15, 0x100

    .line 287
    .local v9, "sampleCount":I
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v10

    .line 288
    .local v10, "acmod":I
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v18

    .line 289
    .local v18, "lfeon":Z
    sget-object v19, Lcom/google/android/exoplayer2/audio/Ac3Util;->CHANNEL_COUNT_BY_ACMOD:[I

    aget v19, v19, v10

    add-int v19, v19, v18

    .line 290
    .local v19, "channelCount":I
    const/16 v7, 0xa

    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 291
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v7

    if-eqz v7, :cond_7e

    .line 292
    invoke-virtual {v0, v8}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 294
    :cond_7e
    if-nez v10, :cond_8c

    .line 295
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 296
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v7

    if-eqz v7, :cond_8c

    .line 297
    invoke-virtual {v0, v8}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 300
    :cond_8c
    if-ne v6, v5, :cond_97

    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v7

    if-eqz v7, :cond_97

    .line 301
    invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 303
    :cond_97
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v4

    const/4 v7, 0x4

    if-eqz v4, :cond_1c5

    .line 304
    const/4 v4, 0x2

    if-le v10, v4, :cond_a4

    .line 305
    invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 307
    :cond_a4
    and-int/lit8 v17, v10, 0x1

    if-eqz v17, :cond_af

    if-le v10, v4, :cond_af

    .line 308
    const/4 v4, 0x6

    invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    goto :goto_b0

    .line 307
    :cond_af
    const/4 v4, 0x6

    .line 310
    :goto_b0
    and-int/lit8 v16, v10, 0x4

    if-eqz v16, :cond_b7

    .line 311
    invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 313
    :cond_b7
    if-eqz v18, :cond_c2

    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v4

    if-eqz v4, :cond_c2

    .line 314
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 316
    :cond_c2
    if-nez v6, :cond_1c5

    .line 317
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v4

    if-eqz v4, :cond_cf

    .line 318
    const/4 v4, 0x6

    invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    goto :goto_d0

    .line 317
    :cond_cf
    const/4 v4, 0x6

    .line 320
    :goto_d0
    if-nez v10, :cond_db

    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v16

    if-eqz v16, :cond_db

    .line 321
    invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 323
    :cond_db
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v16

    if-eqz v16, :cond_e4

    .line 324
    invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 326
    :cond_e4
    const/4 v4, 0x2

    invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v8

    .line 327
    .local v8, "mixdef":I
    if-ne v8, v5, :cond_f0

    .line 328
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    goto/16 :goto_191

    .line 329
    :cond_f0
    if-ne v8, v4, :cond_f9

    .line 330
    const/16 v4, 0xc

    invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    goto/16 :goto_191

    .line 331
    :cond_f9
    const/4 v4, 0x3

    if-ne v8, v4, :cond_191

    .line 332
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v4

    .line 333
    .local v4, "mixdeflen":I
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_160

    .line 334
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 335
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_112

    .line 336
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 338
    :cond_112
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_11b

    .line 339
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 341
    :cond_11b
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_124

    .line 342
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 344
    :cond_124
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_12d

    .line 345
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 347
    :cond_12d
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_136

    .line 348
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 350
    :cond_136
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_13f

    .line 351
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 353
    :cond_13f
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_148

    .line 354
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 356
    :cond_148
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_160

    .line 357
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_157

    .line 358
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 360
    :cond_157
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_160

    .line 361
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 365
    :cond_160
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_185

    .line 366
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 367
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v22

    if-eqz v22, :cond_182

    .line 368
    const/4 v5, 0x7

    invoke-virtual {v0, v5}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 369
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v5

    if-eqz v5, :cond_17f

    .line 370
    const/16 v5, 0x8

    invoke-virtual {v0, v5}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    goto :goto_187

    .line 369
    :cond_17f
    const/16 v5, 0x8

    goto :goto_187

    .line 367
    :cond_182
    const/16 v5, 0x8

    goto :goto_187

    .line 365
    :cond_185
    const/16 v5, 0x8

    .line 374
    :goto_187
    add-int/lit8 v21, v4, 0x2

    mul-int/lit8 v7, v21, 0x8

    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 375
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->byteAlign()V

    .line 377
    .end local v4    # "mixdeflen":I
    :cond_191
    :goto_191
    const/4 v4, 0x2

    if-ge v10, v4, :cond_1aa

    .line 378
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v4

    const/16 v5, 0xe

    if-eqz v4, :cond_19f

    .line 379
    invoke-virtual {v0, v5}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 381
    :cond_19f
    if-nez v10, :cond_1aa

    .line 382
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v4

    if-eqz v4, :cond_1aa

    .line 383
    invoke-virtual {v0, v5}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 387
    :cond_1aa
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v4

    if-eqz v4, :cond_1c5

    .line 388
    if-nez v13, :cond_1b6

    .line 389
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    goto :goto_1c5

    .line 391
    :cond_1b6
    const/4 v4, 0x0

    .local v4, "blk":I
    :goto_1b7
    if-ge v4, v15, :cond_1c5

    .line 392
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v5

    if-eqz v5, :cond_1c2

    .line 393
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 391
    :cond_1c2
    add-int/lit8 v4, v4, 0x1

    goto :goto_1b7

    .line 400
    .end local v4    # "blk":I
    .end local v8    # "mixdef":I
    :cond_1c5
    :goto_1c5
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v4

    if-eqz v4, :cond_1fb

    .line 401
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 402
    const/4 v2, 0x2

    if-ne v10, v2, :cond_1d5

    .line 403
    const/4 v4, 0x4

    invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 405
    :cond_1d5
    const/4 v4, 0x6

    if-lt v10, v4, :cond_1db

    .line 406
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 408
    :cond_1db
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v2

    if-eqz v2, :cond_1e7

    .line 409
    const/16 v2, 0x8

    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    goto :goto_1e9

    .line 408
    :cond_1e7
    const/16 v2, 0x8

    .line 411
    :goto_1e9
    if-nez v10, :cond_1f4

    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v4

    if-eqz v4, :cond_1f4

    .line 412
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 414
    :cond_1f4
    const/4 v2, 0x3

    if-ge v12, v2, :cond_1fc

    .line 415
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBit()V

    goto :goto_1fc

    .line 400
    :cond_1fb
    const/4 v2, 0x3

    .line 418
    :cond_1fc
    :goto_1fc
    if-nez v6, :cond_203

    if-eq v13, v2, :cond_203

    .line 419
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBit()V

    .line 421
    :cond_203
    const/4 v4, 0x2

    if-ne v6, v4, :cond_216

    if-eq v13, v2, :cond_211

    .line 422
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v2

    if-eqz v2, :cond_20f

    goto :goto_211

    :cond_20f
    const/4 v2, 0x6

    goto :goto_217

    .line 423
    :cond_211
    :goto_211
    const/4 v2, 0x6

    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    goto :goto_217

    .line 421
    :cond_216
    const/4 v2, 0x6

    .line 425
    :goto_217
    const-string v4, "audio/eac3"

    .line 426
    .local v4, "mimeType":Ljava/lang/String;
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v5

    if-eqz v5, :cond_230

    .line 427
    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v2

    .line 428
    .local v2, "addbsil":I
    const/4 v5, 0x1

    if-ne v2, v5, :cond_230

    const/16 v7, 0x8

    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v7

    if-ne v7, v5, :cond_230

    .line 429
    const-string v4, "audio/eac3-joc"

    .line 432
    .end local v2    # "addbsil":I
    .end local v12    # "fscod":I
    .end local v13    # "numblkscod":I
    .end local v15    # "audioBlocks":I
    :cond_230
    goto :goto_279

    .line 433
    .end local v4    # "mimeType":Ljava/lang/String;
    .end local v9    # "sampleCount":I
    .end local v10    # "acmod":I
    .end local v11    # "frameSize":I
    .end local v14    # "sampleRate":I
    .end local v18    # "lfeon":Z
    .end local v19    # "channelCount":I
    :cond_231
    const-string v4, "audio/ac3"

    .line 434
    .restart local v4    # "mimeType":Ljava/lang/String;
    const/16 v2, 0x20

    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 435
    const/4 v2, 0x2

    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v5

    .line 436
    .local v5, "fscod":I
    const/4 v2, 0x6

    invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v2

    .line 437
    .local v2, "frmsizecod":I
    invoke-static {v5, v2}, Lcom/google/android/exoplayer2/audio/Ac3Util;->getAc3SyncframeSize(II)I

    move-result v11

    .line 438
    .restart local v11    # "frameSize":I
    const/16 v7, 0x8

    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 439
    const/4 v7, 0x3

    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I

    move-result v10

    .line 440
    .restart local v10    # "acmod":I
    and-int/lit8 v7, v10, 0x1

    if-eqz v7, :cond_25c

    const/4 v7, 0x1

    if-eq v10, v7, :cond_25c

    .line 441
    const/4 v7, 0x2

    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    goto :goto_25d

    .line 440
    :cond_25c
    const/4 v7, 0x2

    .line 443
    :goto_25d
    and-int/lit8 v8, v10, 0x4

    if-eqz v8, :cond_264

    .line 444
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 446
    :cond_264
    if-ne v10, v7, :cond_269

    .line 447
    invoke-virtual {v0, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V

    .line 449
    :cond_269
    sget-object v7, Lcom/google/android/exoplayer2/audio/Ac3Util;->SAMPLE_RATE_BY_FSCOD:[I

    aget v14, v7, v5

    .line 450
    .restart local v14    # "sampleRate":I
    const/16 v9, 0x600

    .line 451
    .restart local v9    # "sampleCount":I
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z

    move-result v18

    .line 452
    .restart local v18    # "lfeon":Z
    sget-object v7, Lcom/google/android/exoplayer2/audio/Ac3Util;->CHANNEL_COUNT_BY_ACMOD:[I

    aget v7, v7, v10

    add-int v19, v7, v18

    .line 454
    .end local v2    # "frmsizecod":I
    .end local v5    # "fscod":I
    .restart local v19    # "channelCount":I
    :goto_279
    new-instance v2, Lcom/google/android/exoplayer2/audio/Ac3Util$SyncFrameInfo;

    const/16 v27, 0x0

    move-object/from16 v20, v2

    move-object/from16 v21, v4

    move/from16 v22, v6

    move/from16 v23, v19

    move/from16 v24, v14

    move/from16 v25, v11

    move/from16 v26, v9

    invoke-direct/range {v20 .. v27}, Lcom/google/android/exoplayer2/audio/Ac3Util$SyncFrameInfo;-><init>(Ljava/lang/String;IIIIILcom/google/android/exoplayer2/audio/Ac3Util$1;)V

    return-object v2
.end method

.method public static parseAc3SyncframeSize([B)I
    .registers 5
    .param p0, "data"    # [B

    .line 465
    array-length v0, p0

    const/4 v1, 0x6

    if-ge v0, v1, :cond_6

    .line 466
    const/4 v0, -0x1

    return v0

    .line 468
    :cond_6
    const/4 v0, 0x5

    aget-byte v0, p0, v0

    and-int/lit16 v0, v0, 0xff

    const/4 v2, 0x3

    shr-int/2addr v0, v2

    const/16 v3, 0x10

    if-ne v0, v3, :cond_13

    const/4 v0, 0x1

    goto :goto_14

    :cond_13
    const/4 v0, 0x0

    .line 469
    .local v0, "isEac3":Z
    :goto_14
    if-eqz v0, :cond_27

    .line 470
    const/4 v1, 0x2

    aget-byte v3, p0, v1

    and-int/lit8 v3, v3, 0x7

    shl-int/lit8 v3, v3, 0x8

    .line 471
    .local v3, "frmsiz":I
    aget-byte v2, p0, v2

    and-int/lit16 v2, v2, 0xff

    or-int/2addr v2, v3

    .line 472
    .end local v3    # "frmsiz":I
    .local v2, "frmsiz":I
    add-int/lit8 v3, v2, 0x1

    mul-int/lit8 v3, v3, 0x2

    return v3

    .line 474
    .end local v2    # "frmsiz":I
    :cond_27
    const/4 v2, 0x4

    aget-byte v3, p0, v2

    and-int/lit16 v3, v3, 0xc0

    shr-int/lit8 v1, v3, 0x6

    .line 475
    .local v1, "fscod":I
    aget-byte v2, p0, v2

    and-int/lit8 v2, v2, 0x3f

    .line 476
    .local v2, "frmsizecod":I
    invoke-static {v1, v2}, Lcom/google/android/exoplayer2/audio/Ac3Util;->getAc3SyncframeSize(II)I

    move-result v3

    return v3
.end method

.method public static parseEAc3AnnexFFormat(Lcom/google/android/exoplayer2/util/ParsableByteArray;Ljava/lang/String;Ljava/lang/String;Lcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
    .registers 22
    .param p0, "data"    # Lcom/google/android/exoplayer2/util/ParsableByteArray;
    .param p1, "trackId"    # Ljava/lang/String;
    .param p2, "language"    # Ljava/lang/String;
    .param p3, "drmInitData"    # Lcom/google/android/exoplayer2/drm/DrmInitData;

    .line 192
    const/4 v0, 0x2

    move-object/from16 v1, p0

    invoke-virtual {v1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V

    .line 195
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I

    move-result v0

    and-int/lit16 v0, v0, 0xc0

    shr-int/lit8 v0, v0, 0x6

    .line 196
    .local v0, "fscod":I
    sget-object v2, Lcom/google/android/exoplayer2/audio/Ac3Util;->SAMPLE_RATE_BY_FSCOD:[I

    aget v2, v2, v0

    .line 197
    .local v2, "sampleRate":I
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I

    move-result v3

    .line 198
    .local v3, "nextByte":I
    sget-object v4, Lcom/google/android/exoplayer2/audio/Ac3Util;->CHANNEL_COUNT_BY_ACMOD:[I

    and-int/lit8 v5, v3, 0xe

    shr-int/lit8 v5, v5, 0x1

    aget v4, v4, v5

    .line 199
    .local v4, "channelCount":I
    and-int/lit8 v5, v3, 0x1

    if-eqz v5, :cond_24

    .line 200
    add-int/lit8 v4, v4, 0x1

    .line 204
    :cond_24
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I

    move-result v3

    .line 205
    and-int/lit8 v5, v3, 0x1e

    shr-int/lit8 v14, v5, 0x1

    .line 206
    .local v14, "numDepSub":I
    if-lez v14, :cond_3a

    .line 207
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I

    move-result v5

    .line 210
    .local v5, "lowByteChanLoc":I
    and-int/lit8 v6, v5, 0x2

    if-eqz v6, :cond_3a

    .line 211
    add-int/lit8 v4, v4, 0x2

    move v15, v4

    goto :goto_3b

    .line 214
    .end local v5    # "lowByteChanLoc":I
    :cond_3a
    move v15, v4

    .end local v4    # "channelCount":I
    .local v15, "channelCount":I
    :goto_3b
    const-string v4, "audio/eac3"

    .line 215
    .local v4, "mimeType":Ljava/lang/String;
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I

    move-result v5

    if-lez v5, :cond_57

    .line 216
    invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I

    move-result v3

    .line 217
    and-int/lit8 v5, v3, 0x1

    if-eqz v5, :cond_52

    .line 218
    const-string v4, "audio/eac3-joc"

    move/from16 v16, v3

    move-object/from16 v17, v4

    goto :goto_5b

    .line 217
    :cond_52
    move/from16 v16, v3

    move-object/from16 v17, v4

    goto :goto_5b

    .line 215
    :cond_57
    move/from16 v16, v3

    move-object/from16 v17, v4

    .line 221
    .end local v3    # "nextByte":I
    .end local v4    # "mimeType":Ljava/lang/String;
    .local v16, "nextByte":I
    .local v17, "mimeType":Ljava/lang/String;
    :goto_5b
    const/4 v5, 0x0

    const/4 v6, -0x1

    const/4 v7, -0x1

    const/4 v10, 0x0

    const/4 v12, 0x0

    move-object/from16 v3, p1

    move-object/from16 v4, v17

    move v8, v15

    move v9, v2

    move-object/from16 v11, p3

    move-object/from16 v13, p2

    invoke-static/range {v3 .. v13}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;

    move-result-object v3

    return-object v3
.end method

.method public static parseEAc3SyncframeAudioSampleCount(Ljava/nio/ByteBuffer;)I
    .registers 4
    .param p0, "buffer"    # Ljava/nio/ByteBuffer;

    .line 496
    invoke-virtual {p0}, Ljava/nio/ByteBuffer;->position()I

    move-result v0

    add-int/lit8 v0, v0, 0x4

    invoke-virtual {p0, v0}, Ljava/nio/ByteBuffer;->get(I)B

    move-result v0

    and-int/lit16 v0, v0, 0xc0

    const/4 v1, 0x6

    shr-int/2addr v0, v1

    .line 497
    .local v0, "fscod":I
    const/4 v2, 0x3

    if-ne v0, v2, :cond_12

    goto :goto_24

    :cond_12
    sget-object v1, Lcom/google/android/exoplayer2/audio/Ac3Util;->BLOCKS_PER_SYNCFRAME_BY_NUMBLKSCOD:[I

    .line 498
    invoke-virtual {p0}, Ljava/nio/ByteBuffer;->position()I

    move-result v2

    add-int/lit8 v2, v2, 0x4

    invoke-virtual {p0, v2}, Ljava/nio/ByteBuffer;->get(I)B

    move-result v2

    and-int/lit8 v2, v2, 0x30

    shr-int/lit8 v2, v2, 0x4

    aget v1, v1, v2

    :goto_24
    mul-int/lit16 v1, v1, 0x100

    .line 497
    return v1
.end method

.method public static parseTrueHdSyncframeAudioSampleCount(Ljava/nio/ByteBuffer;I)I
    .registers 6
    .param p0, "buffer"    # Ljava/nio/ByteBuffer;
    .param p1, "offset"    # I

    .line 553
    invoke-virtual {p0}, Ljava/nio/ByteBuffer;->position()I

    move-result v0

    add-int/2addr v0, p1

    add-int/lit8 v0, v0, 0x7

    invoke-virtual {p0, v0}, Ljava/nio/ByteBuffer;->get(I)B

    move-result v0

    and-int/lit16 v0, v0, 0xff

    const/16 v1, 0xbb

    if-ne v0, v1, :cond_13

    const/4 v0, 0x1

    goto :goto_14

    :cond_13
    const/4 v0, 0x0

    .line 554
    .local v0, "isMlp":Z
    :goto_14
    const/16 v1, 0x28

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

    move-result v2

    add-int/2addr v2, p1

    if-eqz v0, :cond_20

    const/16 v3, 0x9

    goto :goto_22

    :cond_20
    const/16 v3, 0x8

    :goto_22
    add-int/2addr v2, v3

    invoke-virtual {p0, v2}, Ljava/nio/ByteBuffer;->get(I)B

    move-result v2

    shr-int/lit8 v2, v2, 0x4

    and-int/lit8 v2, v2, 0x7

    shl-int/2addr v1, v2

    return v1
.end method

.method public static parseTrueHdSyncframeAudioSampleCount([B)I
    .registers 6
    .param p0, "syncframe"    # [B

    .line 533
    const/4 v0, 0x4

    aget-byte v1, p0, v0

    const/4 v2, 0x0

    const/4 v3, -0x8

    if-ne v1, v3, :cond_39

    const/4 v1, 0x5

    aget-byte v1, p0, v1

    const/16 v3, 0x72

    if-ne v1, v3, :cond_39

    const/4 v1, 0x6

    aget-byte v1, p0, v1

    const/16 v3, 0x6f

    if-ne v1, v3, :cond_39

    const/4 v1, 0x7

    aget-byte v3, p0, v1

    and-int/lit16 v3, v3, 0xfe

    const/16 v4, 0xba

    if-eq v3, v4, :cond_1f

    goto :goto_39

    .line 539
    :cond_1f
    aget-byte v3, p0, v1

    and-int/lit16 v3, v3, 0xff

    const/16 v4, 0xbb

    if-ne v3, v4, :cond_28

    const/4 v2, 0x1

    .line 540
    .local v2, "isMlp":Z
    :cond_28
    const/16 v3, 0x28

    if-eqz v2, :cond_2f

    const/16 v4, 0x9

    goto :goto_31

    :cond_2f
    const/16 v4, 0x8

    :goto_31
    aget-byte v4, p0, v4

    shr-int/lit8 v0, v4, 0x4

    and-int/2addr v0, v1

    shl-int v0, v3, v0

    return v0

    .line 537
    .end local v2    # "isMlp":Z
    :cond_39
    :goto_39
    return v2
.end method