annotate src/libvorbis-1.3.3/lib/codebook.h @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents 05aa0afa9217
children
rev   line source
Chris@1 1 /********************************************************************
Chris@1 2 * *
Chris@1 3 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
Chris@1 4 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
Chris@1 5 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
Chris@1 6 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
Chris@1 7 * *
Chris@1 8 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
Chris@1 9 * by the Xiph.Org Foundation http://www.xiph.org/ *
Chris@1 10 * *
Chris@1 11 ********************************************************************
Chris@1 12
Chris@1 13 function: basic shared codebook operations
Chris@1 14 last mod: $Id: codebook.h 17030 2010-03-25 06:52:55Z xiphmont $
Chris@1 15
Chris@1 16 ********************************************************************/
Chris@1 17
Chris@1 18 #ifndef _V_CODEBOOK_H_
Chris@1 19 #define _V_CODEBOOK_H_
Chris@1 20
Chris@1 21 #include <ogg/ogg.h>
Chris@1 22
Chris@1 23 /* This structure encapsulates huffman and VQ style encoding books; it
Chris@1 24 doesn't do anything specific to either.
Chris@1 25
Chris@1 26 valuelist/quantlist are nonNULL (and q_* significant) only if
Chris@1 27 there's entry->value mapping to be done.
Chris@1 28
Chris@1 29 If encode-side mapping must be done (and thus the entry needs to be
Chris@1 30 hunted), the auxiliary encode pointer will point to a decision
Chris@1 31 tree. This is true of both VQ and huffman, but is mostly useful
Chris@1 32 with VQ.
Chris@1 33
Chris@1 34 */
Chris@1 35
Chris@1 36 typedef struct static_codebook{
Chris@1 37 long dim; /* codebook dimensions (elements per vector) */
Chris@1 38 long entries; /* codebook entries */
Chris@1 39 long *lengthlist; /* codeword lengths in bits */
Chris@1 40
Chris@1 41 /* mapping ***************************************************************/
Chris@1 42 int maptype; /* 0=none
Chris@1 43 1=implicitly populated values from map column
Chris@1 44 2=listed arbitrary values */
Chris@1 45
Chris@1 46 /* The below does a linear, single monotonic sequence mapping. */
Chris@1 47 long q_min; /* packed 32 bit float; quant value 0 maps to minval */
Chris@1 48 long q_delta; /* packed 32 bit float; val 1 - val 0 == delta */
Chris@1 49 int q_quant; /* bits: 0 < quant <= 16 */
Chris@1 50 int q_sequencep; /* bitflag */
Chris@1 51
Chris@1 52 long *quantlist; /* map == 1: (int)(entries^(1/dim)) element column map
Chris@1 53 map == 2: list of dim*entries quantized entry vals
Chris@1 54 */
Chris@1 55 int allocedp;
Chris@1 56 } static_codebook;
Chris@1 57
Chris@1 58 typedef struct codebook{
Chris@1 59 long dim; /* codebook dimensions (elements per vector) */
Chris@1 60 long entries; /* codebook entries */
Chris@1 61 long used_entries; /* populated codebook entries */
Chris@1 62 const static_codebook *c;
Chris@1 63
Chris@1 64 /* for encode, the below are entry-ordered, fully populated */
Chris@1 65 /* for decode, the below are ordered by bitreversed codeword and only
Chris@1 66 used entries are populated */
Chris@1 67 float *valuelist; /* list of dim*entries actual entry values */
Chris@1 68 ogg_uint32_t *codelist; /* list of bitstream codewords for each entry */
Chris@1 69
Chris@1 70 int *dec_index; /* only used if sparseness collapsed */
Chris@1 71 char *dec_codelengths;
Chris@1 72 ogg_uint32_t *dec_firsttable;
Chris@1 73 int dec_firsttablen;
Chris@1 74 int dec_maxlength;
Chris@1 75
Chris@1 76 /* The current encoder uses only centered, integer-only lattice books. */
Chris@1 77 int quantvals;
Chris@1 78 int minval;
Chris@1 79 int delta;
Chris@1 80 } codebook;
Chris@1 81
Chris@1 82 extern void vorbis_staticbook_destroy(static_codebook *b);
Chris@1 83 extern int vorbis_book_init_encode(codebook *dest,const static_codebook *source);
Chris@1 84 extern int vorbis_book_init_decode(codebook *dest,const static_codebook *source);
Chris@1 85 extern void vorbis_book_clear(codebook *b);
Chris@1 86
Chris@1 87 extern float *_book_unquantize(const static_codebook *b,int n,int *map);
Chris@1 88 extern float *_book_logdist(const static_codebook *b,float *vals);
Chris@1 89 extern float _float32_unpack(long val);
Chris@1 90 extern long _float32_pack(float val);
Chris@1 91 extern int _best(codebook *book, float *a, int step);
Chris@1 92 extern int _ilog(unsigned int v);
Chris@1 93 extern long _book_maptype1_quantvals(const static_codebook *b);
Chris@1 94
Chris@1 95 extern int vorbis_book_besterror(codebook *book,float *a,int step,int addmul);
Chris@1 96 extern long vorbis_book_codeword(codebook *book,int entry);
Chris@1 97 extern long vorbis_book_codelen(codebook *book,int entry);
Chris@1 98
Chris@1 99
Chris@1 100
Chris@1 101 extern int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *b);
Chris@1 102 extern static_codebook *vorbis_staticbook_unpack(oggpack_buffer *b);
Chris@1 103
Chris@1 104 extern int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b);
Chris@1 105
Chris@1 106 extern long vorbis_book_decode(codebook *book, oggpack_buffer *b);
Chris@1 107 extern long vorbis_book_decodevs_add(codebook *book, float *a,
Chris@1 108 oggpack_buffer *b,int n);
Chris@1 109 extern long vorbis_book_decodev_set(codebook *book, float *a,
Chris@1 110 oggpack_buffer *b,int n);
Chris@1 111 extern long vorbis_book_decodev_add(codebook *book, float *a,
Chris@1 112 oggpack_buffer *b,int n);
Chris@1 113 extern long vorbis_book_decodevv_add(codebook *book, float **a,
Chris@1 114 long off,int ch,
Chris@1 115 oggpack_buffer *b,int n);
Chris@1 116
Chris@1 117
Chris@1 118
Chris@1 119 #endif