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