A single page audio stream that was also a short page would decode too far.
[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.16 2002/10/11 11:14:41 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 private_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   ogg_int64_t sample_count;
82
83 } private_state;
84
85 /* codec_setup_info contains all the setup information specific to the
86    specific compression/decompression mode in progress (eg,
87    psychoacoustic settings, channel setup, options, codebook
88    etc).  
89 *********************************************************************/
90
91 #include "highlevel.h"
92 typedef struct codec_setup_info {
93
94   /* Vorbis supports only short and long blocks, but allows the
95      encoder to choose the sizes */
96
97   long blocksizes[2];
98
99   /* modes are the primary means of supporting on-the-fly different
100      blocksizes, different channel mappings (LR or M/A),
101      different residue backends, etc.  Each mode consists of a
102      blocksize flag and a mapping (along with the mapping setup */
103
104   int        modes;
105   int        maps;
106   int        floors;
107   int        residues;
108   int        books;
109   int        psys;     /* encode only */
110
111   vorbis_info_mode       *mode_param[64];
112   int                     map_type[64];
113   vorbis_info_mapping    *map_param[64];
114   int                     floor_type[64];
115   vorbis_info_floor      *floor_param[64];
116   int                     residue_type[64];
117   vorbis_info_residue    *residue_param[64];
118   static_codebook        *book_param[256];
119   codebook               *fullbooks;
120
121   vorbis_info_psy        *psy_param[4]; /* encode only */
122   vorbis_info_psy_global psy_g_param;
123
124   bitrate_manager_info   bi;
125   highlevel_encode_setup hi; /* used only by vorbisenc.c.  It's a
126                                 highly redundant structure, but
127                                 improves clarity of program flow. */
128   
129 } codec_setup_info;
130
131 extern vorbis_look_psy_global *_vp_global_look(vorbis_info *vi);
132 extern void _vp_global_free(vorbis_look_psy_global *look);
133
134 #endif
135