From 9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e Mon Sep 17 00:00:00 2001 From: Michiel Van Der Kolk Date: Mon, 11 Jul 2005 15:42:37 +0000 Subject: Songdb java version, source. only 1.5 compatible git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7101 a1c6a512-1295-4272-9138-f99709370657 --- songdbj/com/jcraft/jogg/Buffer.java | 541 ++++++++++++++++++++++++++++++++++++ 1 file changed, 541 insertions(+) create mode 100644 songdbj/com/jcraft/jogg/Buffer.java (limited to 'songdbj/com/jcraft/jogg/Buffer.java') diff --git a/songdbj/com/jcraft/jogg/Buffer.java b/songdbj/com/jcraft/jogg/Buffer.java new file mode 100644 index 0000000000..a40a9def9c --- /dev/null +++ b/songdbj/com/jcraft/jogg/Buffer.java @@ -0,0 +1,541 @@ +/* -*-mode:java; c-basic-offset:2; -*- */ +/* JOrbis + * Copyright (C) 2000 ymnk, JCraft,Inc. + * + * Written by: 2000 ymnk + * + * Many thanks to + * Monty and + * The XIPHOPHORUS Company http://www.xiph.org/ . + * JOrbis has been based on their awesome works, Vorbis codec. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License + * as published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +package com.jcraft.jogg; + +public class Buffer{ + private static final int BUFFER_INCREMENT=256; + + private static final int[] mask={ + 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,0xffffffff + }; + + int ptr=0; + byte[] buffer=null; + int endbit=0; + int endbyte=0; + int storage=0; + + public void writeinit(){ + buffer=new byte[BUFFER_INCREMENT]; + ptr=0; + buffer[0]=(byte)'\0'; + storage=BUFFER_INCREMENT; + } + + public void write(byte[] s){ + for(int i=0; iret="+Integer.toHexString(ret)); + if(bits>32 && endbit!=0){ + ret|=((buffer[ptr+4])&0xff)<<(32-endbit); +// ret|=((byte)(buffer[ptr+4]))<<(32-endbit); + } + } + } + } + return(m&ret); + } + + public int look1(){ + if(endbyte>=storage)return(-1); + return((buffer[ptr]>>endbit)&1); + } + + public void adv(int bits){ + bits+=endbit; + ptr+=bits/8; + endbyte+=bits/8; + endbit=bits&7; + } + + public void adv1(){ + ++endbit; + if(endbit>7){ + endbit=0; + ptr++; + endbyte++; + } + } + + public int read(int bits){ +//System.err.println(this+" read: bits="+bits+", storage="+storage+", endbyte="+endbyte); +//System.err.println(this+" read: bits="+bits+", storage="+storage+", endbyte="+endbyte+ +// ", ptr="+ptr+", endbit="+endbit+", buf[ptr]="+buffer[ptr]); + + int ret; + int m=mask[bits]; + + bits+=endbit; + + if(endbyte+4>=storage){ + ret=-1; + if(endbyte+(bits-1)/8>=storage){ + ptr+=bits/8; + endbyte+=bits/8; + endbit=bits&7; + return(ret); + } + } + +/* + ret=(byte)(buffer[ptr]>>>endbit); + if(bits>8){ + ret|=(buffer[ptr+1]<<(8-endbit)); + if(bits>16){ + ret|=(buffer[ptr+2]<<(16-endbit)); + if(bits>24){ + ret|=(buffer[ptr+3]<<(24-endbit)); + if(bits>32 && endbit>0){ + ret|=(buffer[ptr+4]<<(32-endbit)); + } + } + } + } +*/ + ret=((buffer[ptr])&0xff)>>>endbit; + if(bits>8){ + ret|=((buffer[ptr+1])&0xff)<<(8-endbit); +// ret|=((byte)(buffer[ptr+1]))<<(8-endbit); + if(bits>16){ + ret|=((buffer[ptr+2])&0xff)<<(16-endbit); +// ret|=((byte)(buffer[ptr+2]))<<(16-endbit); + if(bits>24){ + ret|=((buffer[ptr+3])&0xff)<<(24-endbit); +// ret|=((byte)(buffer[ptr+3]))<<(24-endbit); + if(bits>32 && endbit!=0){ + ret|=((buffer[ptr+4])&0xff)<<(32-endbit); +// ret|=((byte)(buffer[ptr+4]))<<(32-endbit); + } + } + } + } + + ret&=m; + + ptr+=bits/8; +// ptr=bits/8; + endbyte+=bits/8; +// endbyte=bits/8; + endbit=bits&7; + return(ret); + } + + public int readB(int bits){ + //System.err.println(this+" read: bits="+bits+", storage="+storage+", endbyte="+endbyte+ + // ", ptr="+ptr+", endbit="+endbit+", buf[ptr]="+buffer[ptr]); + int ret; + int m=32-bits; + + bits+=endbit; + + if(endbyte+4>=storage){ + /* not the main path */ + ret=-1; + if(endbyte*8+bits>storage*8) { + ptr+=bits/8; + endbyte+=bits/8; + endbit=bits&7; + return(ret); + } + } + + ret=(buffer[ptr]&0xff)<<(24+endbit); + if(bits>8){ + ret|=(buffer[ptr+1]&0xff)<<(16+endbit); + if(bits>16){ + ret|=(buffer[ptr+2]&0xff)<<(8+endbit); + if(bits>24){ + ret|=(buffer[ptr+3]&0xff)<<(endbit); + if(bits>32 && (endbit != 0)) + ret|=(buffer[ptr+4]&0xff)>>(8-endbit); + } + } + } + ret=(ret>>>(m>>1))>>>((m+1)>>1); + + ptr+=bits/8; + endbyte+=bits/8; + endbit=bits&7; + return(ret); + } + + public int read1(){ + int ret; + if(endbyte>=storage){ + ret=-1; + endbit++; + if(endbit>7){ + endbit=0; + ptr++; + endbyte++; + } + return(ret); + } + + ret=(buffer[ptr]>>endbit)&1; + + endbit++; + if(endbit>7){ + endbit=0; + ptr++; + endbyte++; + } + return(ret); + } + + public int bytes(){ + return(endbyte+(endbit+7)/8); + } + + public int bits(){ + return(endbyte*8+endbit); + } + + public byte[] buffer(){ + return(buffer); + } + + public static int ilog(int v){ + int ret=0; + while(v>0){ + ret++; + v>>>=1; + } + return(ret); + } + + public static void report(String in){ + System.err.println(in); + System.exit(1); + } + + /* + static void cliptest(int[] b, int vals, int bits, int[] comp, int compsize){ + int bytes; + byte[] buffer; + + o.reset(); + for(int i=0;i