The 'Grand Simplification' officially becomes the mainline toward rc4.
[platform/upstream/libvorbis.git] / lib / codec_internal.h
1 /********************************************************************
2  *                                                                  *
3  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
4  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
5  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
6  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
7  *                                                                  *
8  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
9  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
10  *                                                                  *
11  ********************************************************************
12
13  function: libvorbis codec headers
14  last mod: $Id: codec_internal.h,v 1.15 2002/06/28 22:19:35 xiphmont Exp $
15
16  ********************************************************************/
17
18 #ifndef _V_CODECI_H_
19 #define _V_CODECI_H_
20
21 #include "envelope.h"
22 #include "codebook.h"
23
24 #define BLOCKTYPE_IMPULSE    0
25 #define BLOCKTYPE_PADDING    1
26 #define BLOCKTYPE_TRANSITION 0 
27 #define BLOCKTYPE_LONG       1
28
29 #define PACKETBLOBS 15
30
31 typedef struct vorbis_block_internal{
32   float  **pcmdelay;  /* this is a pointer into local storage */ 
33   float  ampmax;
34   int    blocktype;
35
36   ogg_uint32_t   packetblob_markers[PACKETBLOBS];
37 } vorbis_block_internal;
38
39 typedef void vorbis_look_floor;
40 typedef void vorbis_look_residue;
41 typedef void vorbis_look_transform;
42
43 /* mode ************************************************************/
44 typedef struct {
45   int blockflag;
46   int windowtype;
47   int transformtype;
48   int mapping;
49 } vorbis_info_mode;
50
51 typedef void vorbis_info_floor;
52 typedef void vorbis_info_residue;
53 typedef void vorbis_info_mapping;
54
55 #include "psy.h"
56 #include "bitrate.h"
57
58 typedef struct backend_lookup_state {
59   /* local lookup storage */
60   envelope_lookup        *ve; /* envelope lookup */    
61   float                  *window[2];
62   vorbis_look_transform **transform[2];    /* block, type */
63   drft_lookup             fft_look[2];
64
65   int                     modebits;
66   vorbis_look_floor     **flr;
67   vorbis_look_residue   **residue;
68   vorbis_look_psy        *psy;
69   vorbis_look_psy_global *psy_g_look;
70
71   /* local storage, only used on the encoding side.  This way the
72      application does not need to worry about freeing some packets'
73      memory and not others'; packet storage is always tracked.
74      Cleared next call to a _dsp_ function */
75   unsigned char *header;
76   unsigned char *header1;
77   unsigned char *header2;
78
79   bitrate_manager_state bms;
80
81 } backend_lookup_state;
82
83 /* codec_setup_info contains all the setup information specific to the
84    specific compression/decompression mode in progress (eg,
85    psychoacoustic settings, channel setup, options, codebook
86    etc).  
87 *********************************************************************/
88
89 #include "highlevel.h"
90 typedef struct codec_setup_info {
91
92   /* Vorbis supports only short and long blocks, but allows the
93      encoder to choose the sizes */
94
95   long blocksizes[2];
96
97   /* modes are the primary means of supporting on-the-fly different
98      blocksizes, different channel mappings (LR or M/A),
99      different residue backends, etc.  Each mode consists of a
100      blocksize flag and a mapping (along with the mapping setup */
101
102   int        modes;
103   int        maps;
104   int        floors;
105   int        residues;
106   int        books;
107   int        psys;     /* encode only */
108
109   vorbis_info_mode       *mode_param[64];
110   int                     map_type[64];
111   vorbis_info_mapping    *map_param[64];
112   int                     floor_type[64];
113   vorbis_info_floor      *floor_param[64];
114   int                     residue_type[64];
115   vorbis_info_residue    *residue_param[64];
116   static_codebook        *book_param[256];
117   codebook               *fullbooks;
118
119   vorbis_info_psy        *psy_param[4]; /* encode only */
120   vorbis_info_psy_global psy_g_param;
121
122   bitrate_manager_info   bi;
123   highlevel_encode_setup hi; /* used only by vorbisenc.c.  It's a
124                                 highly redundant structure, but
125                                 improves clarity of program flow. */
126   
127 } codec_setup_info;
128
129 extern vorbis_look_psy_global *_vp_global_look(vorbis_info *vi);
130 extern void _vp_global_free(vorbis_look_psy_global *look);
131
132 #endif
133