HevcConfig.smali

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


# instance fields
.field public final initializationData:Ljava/util/List;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/List<",
            "[B>;"
        }
    .end annotation
.end field

.field public final nalUnitLengthFieldLength:I


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

    return-void
.end method

.method private constructor <init>(Ljava/util/List;I)V
    .registers 3
    .param p2, "nalUnitLengthFieldLength"    # I
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/util/List<",
            "[B>;I)V"
        }
    .end annotation

    .line 86
    .local p1, "initializationData":Ljava/util/List;, "Ljava/util/List<[B>;"
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 87
    iput-object p1, p0, Lcom/google/android/exoplayer2/video/HevcConfig;->initializationData:Ljava/util/List;

    .line 88
    iput p2, p0, Lcom/google/android/exoplayer2/video/HevcConfig;->nalUnitLengthFieldLength:I

    .line 89
    return-void
.end method

.method public static parse(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/video/HevcConfig;
    .registers 15
    .param p0, "data"    # Lcom/google/android/exoplayer2/util/ParsableByteArray;
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Lcom/google/android/exoplayer2/ParserException;
        }
    .end annotation

    .line 43
    const/16 v0, 0x15

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

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

    move-result v0

    and-int/lit8 v0, v0, 0x3

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

    move-result v1

    .line 48
    .local v1, "numberOfArrays":I
    const/4 v2, 0x0

    .line 49
    .local v2, "csdLength":I
    invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I

    move-result v3

    .line 50
    .local v3, "csdStartPosition":I
    const/4 v4, 0x0

    .local v4, "i":I
    :goto_15
    const/4 v5, 0x1

    if-ge v4, v1, :cond_32

    .line 51
    invoke-virtual {p0, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V

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

    move-result v5

    .line 53
    .local v5, "numberOfNalUnits":I
    const/4 v6, 0x0

    .local v6, "j":I
    :goto_20
    if-ge v6, v5, :cond_2f

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

    move-result v7

    .line 55
    .local v7, "nalUnitLength":I
    add-int/lit8 v8, v7, 0x4

    add-int/2addr v2, v8

    .line 56
    invoke-virtual {p0, v7}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V

    .line 53
    .end local v7    # "nalUnitLength":I
    add-int/lit8 v6, v6, 0x1

    goto :goto_20

    .line 50
    .end local v5    # "numberOfNalUnits":I
    .end local v6    # "j":I
    :cond_2f
    add-int/lit8 v4, v4, 0x1

    goto :goto_15

    .line 61
    .end local v4    # "i":I
    :cond_32
    invoke-virtual {p0, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V

    .line 62
    new-array v4, v2, [B

    .line 63
    .local v4, "buffer":[B
    const/4 v6, 0x0

    .line 64
    .local v6, "bufferPosition":I
    const/4 v7, 0x0

    .local v7, "i":I
    :goto_39
    if-ge v7, v1, :cond_69

    .line 65
    invoke-virtual {p0, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V

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

    move-result v8

    .line 67
    .local v8, "numberOfNalUnits":I
    const/4 v9, 0x0

    .local v9, "j":I
    :goto_43
    if-ge v9, v8, :cond_66

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

    move-result v10

    .line 69
    .local v10, "nalUnitLength":I
    sget-object v11, Lcom/google/android/exoplayer2/util/NalUnitUtil;->NAL_START_CODE:[B

    const/4 v12, 0x0

    sget-object v13, Lcom/google/android/exoplayer2/util/NalUnitUtil;->NAL_START_CODE:[B

    array-length v13, v13

    invoke-static {v11, v12, v4, v6, v13}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 71
    sget-object v11, Lcom/google/android/exoplayer2/util/NalUnitUtil;->NAL_START_CODE:[B

    array-length v11, v11

    add-int/2addr v6, v11

    .line 72
    iget-object v11, p0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B

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

    move-result v12

    invoke-static {v11, v12, v4, v6, v10}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 74
    add-int/2addr v6, v10

    .line 75
    invoke-virtual {p0, v10}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V

    .line 67
    .end local v10    # "nalUnitLength":I
    add-int/lit8 v9, v9, 0x1

    goto :goto_43

    .line 64
    .end local v8    # "numberOfNalUnits":I
    .end local v9    # "j":I
    :cond_66
    add-int/lit8 v7, v7, 0x1

    goto :goto_39

    .line 79
    .end local v7    # "i":I
    :cond_69
    if-nez v2, :cond_6d

    const/4 v5, 0x0

    goto :goto_71

    :cond_6d
    invoke-static {v4}, Ljava/util/Collections;->singletonList(Ljava/lang/Object;)Ljava/util/List;

    move-result-object v5

    .line 80
    .local v5, "initializationData":Ljava/util/List;, "Ljava/util/List<[B>;"
    :goto_71
    new-instance v7, Lcom/google/android/exoplayer2/video/HevcConfig;

    add-int/lit8 v8, v0, 0x1

    invoke-direct {v7, v5, v8}, Lcom/google/android/exoplayer2/video/HevcConfig;-><init>(Ljava/util/List;I)V
    :try_end_78
    .catch Ljava/lang/ArrayIndexOutOfBoundsException; {:try_start_2 .. :try_end_78} :catch_79

    return-object v7

    .line 81
    .end local v0    # "lengthSizeMinusOne":I
    .end local v1    # "numberOfArrays":I
    .end local v2    # "csdLength":I
    .end local v3    # "csdStartPosition":I
    .end local v4    # "buffer":[B
    .end local v5    # "initializationData":Ljava/util/List;, "Ljava/util/List<[B>;"
    .end local v6    # "bufferPosition":I
    :catch_79
    move-exception v0

    .line 82
    .local v0, "e":Ljava/lang/ArrayIndexOutOfBoundsException;
    new-instance v1, Lcom/google/android/exoplayer2/ParserException;

    const-string v2, "Error parsing HEVC config"

    invoke-direct {v1, v2, v0}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V

    goto :goto_83

    :goto_82
    throw v1

    :goto_83
    goto :goto_82
.end method