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