Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
9564 turbocat 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-2009             *
9
 * by the Xiph.Org Foundation https://xiph.org/                     *
10
 *                                                                  *
11
 ********************************************************************
12
 
13
 function: libvorbis codec headers
14
 
15
 ********************************************************************/
16
 
17
#ifndef _V_CODECI_H_
18
#define _V_CODECI_H_
19
 
20
#include "envelope.h"
21
#include "codebook.h"
22
 
23
#define BLOCKTYPE_IMPULSE    0
24
#define BLOCKTYPE_PADDING    1
25
#define BLOCKTYPE_TRANSITION 0
26
#define BLOCKTYPE_LONG       1
27
 
28
#define PACKETBLOBS 15
29
 
30
typedef struct vorbis_block_internal{
31
  float  **pcmdelay;  /* this is a pointer into local storage */
32
  float  ampmax;
33
  int    blocktype;
34
 
35
  oggpack_buffer *packetblob[PACKETBLOBS]; /* initialized, must be freed;
36
                                              blob [PACKETBLOBS/2] points to
37
                                              the oggpack_buffer in the
38
                                              main vorbis_block */
39
} vorbis_block_internal;
40
 
41
typedef void vorbis_look_floor;
42
typedef void vorbis_look_residue;
43
typedef void vorbis_look_transform;
44
 
45
/* mode ************************************************************/
46
typedef struct {
47
  int blockflag;
48
  int windowtype;
49
  int transformtype;
50
  int mapping;
51
} vorbis_info_mode;
52
 
53
typedef void vorbis_info_floor;
54
typedef void vorbis_info_residue;
55
typedef void vorbis_info_mapping;
56
 
57
#include "psy.h"
58
#include "bitrate.h"
59
 
60
typedef struct private_state {
61
  /* local lookup storage */
62
  envelope_lookup        *ve; /* envelope lookup */
63
  int                     window[2];
64
  vorbis_look_transform **transform[2];    /* block, type */
65
  drft_lookup             fft_look[2];
66
 
67
  int                     modebits;
68
  vorbis_look_floor     **flr;
69
  vorbis_look_residue   **residue;
70
  vorbis_look_psy        *psy;
71
  vorbis_look_psy_global *psy_g_look;
72
 
73
  /* local storage, only used on the encoding side.  This way the
74
     application does not need to worry about freeing some packets'
75
     memory and not others'; packet storage is always tracked.
76
     Cleared next call to a _dsp_ function */
77
  unsigned char *header;
78
  unsigned char *header1;
79
  unsigned char *header2;
80
 
81
  bitrate_manager_state bms;
82
 
83
  ogg_int64_t sample_count;
84
} private_state;
85
 
86
/* codec_setup_info contains all the setup information specific to the
87
   specific compression/decompression mode in progress (eg,
88
   psychoacoustic settings, channel setup, options, codebook
89
   etc).
90
*********************************************************************/
91
 
92
#include "highlevel.h"
93
typedef struct codec_setup_info {
94
 
95
  /* Vorbis supports only short and long blocks, but allows the
96
     encoder to choose the sizes */
97
 
98
  long blocksizes[2];
99
 
100
  /* modes are the primary means of supporting on-the-fly different
101
     blocksizes, different channel mappings (LR or M/A),
102
     different residue backends, etc.  Each mode consists of a
103
     blocksize flag and a mapping (along with the mapping setup */
104
 
105
  int        modes;
106
  int        maps;
107
  int        floors;
108
  int        residues;
109
  int        books;
110
  int        psys;     /* encode only */
111
 
112
  vorbis_info_mode       *mode_param[64];
113
  int                     map_type[64];
114
  vorbis_info_mapping    *map_param[64];
115
  int                     floor_type[64];
116
  vorbis_info_floor      *floor_param[64];
117
  int                     residue_type[64];
118
  vorbis_info_residue    *residue_param[64];
119
  static_codebook        *book_param[256];
120
  codebook               *fullbooks;
121
 
122
  vorbis_info_psy        *psy_param[4]; /* encode only */
123
  vorbis_info_psy_global psy_g_param;
124
 
125
  bitrate_manager_info   bi;
126
  highlevel_encode_setup hi; /* used only by vorbisenc.c.  It's a
127
                                highly redundant structure, but
128
                                improves clarity of program flow. */
129
  int         halfrate_flag; /* painless downsample for decode */
130
} codec_setup_info;
131
 
132
extern vorbis_look_psy_global *_vp_global_look(vorbis_info *vi);
133
extern void _vp_global_free(vorbis_look_psy_global *look);
134
 
135
 
136
 
137
typedef struct {
138
  int sorted_index[VIF_POSIT+2];
139
  int forward_index[VIF_POSIT+2];
140
  int reverse_index[VIF_POSIT+2];
141
 
142
  int hineighbor[VIF_POSIT];
143
  int loneighbor[VIF_POSIT];
144
  int posts;
145
 
146
  int n;
147
  int quant_q;
148
  vorbis_info_floor1 *vi;
149
 
150
  long phrasebits;
151
  long postbits;
152
  long frames;
153
} vorbis_look_floor1;
154
 
155
 
156
 
157
extern int *floor1_fit(vorbis_block *vb,vorbis_look_floor1 *look,
158
                          const float *logmdct,   /* in */
159
                          const float *logmask);
160
extern int *floor1_interpolate_fit(vorbis_block *vb,vorbis_look_floor1 *look,
161
                          int *A,int *B,
162
                          int del);
163
extern int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
164
                  vorbis_look_floor1 *look,
165
                  int *post,int *ilogmask);
166
#endif