~arkadini/fogg/trunk

« back to all changes in this revision

Viewing changes to reference/tremor/ogg.h

  • Committer: Arek Korbik
  • Date: 2008-09-20 17:07:33 UTC
  • Revision ID: arkadini@gmail.com-20080920170733-1p3i052frhbgezrf
Import Tremor's code so we can use it as a reference and possibly modify
it a bit for easier translation to haXe.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/********************************************************************
 
2
 *                                                                  *
 
3
 * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
 
4
 *                                                                  *
 
5
 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
 
6
 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
 
7
 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
 
8
 *                                                                  *
 
9
 * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
 
10
 * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
 
11
 *                                                                  *
 
12
 ********************************************************************
 
13
 
 
14
 function: subsumed libogg includes
 
15
 
 
16
 ********************************************************************/
 
17
#ifndef _OGG_H
 
18
#define _OGG_H
 
19
 
 
20
#ifdef __cplusplus
 
21
extern "C" {
 
22
#endif
 
23
 
 
24
#include "os_types.h"
 
25
 
 
26
typedef struct ogg_buffer_state{
 
27
  struct ogg_buffer    *unused_buffers;
 
28
  struct ogg_reference *unused_references;
 
29
  int                   outstanding;
 
30
  int                   shutdown;
 
31
} ogg_buffer_state;
 
32
 
 
33
typedef struct ogg_buffer {
 
34
  unsigned char      *data;
 
35
  long                size;
 
36
  int                 refcount;
 
37
  
 
38
  union {
 
39
    ogg_buffer_state  *owner;
 
40
    struct ogg_buffer *next;
 
41
  } ptr;
 
42
} ogg_buffer;
 
43
 
 
44
typedef struct ogg_reference {
 
45
  ogg_buffer    *buffer;
 
46
  long           begin;
 
47
  long           length;
 
48
 
 
49
  struct ogg_reference *next;
 
50
} ogg_reference;
 
51
 
 
52
typedef struct oggpack_buffer {
 
53
  int            headbit;
 
54
  unsigned char *headptr;
 
55
  long           headend;
 
56
 
 
57
  /* memory management */
 
58
  ogg_reference *head;
 
59
  ogg_reference *tail;
 
60
 
 
61
  /* render the byte/bit counter API constant time */
 
62
  long              count; /* doesn't count the tail */
 
63
} oggpack_buffer;
 
64
 
 
65
typedef struct oggbyte_buffer {
 
66
  ogg_reference *baseref;
 
67
 
 
68
  ogg_reference *ref;
 
69
  unsigned char *ptr;
 
70
  long           pos;
 
71
  long           end;
 
72
} oggbyte_buffer;
 
73
 
 
74
typedef struct ogg_sync_state {
 
75
  /* decode memory management pool */
 
76
  ogg_buffer_state *bufferpool;
 
77
 
 
78
  /* stream buffers */
 
79
  ogg_reference    *fifo_head;
 
80
  ogg_reference    *fifo_tail;
 
81
  long              fifo_fill;
 
82
 
 
83
  /* stream sync management */
 
84
  int               unsynced;
 
85
  int               headerbytes;
 
86
  int               bodybytes;
 
87
 
 
88
} ogg_sync_state;
 
89
 
 
90
typedef struct ogg_stream_state {
 
91
  ogg_reference *header_head;
 
92
  ogg_reference *header_tail;
 
93
  ogg_reference *body_head;
 
94
  ogg_reference *body_tail;
 
95
 
 
96
  int            e_o_s;    /* set when we have buffered the last
 
97
                              packet in the logical bitstream */
 
98
  int            b_o_s;    /* set after we've written the initial page
 
99
                              of a logical bitstream */
 
100
  long           serialno;
 
101
  long           pageno;
 
102
  ogg_int64_t    packetno; /* sequence number for decode; the framing
 
103
                              knows where there's a hole in the data,
 
104
                              but we need coupling so that the codec
 
105
                              (which is in a seperate abstraction
 
106
                              layer) also knows about the gap */
 
107
  ogg_int64_t    granulepos;
 
108
 
 
109
  int            lacing_fill;
 
110
  ogg_uint32_t   body_fill;
 
111
 
 
112
  /* decode-side state data */
 
113
  int            holeflag;
 
114
  int            spanflag;
 
115
  int            clearflag;
 
116
  int            laceptr;
 
117
  ogg_uint32_t   body_fill_next;
 
118
  
 
119
} ogg_stream_state;
 
120
 
 
121
typedef struct {
 
122
  ogg_reference *packet;
 
123
  long           bytes;
 
124
  long           b_o_s;
 
125
  long           e_o_s;
 
126
  ogg_int64_t    granulepos;
 
127
  ogg_int64_t    packetno;     /* sequence number for decode; the framing
 
128
                                  knows where there's a hole in the data,
 
129
                                  but we need coupling so that the codec
 
130
                                  (which is in a seperate abstraction
 
131
                                  layer) also knows about the gap */
 
132
} ogg_packet;
 
133
 
 
134
typedef struct {
 
135
  ogg_reference *header;
 
136
  int            header_len;
 
137
  ogg_reference *body;
 
138
  long           body_len;
 
139
} ogg_page;
 
140
 
 
141
/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/
 
142
 
 
143
extern void  oggpack_readinit(oggpack_buffer *b,ogg_reference *r);
 
144
extern long  oggpack_look(oggpack_buffer *b,int bits);
 
145
extern void  oggpack_adv(oggpack_buffer *b,int bits);
 
146
extern long  oggpack_read(oggpack_buffer *b,int bits);
 
147
extern long  oggpack_bytes(oggpack_buffer *b);
 
148
extern long  oggpack_bits(oggpack_buffer *b);
 
149
extern int   oggpack_eop(oggpack_buffer *b);
 
150
 
 
151
/* Ogg BITSTREAM PRIMITIVES: decoding **************************/
 
152
 
 
153
extern ogg_sync_state *ogg_sync_create(void);
 
154
extern int      ogg_sync_destroy(ogg_sync_state *oy);
 
155
extern int      ogg_sync_reset(ogg_sync_state *oy);
 
156
 
 
157
extern unsigned char *ogg_sync_bufferin(ogg_sync_state *oy, long size);
 
158
extern int      ogg_sync_wrote(ogg_sync_state *oy, long bytes);
 
159
extern long     ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og);
 
