summaryrefslogtreecommitdiffstats
path: root/tremor
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2011-02-01 21:15:16 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2011-02-01 21:28:03 +0200
commit6122d83981b85997e1fc1e3962c7aca3c3ab6714 (patch)
tree8628c1312f3b30c9f76649b3b6df00484826a33d /tremor
parent7cd7416c7316ce28cfa663b1f1d578b9c768a6ba (diff)
downloadmpv-6122d83981b85997e1fc1e3962c7aca3c3ab6714.tar.bz2
mpv-6122d83981b85997e1fc1e3962c7aca3c3ab6714.tar.xz
tremor: drop internal tremor library
Drop internal copy of the tremor library. Note that the internal ogg demuxer (which is still sometimes useful to work around libavformat ogg demuxer problems, though it's itself quite buggy) now cannot be compiled without either external libvorbis or libvorbisidec (tremor).
Diffstat (limited to 'tremor')
-rw-r--r--tremor/COPYING28
-rw-r--r--tremor/FILES49
-rw-r--r--tremor/asm_arm.h243
-rw-r--r--tremor/backends.h130
-rw-r--r--tremor/bitwise.c450
-rw-r--r--tremor/block.c413
-rw-r--r--tremor/block.h24
-rw-r--r--tremor/codebook.c350
-rw-r--r--tremor/codebook.h102
-rw-r--r--tremor/codec_internal.h90
-rw-r--r--tremor/floor0.c437
-rw-r--r--tremor/floor1.c439
-rw-r--r--tremor/framing.c900
-rw-r--r--tremor/info.c354
-rw-r--r--tremor/ivorbiscodec.h201
-rw-r--r--tremor/lsp_lookup.h136
-rw-r--r--tremor/mapping0.c323
-rw-r--r--tremor/mdct.c510
-rw-r--r--tremor/mdct.h52
-rw-r--r--tremor/mdct_lookup.h540
-rw-r--r--tremor/misc.h240
-rw-r--r--tremor/ogg.h196
-rw-r--r--tremor/os.h52
-rw-r--r--tremor/os_types.h99
-rw-r--r--tremor/registry.c50
-rw-r--r--tremor/registry.h40
-rw-r--r--tremor/res012.c335
-rw-r--r--tremor/sharedbook.c443
-rw-r--r--tremor/synthesis.c106
-rw-r--r--tremor/tremor.diff187
-rw-r--r--tremor/window.c84
-rw-r--r--tremor/window.h27
-rw-r--r--tremor/window_lookup.h2084
33 files changed, 0 insertions, 9714 deletions
diff --git a/tremor/COPYING b/tremor/COPYING
deleted file mode 100644
index 6111c6c5a6..0000000000
--- a/tremor/COPYING
+++ /dev/null
@@ -1,28 +0,0 @@
-Copyright (c) 2002, Xiph.org Foundation
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-- Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-- Neither the name of the Xiph.org Foundation nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/tremor/FILES b/tremor/FILES
deleted file mode 100644
index 9733e7a5a2..0000000000
--- a/tremor/FILES
+++ /dev/null
@@ -1,49 +0,0 @@
-On the origin of the files:
-==========================
-
-The code is a mixture of Tremor SVN Trunk r3989 (API, parser, part of math
-code) and December 2004 Trunk fetched from xiph.org's Subversion
-(mostly math).
-
-SVN Trunk r3989:
------------
-backends.h
-block.c
-codebook.c
-codebook.h
-codec_internal.h
-config_types.h
-info.c
-ivorbiscodec.h
-lsp_lookup.h
-mapping0.c
-os.h
-registry.c
-registry.h
-res012.c
-sharedbook.c
-synthesis.c
-
-Dec 2004 SVN Trunk:
-------------------
-asm_arm.h
-COPYING
-floor0.c
-floor1.c
-mdct.c
-mdct.h
-mdct_lookup.h
-misc.h
-os_types.h
-window.c
-window.h
-window_lookup.h
-
-libogg 1.1.2:
-------------
-bitwise.c
-framing.c
-ogg.h
-
-Additional MPlayer-specific changes are contained in tremor.diff.
-This file should be updated with each modification of the Tremor code.
diff --git a/tremor/asm_arm.h b/tremor/asm_arm.h
deleted file mode 100644
index f4b1f4f8cf..0000000000
--- a/tremor/asm_arm.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE OggVorbis 'TREMOR' 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 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
- * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: arm7 and later wide math functions
-
- ********************************************************************/
-
-#ifdef _ARM_ASSEM_
-
-#if !defined(_V_WIDE_MATH) && !defined(_LOW_ACCURACY_)
-#define _V_WIDE_MATH
-
-static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) {
- int lo,hi;
- asm volatile("smull\t%0, %1, %2, %3"
- : "=&r"(lo),"=&r"(hi)
- : "%r"(x),"r"(y)
- : "cc");
- return(hi);
-}
-
-static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) {
- return MULT32(x,y)<<1;
-}
-
-static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) {
- int lo,hi;
- asm volatile("smull %0, %1, %2, %3\n\t"
- "movs %0, %0, lsr #15\n\t"
- "adc %1, %0, %1, lsl #17\n\t"
- : "=&r"(lo),"=&r"(hi)
- : "%r"(x),"r"(y)
- : "cc");
- return(hi);
-}
-
-#define MB() asm volatile ("" : : : "memory")
-
-static inline void XPROD32(ogg_int32_t a, ogg_int32_t b,
- ogg_int32_t t, ogg_int32_t v,
- ogg_int32_t *x, ogg_int32_t *y)
-{
- int x1, y1, l;
- asm( "smull %0, %1, %4, %6\n\t"
- "smlal %0, %1, %5, %7\n\t"
- "rsb %3, %4, #0\n\t"
- "smull %0, %2, %5, %6\n\t"
- "smlal %0, %2, %3, %7"
- : "=&r" (l), "=&r" (x1), "=&r" (y1), "=r" (a)
- : "3" (a), "r" (b), "r" (t), "r" (v)
- : "cc" );
- *x = x1;
- MB();
- *y = y1;
-}
-
-static inline void XPROD31(ogg_int32_t a, ogg_int32_t b,
- ogg_int32_t t, ogg_int32_t v,
- ogg_int32_t *x, ogg_int32_t *y)
-{
- int x1, y1, l;
- asm( "smull %0, %1, %4, %6\n\t"
- "smlal %0, %1, %5, %7\n\t"
- "rsb %3, %4, #0\n\t"
- "smull %0, %2, %5, %6\n\t"
- "smlal %0, %2, %3, %7"
- : "=&r" (l), "=&r" (x1), "=&r" (y1), "=r" (a)
- : "3" (a), "r" (b), "r" (t), "r" (v)
- : "cc" );
- *x = x1 << 1;
- MB();
- *y = y1 << 1;
-}
-
-static inline void XNPROD31(ogg_int32_t a, ogg_int32_t b,
- ogg_int32_t t, ogg_int32_t v,
- ogg_int32_t *x, ogg_int32_t *y)
-{
- int x1, y1, l;
- asm( "rsb %2, %4, #0\n\t"
- "smull %0, %1, %3, %5\n\t"
- "smlal %0, %1, %2, %6\n\t"
- "smull %0, %2, %4, %5\n\t"
- "smlal %0, %2, %3, %6"
- : "=&r" (l), "=&r" (x1), "=&r" (y1)
- : "r" (a), "r" (b), "r" (t), "r" (v)
- : "cc" );
- *x = x1 << 1;
- MB();
- *y = y1 << 1;
-}
-
-#endif
-
-#ifndef _V_CLIP_MATH
-#define _V_CLIP_MATH
-
-static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) {
- int tmp;
- asm volatile("subs %1, %0, #32768\n\t"
- "movpl %0, #0x7f00\n\t"
- "orrpl %0, %0, #0xff\n"
- "adds %1, %0, #32768\n\t"
- "movmi %0, #0x8000"
- : "+r"(x),"=r"(tmp)
- :
- : "cc");
- return(x);
-}
-
-#endif
-
-#ifndef _V_LSP_MATH_ASM
-#define _V_LSP_MATH_ASM
-
-static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip,
- ogg_int32_t *qexpp,
- ogg_int32_t *ilsp,ogg_int32_t wi,
- ogg_int32_t m){
-
- ogg_uint32_t qi=*qip,pi=*pip;
- ogg_int32_t qexp=*qexpp;
-
- asm("mov r0,%3;"
- "mov r1,%5,asr#1;"
- "add r0,r0,r1,lsl#3;"
- "1:"
-
- "ldmdb r0!,{r1,r3};"
- "subs r1,r1,%4;" //ilsp[j]-wi
- "rsbmi r1,r1,#0;" //labs(ilsp[j]-wi)
- "umull %0,r2,r1,%0;" //qi*=labs(ilsp[j]-wi)
-
- "subs r1,r3,%4;" //ilsp[j+1]-wi
- "rsbmi r1,r1,#0;" //labs(ilsp[j+1]-wi)
- "umull %1,r3,r1,%1;" //pi*=labs(ilsp[j+1]-wi)
-
- "cmn r2,r3;" // shift down 16?
- "beq 0f;"
- "add %2,%2,#16;"
- "mov %0,%0,lsr #16;"
- "orr %0,%0,r2,lsl #16;"
- "mov %1,%1,lsr #16;"
- "orr %1,%1,r3,lsl #16;"
- "0:"
- "cmp r0,%3;\n"
- "bhi 1b;\n"
-
- // odd filter assymetry
- "ands r0,%5,#1;\n"
- "beq 2f;\n"
- "add r0,%3,%5,lsl#2;\n"
-
- "ldr r1,[r0,#-4];\n"
- "mov r0,#0x4000;\n"
-
- "subs r1,r1,%4;\n" //ilsp[j]-wi
- "rsbmi r1,r1,#0;\n" //labs(ilsp[j]-wi)
- "umull %0,r2,r1,%0;\n" //qi*=labs(ilsp[j]-wi)
- "umull %1,r3,r0,%1;\n" //pi*=labs(ilsp[j+1]-wi)
-
- "cmn r2,r3;\n" // shift down 16?
- "beq 2f;\n"
- "add %2,%2,#16;\n"
- "mov %0,%0,lsr #16;\n"
- "orr %0,%0,r2,lsl #16;\n"
- "mov %1,%1,lsr #16;\n"
- "orr %1,%1,r3,lsl #16;\n"
-
- //qi=(pi>>shift)*labs(ilsp[j]-wi);
- //pi=(qi>>shift)*labs(ilsp[j+1]-wi);
- //qexp+=shift;
-
- //}
-
- /* normalize to max 16 sig figs */
- "2:"
- "mov r2,#0;"
- "orr r1,%0,%1;"
- "tst r1,#0xff000000;"
- "addne r2,r2,#8;"
- "movne r1,r1,lsr #8;"
- "tst r1,#0x00f00000;"
- "addne r2,r2,#4;"
- "movne r1,r1,lsr #4;"
- "tst r1,#0x000c0000;"
- "addne r2,r2,#2;"
- "movne r1,r1,lsr #2;"
- "tst r1,#0x00020000;"
- "addne r2,r2,#1;"
- "movne r1,r1,lsr #1;"
- "tst r1,#0x00010000;"
- "addne r2,r2,#1;"
- "mov %0,%0,lsr r2;"
- "mov %1,%1,lsr r2;"
- "add %2,%2,r2;"
-
- : "+r"(qi),"+r"(pi),"+r"(qexp)
- : "r"(ilsp),"r"(wi),"r"(m)
- : "r0","r1","r2","r3","cc");
-
- *qip=qi;
- *pip=pi;
- *qexpp=qexp;
-}
-
-static inline void lsp_norm_asm(ogg_uint32_t *qip,ogg_int32_t *qexpp){
-
- ogg_uint32_t qi=*qip;
- ogg_int32_t qexp=*qexpp;
-
- asm("tst %0,#0x0000ff00;"
- "moveq %0,%0,lsl #8;"
- "subeq %1,%1,#8;"
- "tst %0,#0x0000f000;"
- "moveq %0,%0,lsl #4;"
- "subeq %1,%1,#4;"
- "tst %0,#0x0000c000;"
- "moveq %0,%0,lsl #2;"
- "subeq %1,%1,#2;"
- "tst %0,#0x00008000;"
- "moveq %0,%0,lsl #1;"
- "subeq %1,%1,#1;"
- : "+r"(qi),"+r"(qexp)
- :
- : "cc");
- *qip=qi;
- *qexpp=qexp;
-}
-
-#endif
-#endif
-
diff --git a/tremor/backends.h b/tremor/backends.h
deleted file mode 100644
index 269d9b812e..0000000000
--- a/tremor/backends.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE OggVorbis 'TREMOR' 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 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
- * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: backend and mapping structures
-
- ********************************************************************/
-
-/* this is exposed up here because we need it for static modes.
- Lookups for each backend aren't exposed because there's no reason
- to do so */
-
-#ifndef _vorbis_backend_h_
-#define _vorbis_backend_h_
-
-#include "codec_internal.h"
-
-/* this would all be simpler/shorter with templates, but.... */
-/* Transform backend generic *************************************/
-
-/* only mdct right now. Flesh it out more if we ever transcend mdct
- in the transform domain */
-
-/* Floor backend generic *****************************************/
-typedef struct{
- vorbis_info_floor *(*unpack)(vorbis_info *,oggpack_buffer *);
- vorbis_look_floor *(*look) (vorbis_dsp_state *,vorbis_info_mode *,
- vorbis_info_floor *);
- void (*free_info) (vorbis_info_floor *);
- void (*free_look) (vorbis_look_floor *);
- void *(*inverse1) (struct vorbis_block *,vorbis_look_floor *);
- int (*inverse2) (struct vorbis_block *,vorbis_look_floor *,
- void *buffer,ogg_int32_t *);
-} vorbis_func_floor;
-
-typedef struct{
- int order;
- long rate;
- long barkmap;
-
- int ampbits;
- int ampdB;
-
- int numbooks; /* <= 16 */
- int books[16];
-
-} vorbis_info_floor0;
-
-#define VIF_POSIT 63
-#define VIF_CLASS 16
-#define VIF_PARTS 31
-typedef struct{
- int partitions; /* 0 to 31 */
- int partitionclass[VIF_PARTS]; /* 0 to 15 */
-
- int class_dim[VIF_CLASS]; /* 1 to 8 */
- int class_subs[VIF_CLASS]; /* 0,1,2,3 (bits: 1<<n poss) */
- int class_book[VIF_CLASS]; /* subs ^ dim entries */
- int class_subbook[VIF_CLASS][8]; /* [VIF_CLASS][subs] */
-
-
- int mult; /* 1 2 3 or 4 */
- int postlist[VIF_POSIT+2]; /* first two implicit */
-
-} vorbis_info_floor1;
-
-/* Residue backend generic *****************************************/
-typedef struct{
- vorbis_info_residue *(*unpack)(vorbis_info *,oggpack_buffer *);
- vorbis_look_residue *(*look) (vorbis_dsp_state *,vorbis_info_mode *,
- vorbis_info_residue *);
- void (*free_info) (vorbis_info_residue *);
- void (*free_look) (vorbis_look_residue *);
- int (*inverse) (struct vorbis_block *,vorbis_look_residue *,
- ogg_int32_t **,int *,int);
-} vorbis_func_residue;
-
-typedef struct vorbis_info_residue0{
-/* block-partitioned VQ coded straight residue */
- long begin;
- long end;
-
- /* first stage (lossless partitioning) */
- int grouping; /* group n vectors per partition */
- int partitions; /* possible codebooks for a partition */
- int groupbook; /* huffbook for partitioning */
- int secondstages[64]; /* expanded out to pointers in lookup */
- int booklist[256]; /* list of second stage books */
-} vorbis_info_residue0;
-
-/* Mapping backend generic *****************************************/
-typedef struct{
- vorbis_info_mapping *(*unpack)(vorbis_info *,oggpack_buffer *);
- vorbis_look_mapping *(*look) (vorbis_dsp_state *,vorbis_info_mode *,
- vorbis_info_mapping *);
- void (*free_info) (vorbis_info_mapping *);
- void (*free_look) (vorbis_look_mapping *);
- int (*inverse) (struct vorbis_block *vb,vorbis_look_mapping *);
-} vorbis_func_mapping;
-
-typedef struct vorbis_info_mapping0{
- int submaps; /* <= 16 */
- int chmuxlist[256]; /* up to 256 channels in a Vorbis stream */
-
- int floorsubmap[16]; /* [mux] submap to floors */
- int residuesubmap[16]; /* [mux] submap to residue */
-
- int psy[2]; /* by blocktype; impulse/padding for short,
- transition/normal for long */
-
- int coupling_steps;
- int coupling_mag[256];
- int coupling_ang[256];
-} vorbis_info_mapping0;
-
-#endif
-
-
-
-
-
diff --git a/tremor/bitwise.c b/tremor/bitwise.c
deleted file mode 100644
index 6bd082b6dc..0000000000
--- a/tremor/bitwise.c
+++ /dev/null
@@ -1,450 +0,0 @@
-/********************************************************************
- * *
- * 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 Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: packing variable sized words into an octet stream
- last mod: $Id$
-
- ********************************************************************/
-
-/* We're 'LSb' endian; if we write a word but read individual bits,
- then we'll read the lsb first */
-
-#include <string.h>
-#include <stdlib.h>
-#include "ogg.h"
-
-#define BUFFER_INCREMENT 256
-
-static const unsigned long 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 };
-
-static const unsigned int mask8B[]=
-{0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
-
-void oggpack_writeinit(oggpack_buffer *b){
- memset(b,0,sizeof(*b));
- b->ptr=b->buffer=_ogg_malloc(BUFFER_INCREMENT);
- b->buffer[0]='\0';
- b->storage=BUFFER_INCREMENT;
-}
-
-void oggpackB_writeinit(oggpack_buffer *b){
- oggpack_writeinit(b);
-}
-
-void oggpack_writetrunc(oggpack_buffer *b,long bits){
- long bytes=bits>>3;
- bits-=bytes*8;
- b->ptr=b->buffer+bytes;
- b->endbit=bits;
- b->endbyte=bytes;
- *b->ptr&=mask[bits];
-}
-
-void oggpackB_writetrunc(oggpack_buffer *b,long bits){
- long bytes=bits>>3;
- bits-=bytes*8;
- b->ptr=b->buffer+bytes;
- b->endbit=bits;
- b->endbyte=bytes;
- *b->ptr&=mask8B[bits];
-}
-
-/* Takes only up to 32 bits. */
-void oggpack_write(oggpack_buffer *b,unsigned long value,int bits){
- if(b->endbyte+4>=b->storage){
- b->buffer=_ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT);
- b->storage+=BUFFER_INCREMENT;
- b->ptr=b->buffer+b->endbyte;
- }
-
- value&=mask[bits];
- bits+=b->endbit;
-
- b->ptr[0]|=value<<b->endbit;
-
- if(bits>=8){
- b->ptr[1]=(unsigned char)(value>>(8-b->endbit));
- if(bits>=16){
- b->ptr[2]=(unsigned char)(value>>(16-b->endbit));
- if(bits>=24){
- b->ptr[3]=(unsigned char)(value>>(24-b->endbit));
- if(bits>=32){
- if(b->endbit)
- b->ptr[4]=(unsigned char)(value>>(32-b->endbit));
- else
- b->ptr[4]=0;
- }
- }
- }
- }
-
- b->endbyte+=bits/8;
- b->ptr+=bits/8;
- b->endbit=bits&7;
-}
-
-/* Takes only up to 32 bits. */
-void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits){
- if(b->endbyte+4>=b->storage){
- b->buffer=_ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT);
- b->storage+=BUFFER_INCREMENT;
- b->ptr=b->buffer+b->endbyte;
- }
-
- value=(value&mask[bits])<<(32-bits);
- bits+=b->endbit;
-
- b->ptr[0]|=value>>(24+b->endbit);
-
- if(bits>=8){
- b->ptr[1]=(unsigned char)(value>>(16+b->endbit));
- if(bits>=16){
- b->ptr[2]=(unsigned char)(value>>(8+b->endbit));
- if(bits>=24){
- b->ptr[3]=(unsigned char)(value>>(b->endbit));
- if(bits>=32){
- if(b->endbit)
- b->ptr[4]=(unsigned char)(value<<(8-b->endbit));
- else
- b->ptr[4]=0;
- }
- }
- }
- }
-
- b->endbyte+=bits/8;
- b->ptr+=bits/8;
- b->endbit=bits&7;
-}
-
-void oggpack_writealign(oggpack_buffer *b){
- int bits=8-b->endbit;
- if(bits<8)
- oggpack_write(b,0,bits);
-}
-
-void oggpackB_writealign(oggpack_buffer *b){
- int bits=8-b->endbit;
- if(bits<8)
- oggpackB_write(b,0,bits);
-}
-
-static void oggpack_writecopy_helper(oggpack_buffer *b,
- void *source,
- long bits,
- void (*w)(oggpack_buffer *,
- unsigned long,
- int),
- int msb){
- unsigned char *ptr=(unsigned char *)source;
-
- long bytes=bits/8;
- bits-=bytes*8;
-
- if(b->endbit){
- int i;
- /* unaligned copy. Do it the hard way. */
- for(i=0;i<bytes;i++)
- w(b,(unsigned long)(ptr[i]),8);
- }else{
- /* aligned block copy */
- if(b->endbyte+bytes+1>=b->storage){
- b->storage=b->endbyte+bytes+BUFFER_INCREMENT;
- b->buffer=_ogg_realloc(b->buffer,b->storage);
- b->ptr=b->buffer+b->endbyte;
- }
-
- memmove(b->ptr,source,bytes);
- b->ptr+=bytes;
- b->endbyte+=bytes;
- *b->ptr=0;
-
- }
- if(bits){
- if(msb)
- w(b,(unsigned long)(ptr[bytes]>>(8-bits)),bits);
- else
- w(b,(unsigned long)(ptr[bytes]),bits);
- }
-}
-
-void oggpack_writecopy(oggpack_buffer *b,void *source,long bits){
- oggpack_writecopy_helper(b,source,bits,oggpack_write,0);
-}
-
-void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits){
- oggpack_writecopy_helper(b,source,bits,oggpackB_write,1);
-}
-
-void oggpack_reset(oggpack_buffer *b){
- b->ptr=b->buffer;
- b->buffer[0]=0;
- b->endbit=b->endbyte=0;
-}
-
-void oggpackB_reset(oggpack_buffer *b){
- oggpack_reset(b);
-}
-
-void oggpack_writeclear(oggpack_buffer *b){
- _ogg_free(b->buffer);
- memset(b,0,sizeof(*b));
-}
-
-void oggpackB_writeclear(oggpack_buffer *b){
- oggpack_writeclear(b);
-}
-
-void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){
- memset(b,0,sizeof(*b));
- b->buffer=b->ptr=buf;
- b->storage=bytes;
-}
-
-void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){
- oggpack_readinit(b,buf,bytes);
-}
-
-/* Read in bits without advancing the bitptr; bits <= 32 */
-long oggpack_look(oggpack_buffer *b,int bits){
- unsigned long ret;
- unsigned long m=mask[bits];
-
- bits+=b->endbit;
-
- if(b->endbyte+4>=b->storage){
- /* not the main path */
- if(b->endbyte*8+bits>b->storage*8)return(-1);
- }
-
- ret=b->ptr[0]>>b->endbit;
- if(bits>8){
- ret|=b->ptr[1]<<(8-b->endbit);
- if(bits>16){
- ret|=b->ptr[2]<<(16-b->endbit);
- if(bits>24){
- ret|=b->ptr[3]<<(24-b->endbit);
- if(bits>32 && b->endbit)
- ret|=b->ptr[4]<<(32-b->endbit);
- }
- }
- }
- return(m&ret);
-}
-
-/* Read in bits without advancing the bitptr; bits <= 32 */
-long oggpackB_look(oggpack_buffer *b,int bits){
- unsigned long ret;
- int m=32-bits;
-
- bits+=b->endbit;
-
- if(b->endbyte+4>=b->storage){
- /* not the main path */
- if(b->endbyte*8+bits>b->storage*8)return(-1);
- }
-
- ret=b->ptr[0]<<(24+b->endbit);
- if(bits>8){
- ret|=b->ptr[1]<<(16+b->endbit);
- if(bits>16){
- ret|=b->ptr[2]<<(8+b->endbit);
- if(bits>24){
- ret|=b->ptr[3]<<(b->endbit);
- if(bits>32 && b->endbit)
- ret|=b->ptr[4]>>(8-b->endbit);
- }
- }
- }
- return ((ret&0xffffffff)>>(m>>1))>>((m+1)>>1);
-}
-
-long oggpack_look1(oggpack_buffer *b){
- if(b->endbyte>=b->storage)return(-1);
- return((b->ptr[0]>>b->endbit)&1);
-}
-
-long oggpackB_look1(oggpack_buffer *b){
- if(b->endbyte>=b->storage)return(-1);
- return((b->ptr[0]>>(7-b->endbit))&1);
-}
-
-void oggpack_adv(oggpack_buffer *b,int bits){
- bits+=b->endbit;
- b->ptr+=bits/8;
- b->endbyte+=bits/8;
- b->endbit=bits&7;
-}
-
-void oggpackB_adv(oggpack_buffer *b,int bits){
- oggpack_adv(b,bits);
-}
-
-void oggpack_adv1(oggpack_buffer *b){
- if(++(b->endbit)>7){
- b->endbit=0;
- b->ptr++;
- b->endbyte++;
- }
-}
-
-void oggpackB_adv1(oggpack_buffer *b){
- oggpack_adv1(b);
-}
-
-/* bits <= 32 */
-long oggpack_read(oggpack_buffer *b,int bits){
- long ret;
- unsigned long m=mask[bits];
-
- bits+=b->endbit;
-
- if(b->endbyte+4>=b->storage){
- /* not the main path */
- ret=-1L;
- if(b->endbyte*8+bits>b->storage*8)goto overflow;
- }
-
- ret=b->ptr[0]>>b->endbit;
- if(bits>8){
- ret|=b->ptr[1]<<(8-b->endbit);
- if(bits>16){
- ret|=b->ptr[2]<<(16-b->endbit);
- if(bits>24){
- ret|=b->ptr[3]<<(24-b->endbit);
- if(bits>32 && b->endbit){
- ret|=b->ptr[4]<<(32-b->endbit);
- }
- }
- }
- }
- ret&=m;
-
- overflow:
-
- b->ptr+=bits/8;
- b->endbyte+=bits/8;
- b->endbit=bits&7;
- return(ret);
-}
-
-/* bits <= 32 */
-long oggpackB_read(oggpack_buffer *b,int bits){
- long ret;
- long m=32-bits;
-
- bits+=b->endbit;
-
- if(b->endbyte+4>=b->storage){
- /* not the main path */
- ret=-1L;
- if(b->endbyte*8+bits>b->storage*8)goto overflow;
- }
-
- ret=b->ptr[0]<<(24+b->endbit);
- if(bits>8){
- ret|=b->ptr[1]<<(16+b->endbit);
- if(bits>16){
- ret|=b->ptr[2]<<(8+b->endbit);
- if(bits>24){
- ret|=b->ptr[3]<<(b->endbit);
- if(bits>32 && b->endbit)
- ret|=b->ptr[4]>>(8-b->endbit);
- }
- }
- }
- ret=((ret&0xffffffffUL)>>(m>>1))>>((m+1)>>1);
-
- overflow:
-
- b->ptr+=bits/8;
- b->endbyte+=bits/8;
- b->endbit=bits&7;
- return(ret);
-}
-
-long oggpack_read1(oggpa