1 /*
2    Copyright (C) 2003 Commonwealth Scientific and Industrial Research
3    Organisation (CSIRO) Australia
4 
5    Redistribution and use in source and binary forms, with or without
6    modification, are permitted provided that the following conditions
7    are met:
8 
9    - Redistributions of source code must retain the above copyright
10    notice, this list of conditions and the following disclaimer.
11 
12    - Redistributions in binary form must reproduce the above copyright
13    notice, this list of conditions and the following disclaimer in the
14    documentation and/or other materials provided with the distribution.
15 
16    - Neither the name of CSIRO Australia nor the names of its
17    contributors may be used to endorse or promote products derived from
18    this software without specific prior written permission.
19 
20    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23    PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE ORGANISATION OR
24    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32 
33 #ifndef __OGGZ_CONSTANTS_H__
34 #define __OGGZ_CONSTANTS_H__
35 
36 /** \file
37  * General constants used by liboggz.
38  */
39 
40 /**
41  * Flags to oggz_new(), oggz_open(), and oggz_openfd().
42  * Can be or'ed together in the following combinations:
43  * - OGGZ_READ | OGGZ_AUTO
44  * - OGGZ_WRITE | OGGZ_NONSTRICT | OGGZ_PREFIX | OGGZ_SUFFIX
45  */
46 enum OggzFlags {
47   /** Read only */
48   OGGZ_READ         = 0x00,
49 
50   /** Write only */
51   OGGZ_WRITE        = 0x01,
52 
53   /** Disable strict adherence to mapping constraints, eg for
54    * handling an incomplete stream */
55   OGGZ_NONSTRICT    = 0x10,
56 
57   /**
58    * Scan for known headers while reading, and automatically set
59    * metrics appropriately. Opening a file for reading with
60    * \a flags = OGGZ_READ | OGGZ_AUTO will allow seeking on Speex,
61    * Vorbis, FLAC, Theora, CMML and all Annodex streams in units of
62    * milliseconds, once all bos pages have been delivered. */
63   OGGZ_AUTO         = 0x20,
64 
65   /**
66    * Write Prefix: Assume that we are only writing the prefix of an
67    * Ogg stream, ie. disable checking for conformance with end-of-stream
68    * constraints.
69    */
70   OGGZ_PREFIX       = 0x40,
71 
72   /**
73    * Write Suffix: Assume that we are only writing the suffix of an
74    * Ogg stream, ie. disable checking for conformance with
75    * beginning-of-stream constraints.
76    */
77   OGGZ_SUFFIX       = 0x80
78 
79 };
80 
81 enum OggzStopCtl {
82   /** Continue calling read callbacks */
83   OGGZ_CONTINUE     = 0,
84 
85   /** Stop calling callbacks, but retain buffered packet data */
86   OGGZ_STOP_OK      = 1,
87 
88   /** Stop calling callbacks, and purge buffered packet data */
89   OGGZ_STOP_ERR     = -1
90 };
91 
92 /**
93  * Flush options for oggz_write_feed; can be or'ed together
94  */
95 enum OggzFlushOpts {
96   /** Flush all streams before beginning this packet */
97   OGGZ_FLUSH_BEFORE = 0x01,
98 
99   /** Flush after this packet */
100   OGGZ_FLUSH_AFTER  = 0x02
101 };
102 
103 /**
104  * Definition of stream content types
105  */
106 typedef enum OggzStreamContent {
107   OGGZ_CONTENT_THEORA = 0,
108   OGGZ_CONTENT_VORBIS,
109   OGGZ_CONTENT_SPEEX,
110   OGGZ_CONTENT_PCM,
111   OGGZ_CONTENT_CMML,
112   OGGZ_CONTENT_ANX2,
113   OGGZ_CONTENT_SKELETON,
114   OGGZ_CONTENT_FLAC0,
115   OGGZ_CONTENT_FLAC,
116   OGGZ_CONTENT_ANXDATA,
117   OGGZ_CONTENT_CELT,
118   OGGZ_CONTENT_KATE,
119   OGGZ_CONTENT_DIRAC,
120   OGGZ_CONTENT_UNKNOWN
121 } OggzStreamContent;
122 
123 /**
124  * Definitions of error return values
125  */
126 enum OggzError {
127   /** No error */
128   OGGZ_ERR_OK                           = 0,
129 
130   /** generic error */
131   OGGZ_ERR_GENERIC                      = -1,
132 
133   /** oggz is not a valid OGGZ */
134   OGGZ_ERR_BAD_OGGZ                     = -2,
135 
136   /** The requested operation is not suitable for this OGGZ */
137   OGGZ_ERR_INVALID                      = -3,
138 
139   /** oggz contains no logical bitstreams */
140   OGGZ_ERR_NO_STREAMS                   = -4,
141 
142   /** Operation is inappropriate for oggz in current bos state */
143   OGGZ_ERR_BOS                          = -5,
144 
145   /** Operation is inappropriate for oggz in current eos state */
146   OGGZ_ERR_EOS                          = -6,
147 
148   /** Operation requires a valid metric, but none has been set */
149   OGGZ_ERR_BAD_METRIC                   = -7,
150 
151   /** System specific error; check errno for details */
152   OGGZ_ERR_SYSTEM                       = -10,
153 
154   /** Functionality disabled at build time */
155   OGGZ_ERR_DISABLED                     = -11,
156 
157   /** Seeking operation is not possible for this OGGZ */
158   OGGZ_ERR_NOSEEK                       = -13,
159 
160   /** Reading was stopped by an OggzReadCallback returning OGGZ_STOP_OK
161    * or writing was stopped by an  OggzWriteHungry callback returning
162    * OGGZ_STOP_OK */
163   OGGZ_ERR_STOP_OK                      = -14,
164 
165   /** Reading was stopped by an OggzReadCallback returning OGGZ_STOP_ERR
166    * or writing was stopped by an OggzWriteHungry callback returning
167    * OGGZ_STOP_ERR */
168   OGGZ_ERR_STOP_ERR                     = -15,
169 
170   /** no data available from IO, try again */
171   OGGZ_ERR_IO_AGAIN                     = -16,
172 
173   /** Hole (sequence number gap) detected in input data */
174   OGGZ_ERR_HOLE_IN_DATA                 = -17,
175 
176   /** Out of memory */
177   OGGZ_ERR_OUT_OF_MEMORY                = -18,
178 
179   /** The requested serialno does not exist in this OGGZ */
180   OGGZ_ERR_BAD_SERIALNO                 = -20,
181 
182   /** Packet disallowed due to invalid byte length */
183   OGGZ_ERR_BAD_BYTES                    = -21,
184 
185   /** Packet disallowed due to invalid b_o_s (beginning of stream) flag */
186   OGGZ_ERR_BAD_B_O_S                    = -22,
187 
188   /** Packet disallowed due to invalid e_o_s (end of stream) flag */
189   OGGZ_ERR_BAD_E_O_S                    = -23,
190 
191   /** Packet disallowed due to invalid granulepos */
192   OGGZ_ERR_BAD_GRANULEPOS               = -24,
193 
194   /** Packet disallowed due to invalid packetno */
195   OGGZ_ERR_BAD_PACKETNO                 = -25,
196 
197   /** Comment violates VorbisComment restrictions */
198   /* 129 == 0x81 is the frame marker for Theora's comments page ;-) */
199   OGGZ_ERR_COMMENT_INVALID              = -129,
200 
201   /** Guard provided by user has non-zero value */
202   OGGZ_ERR_BAD_GUARD                    = -210,
203 
204   /** Attempt to call oggz_write() or oggz_write_output() from within
205    * a hungry() callback */
206   OGGZ_ERR_RECURSIVE_WRITE              = -266
207 };
208 
209 #endif /* __OGGZ_CONSTANTS_H__ */
210