/*
* Java port of ogg demultiplexer.
* Copyright (c) 2004 Jonathan Hueber.
*
* License conditions are the same as OggVorbis. See README.
* 1a39e335700bec46ae31a38e2156a898
*/
/********************************************************************
* *
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
* by the XIPHOPHORUS Company http://www.xiph.org/ *
* *
********************************************************************/
package net.sourceforge.jffmpeg.codecs.audio.vorbis;
public class OggReader {
byte[] data;
int offset;
int bitPointer;
public void setData( byte[] data, int offset ) {
this.data = data;
this.offset = offset;
bitPointer = 0;
}
public void skipBits( int bits ) {
offset += (bitPointer + bits)/8;
bitPointer = (bitPointer + bits) & 7;
}
public long showBits( int bits ) {
long mask = maskBits[ bits ];
bits += bitPointer;
long val = (data[ offset ]&0xff) >> bitPointer;
if ( bits > 8 ) val |= (data[ offset + 1 ]&0xff)<< ( 8 - bitPointer );
if ( bits > 16) val |= (data[ offset + 2 ]&0xff)<< ( 16- bitPointer );
if ( bits > 24) val |= (data[ offset + 3 ]&0xff)<< ( 24- bitPointer );
if ( bits > 32) val |= (data[ offset + 4 ]&0xff)<< ( 32- bitPointer );
return val & mask;
}
public long getBits( int bits ) {
long mask = maskBits[ bits ];
bits += bitPointer;
long val = (data[ offset ]&0xff) >> bitPointer;
if ( bits > 8 ) val |= (data[ offset + 1 ]&0xff)<< ( 8 - bitPointer );
if ( bits > 16) val |= (data[ offset + 2 ]&0xff)<< ( 16- bitPointer );
if ( bits > 24) val |= (data[ offset + 3 ]&0xff)<< ( 24- bitPointer );
if ( bits > 32) val |= (data[ offset + 4 ]&0xff)<< ( 32- bitPointer );
offset += bits/8;
bitPointer = bits & 7;
return val & mask;
}
private static long[] maskBits = new long[] {
0x00000000,0x00000001,0x00000003,0x00000007,0x0000000f,
0x0000001f,0x0000003f,0x0000007f,0x000000ff,0x000001ff,
0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff,
0x00007fff,0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff,
0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff,
0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff,
0x3fffffff,0x7fffffff,(long)0xffffffff
};
}