BitWriterBuffer.smali
.class public Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;
.super Ljava/lang/Object;
.source "BitWriterBuffer.java"
# static fields
.field static final synthetic $assertionsDisabled:Z
# instance fields
.field private buffer:Ljava/nio/ByteBuffer;
.field initialPos:I
.field position:I
# direct methods
.method static constructor <clinit>()V
.registers 0
.line 5
return-void
.end method
.method public constructor <init>(Ljava/nio/ByteBuffer;)V
.registers 3
.param p1, "buffer" # Ljava/nio/ByteBuffer;
.line 11
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 9
const/4 v0, 0x0
iput v0, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->position:I
.line 12
iput-object p1, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->buffer:Ljava/nio/ByteBuffer;
.line 13
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->position()I
move-result v0
iput v0, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->initialPos:I
.line 14
return-void
.end method
# virtual methods
.method public writeBits(II)V
.registers 9
.param p1, "i" # I
.param p2, "numBits" # I
.line 17
nop
.line 20
iget v0, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->position:I
rem-int/lit8 v1, v0, 0x8
rsub-int/lit8 v1, v1, 0x8
.line 21
.local v1, "left":I
const/4 v2, 0x1
if-gt p2, v1, :cond_3c
.line 22
iget-object v3, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->buffer:Ljava/nio/ByteBuffer;
iget v4, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->initialPos:I
div-int/lit8 v0, v0, 0x8
add-int/2addr v4, v0
invoke-virtual {v3, v4}, Ljava/nio/ByteBuffer;->get(I)B
move-result v0
.line 23
.local v0, "current":I
if-gez v0, :cond_1a
add-int/lit16 v3, v0, 0x100
goto :goto_1b
:cond_1a
move v3, v0
:goto_1b
move v0, v3
.line 24
sub-int v3, v1, p2
shl-int v3, p1, v3
add-int/2addr v0, v3
.line 25
iget-object v3, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->buffer:Ljava/nio/ByteBuffer;
iget v4, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->initialPos:I
iget v5, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->position:I
div-int/lit8 v5, v5, 0x8
add-int/2addr v4, v5
const/16 v5, 0x7f
if-le v0, v5, :cond_31
add-int/lit16 v5, v0, -0x100
goto :goto_32
:cond_31
move v5, v0
:goto_32
int-to-byte v5, v5
invoke-virtual {v3, v4, v5}, Ljava/nio/ByteBuffer;->put(IB)Ljava/nio/ByteBuffer;
.line 26
iget v3, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->position:I
add-int/2addr v3, p2
iput v3, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->position:I
.line 27
.end local v0 # "current":I
goto :goto_4a
.line 28
:cond_3c
sub-int v0, p2, v1
.line 29
.local v0, "bitsSecondWrite":I
shr-int v3, p1, v0
invoke-virtual {p0, v3, v1}, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->writeBits(II)V
.line 30
shl-int v3, v2, v0
sub-int/2addr v3, v2
and-int/2addr v3, p1
invoke-virtual {p0, v3, v0}, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->writeBits(II)V
.line 32
.end local v0 # "bitsSecondWrite":I
:goto_4a
iget-object v0, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->buffer:Ljava/nio/ByteBuffer;
iget v3, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->initialPos:I
iget v4, p0, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitWriterBuffer;->position:I
div-int/lit8 v5, v4, 0x8
add-int/2addr v3, v5
rem-int/lit8 v4, v4, 0x8
if-lez v4, :cond_58
goto :goto_59
:cond_58
const/4 v2, 0x0
:goto_59
add-int/2addr v3, v2
invoke-virtual {v0, v3}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 33
return-void
.end method