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