ParsableNalUnitBitArray.smali
.class public final Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
.super Ljava/lang/Object;
.source "ParsableNalUnitBitArray.java"
# instance fields
.field private bitOffset:I
.field private byteLimit:I
.field private byteOffset:I
.field private data:[B
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>([BII)V
.registers 4
.param p1, "data" # [B
.param p2, "offset" # I
.param p3, "limit" # I
.line 39
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 40
invoke-virtual {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->reset([BII)V
.line 41
return-void
.end method
.method private assertValidOffset()V
.registers 3
.line 207
iget v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
if-ltz v0, :cond_10
iget v1, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteLimit:I
if-lt v0, v1, :cond_e
if-ne v0, v1, :cond_10
iget v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
if-nez v0, :cond_10
:cond_e
const/4 v0, 0x1
goto :goto_11
:cond_10
const/4 v0, 0x0
:goto_11
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 209
return-void
.end method
.method private readExpGolombCodeNum()I
.registers 4
.line 193
const/4 v0, 0x0
.line 194
.local v0, "leadingZeros":I
:goto_1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBit()Z
move-result v1
if-nez v1, :cond_a
.line 195
add-int/lit8 v0, v0, 0x1
goto :goto_1
.line 197
:cond_a
const/4 v1, 0x1
shl-int v2, v1, v0
sub-int/2addr v2, v1
if-lez v0, :cond_15
invoke-virtual {p0, v0}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBits(I)I
move-result v1
goto :goto_16
:cond_15
const/4 v1, 0x0
:goto_16
add-int/2addr v2, v1
return v2
.end method
.method private shouldSkipByte(I)Z
.registers 5
.param p1, "offset" # I
.line 201
const/4 v0, 0x2
if-gt v0, p1, :cond_1c
iget v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteLimit:I
if-ge p1, v0, :cond_1c
iget-object v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->data:[B
aget-byte v1, v0, p1
const/4 v2, 0x3
if-ne v1, v2, :cond_1c
add-int/lit8 v1, p1, -0x2
aget-byte v1, v0, v1
if-nez v1, :cond_1c
add-int/lit8 v1, p1, -0x1
aget-byte v0, v0, v1
if-nez v0, :cond_1c
const/4 v0, 0x1
goto :goto_1d
:cond_1c
const/4 v0, 0x0
:goto_1d
return v0
.end method
# virtual methods
.method public canReadBits(I)Z
.registers 9
.param p1, "numBits" # I
.line 101
iget v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
.line 102
.local v0, "oldByteOffset":I
div-int/lit8 v1, p1, 0x8
.line 103
.local v1, "numBytes":I
iget v2, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
add-int/2addr v2, v1
.line 104
.local v2, "newByteOffset":I
iget v3, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
add-int/2addr v3, p1
mul-int/lit8 v4, v1, 0x8
sub-int/2addr v3, v4
.line 105
.local v3, "newBitOffset":I
const/4 v4, 0x7
if-le v3, v4, :cond_14
.line 106
add-int/lit8 v2, v2, 0x1
.line 107
add-int/lit8 v3, v3, -0x8
.line 109
:cond_14
add-int/lit8 v4, v0, 0x1
.local v4, "i":I
:goto_16
const/4 v5, 0x1
if-gt v4, v2, :cond_29
iget v6, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteLimit:I
if-ge v2, v6, :cond_29
.line 110
invoke-direct {p0, v4}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->shouldSkipByte(I)Z
move-result v6
if-eqz v6, :cond_27
.line 112
add-int/lit8 v2, v2, 0x1
.line 113
add-int/lit8 v4, v4, 0x2
.line 109
:cond_27
add-int/2addr v4, v5
goto :goto_16
.line 116
.end local v4 # "i":I
:cond_29
iget v4, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteLimit:I
if-lt v2, v4, :cond_33
if-ne v2, v4, :cond_32
if-nez v3, :cond_32
goto :goto_33
:cond_32
const/4 v5, 0x0
:cond_33
:goto_33
return v5
.end method
.method public canReadExpGolombCodedNum()Z
.registers 8
.line 161
iget v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
.line 162
.local v0, "initialByteOffset":I
iget v1, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
.line 163
.local v1, "initialBitOffset":I
const/4 v2, 0x0
.line 164
.local v2, "leadingZeros":I
:goto_5
iget v3, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
iget v4, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteLimit:I
if-ge v3, v4, :cond_14
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBit()Z
move-result v3
if-nez v3, :cond_14
.line 165
add-int/lit8 v2, v2, 0x1
goto :goto_5
.line 167
:cond_14
iget v3, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
iget v4, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteLimit:I
const/4 v5, 0x0
const/4 v6, 0x1
if-ne v3, v4, :cond_1e
const/4 v3, 0x1
goto :goto_1f
:cond_1e
const/4 v3, 0x0
.line 168
.local v3, "hitLimit":Z
:goto_1f
iput v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
.line 169
iput v1, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
.line 170
if-nez v3, :cond_2f
mul-int/lit8 v4, v2, 0x2
add-int/2addr v4, v6
invoke-virtual {p0, v4}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v4
if-eqz v4, :cond_2f
const/4 v5, 0x1
:cond_2f
return v5
.end method
.method public readBit()Z
.registers 4
.line 125
iget-object v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->data:[B
iget v1, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
aget-byte v0, v0, v1
iget v1, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
const/16 v2, 0x80
shr-int v1, v2, v1
and-int/2addr v0, v1
if-eqz v0, :cond_11
const/4 v0, 0x1
goto :goto_12
:cond_11
const/4 v0, 0x0
.line 126
.local v0, "returnValue":Z
:goto_12
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->skipBit()V
.line 127
return v0
.end method
.method public readBits(I)I
.registers 10
.param p1, "numBits" # I
.line 137
const/4 v0, 0x0
.line 138
.local v0, "returnValue":I
iget v1, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
add-int/2addr v1, p1
iput v1, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
.line 139
:goto_6
iget v1, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
const/4 v2, 0x2
const/4 v3, 0x1
const/16 v4, 0x8
if-le v1, v4, :cond_2b
.line 140
add-int/lit8 v1, v1, -0x8
iput v1, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
.line 141
iget-object v4, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->data:[B
iget v5, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
aget-byte v4, v4, v5
and-int/lit16 v4, v4, 0xff
shl-int v1, v4, v1
or-int/2addr v0, v1
.line 142
add-int/lit8 v1, v5, 0x1
invoke-direct {p0, v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->shouldSkipByte(I)Z
move-result v1
if-eqz v1, :cond_26
goto :goto_27
:cond_26
const/4 v2, 0x1
:goto_27
add-int/2addr v5, v2
iput v5, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
goto :goto_6
.line 144
:cond_2b
iget-object v5, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->data:[B
iget v6, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
aget-byte v5, v5, v6
and-int/lit16 v5, v5, 0xff
rsub-int/lit8 v7, v1, 0x8
shr-int/2addr v5, v7
or-int/2addr v0, v5
.line 145
const/4 v5, -0x1
rsub-int/lit8 v7, p1, 0x20
ushr-int/2addr v5, v7
and-int/2addr v0, v5
.line 146
if-ne v1, v4, :cond_4e
.line 147
const/4 v1, 0x0
iput v1, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
.line 148
add-int/lit8 v1, v6, 0x1
invoke-direct {p0, v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->shouldSkipByte(I)Z
move-result v1
if-eqz v1, :cond_4a
goto :goto_4b
:cond_4a
const/4 v2, 0x1
:goto_4b
add-int/2addr v6, v2
iput v6, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
.line 150
:cond_4e
invoke-direct {p0}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->assertValidOffset()V
.line 151
return v0
.end method
.method public readSignedExpGolombCodedInt()I
.registers 4
.line 188
invoke-direct {p0}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readExpGolombCodeNum()I
move-result v0
.line 189
.local v0, "codeNum":I
rem-int/lit8 v1, v0, 0x2
if-nez v1, :cond_a
const/4 v1, -0x1
goto :goto_b
:cond_a
const/4 v1, 0x1
:goto_b
add-int/lit8 v2, v0, 0x1
div-int/lit8 v2, v2, 0x2
mul-int v1, v1, v2
return v1
.end method
.method public readUnsignedExpGolombCodedInt()I
.registers 2
.line 179
invoke-direct {p0}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readExpGolombCodeNum()I
move-result v0
return v0
.end method
.method public reset([BII)V
.registers 5
.param p1, "data" # [B
.param p2, "offset" # I
.param p3, "limit" # I
.line 51
iput-object p1, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->data:[B
.line 52
iput p2, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
.line 53
iput p3, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteLimit:I
.line 54
const/4 v0, 0x0
iput v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
.line 55
invoke-direct {p0}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->assertValidOffset()V
.line 56
return-void
.end method
.method public skipBit()V
.registers 4
.line 62
iget v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
const/4 v1, 0x1
add-int/2addr v0, v1
iput v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
const/16 v2, 0x8
if-ne v0, v2, :cond_1b
.line 63
const/4 v0, 0x0
iput v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
.line 64
iget v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
add-int/lit8 v2, v0, 0x1
invoke-direct {p0, v2}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->shouldSkipByte(I)Z
move-result v2
if-eqz v2, :cond_18
const/4 v1, 0x2
:cond_18
add-int/2addr v0, v1
iput v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
.line 66
:cond_1b
invoke-direct {p0}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->assertValidOffset()V
.line 67
return-void
.end method
.method public skipBits(I)V
.registers 7
.param p1, "numBits" # I
.line 75
iget v0, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
.line 76
.local v0, "oldByteOffset":I
div-int/lit8 v1, p1, 0x8
.line 77
.local v1, "numBytes":I
iget v2, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
add-int/2addr v2, v1
iput v2, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
.line 78
iget v3, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
mul-int/lit8 v4, v1, 0x8
sub-int v4, p1, v4
add-int/2addr v3, v4
iput v3, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
.line 79
const/4 v4, 0x7
if-le v3, v4, :cond_1d
.line 80
add-int/lit8 v2, v2, 0x1
iput v2, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
.line 81
add-int/lit8 v3, v3, -0x8
iput v3, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->bitOffset:I
.line 83
:cond_1d
add-int/lit8 v2, v0, 0x1
.local v2, "i":I
:goto_1f
iget v3, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
if-gt v2, v3, :cond_34
.line 84
invoke-direct {p0, v2}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->shouldSkipByte(I)Z
move-result v3
if-eqz v3, :cond_31
.line 86
iget v3, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
add-int/lit8 v3, v3, 0x1
iput v3, p0, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->byteOffset:I
.line 87
add-int/lit8 v2, v2, 0x2
.line 83
:cond_31
add-int/lit8 v2, v2, 0x1
goto :goto_1f
.line 90
.end local v2 # "i":I
:cond_34
invoke-direct {p0}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->assertValidOffset()V
.line 91
return-void
.end method