160
extern int      ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
 
161
extern int      ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
 
162
extern int      ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
 
163
extern int      ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op);
 
164
 
 
165
/* Ogg BITSTREAM PRIMITIVES: general ***************************/
 
166
 
 
167
extern ogg_stream_state *ogg_stream_create(int serialno);
 
168
extern int      ogg_stream_destroy(ogg_stream_state *os);
 
169
extern int      ogg_stream_reset(ogg_stream_state *os);
 
170
extern int      ogg_stream_reset_serialno(ogg_stream_state *os,int serialno);
 
171
extern int      ogg_stream_eos(ogg_stream_state *os);
 
172
 
 
173
extern int      ogg_page_checksum_set(ogg_page *og);
 
174
 
 
175
extern int      ogg_page_version(ogg_page *og);
 
176
extern int      ogg_page_continued(ogg_page *og);
 
177
extern int      ogg_page_bos(ogg_page *og);
 
178
extern int      ogg_page_eos(ogg_page *og);
 
179
extern ogg_int64_t  ogg_page_granulepos(ogg_page *og);
 
180
extern ogg_uint32_t ogg_page_serialno(ogg_page *og);
 
181
extern ogg_uint32_t ogg_page_pageno(ogg_page *og);
 
182
extern int      ogg_page_packets(ogg_page *og);
 
183
extern int      ogg_page_getbuffer(ogg_page *og, unsigned char **buffer);
 
184
 
 
185
extern int      ogg_packet_release(ogg_packet *op);
 
186
extern int      ogg_page_release(ogg_page *og);
 
187
 
 
188
extern void     ogg_page_dup(ogg_page *d, ogg_page *s);
 
189
 
 
190
/* Ogg BITSTREAM PRIMITIVES: return codes ***************************/
 
191
 
 
192
#define  OGG_SUCCESS   0
 
193
 
 
194
#define  OGG_HOLE     -10
 
195
#define  OGG_SPAN     -11
 
196
#define  OGG_EVERSION -12
 
197
#define  OGG_ESERIAL  -13
 
198
#define  OGG_EINVAL   -14
 
199
#define  OGG_EEOS     -15
 
200
 
 
201
 
 
202
#ifdef __cplusplus
 
203
}
 
204
#endif
 
205
 
 
206
#endif  /* _OGG_H */