package com.googlecode.mp4parser.boxes.mp4.objectdescriptors; import java.nio.ByteBuffer; public class BitWriterBuffer { private ByteBuffer buffer; int initialPos; int position = 0; public BitWriterBuffer(ByteBuffer buffer) { this.buffer = buffer; this.initialPos = buffer.position(); } public void writeBits(int i, int numBits) { assert i <= ((1 << numBits)-1): String.format("Trying to write a value bigger (%s) than the number bits (%s) allows. " + "Please mask the value before writing it and make your code is really working as intended.", i, (1< 127 ? current - 256 : current)); position += numBits; } else { int bitsSecondWrite = numBits - left; writeBits(i >> bitsSecondWrite, left); writeBits(i & (1 << bitsSecondWrite) - 1, bitsSecondWrite); } buffer.position(initialPos + position / 8 + ((position % 8 > 0) ? 1 : 0)); } }