OLD | NEW |
(Empty) | |
| 1 /* Copyright (C) 2002 Jean-Marc Valin */ |
| 2 /** |
| 3 @file speex_header.h |
| 4 @brief Describes the Speex header |
| 5 */ |
| 6 /* |
| 7 Redistribution and use in source and binary forms, with or without |
| 8 modification, are permitted provided that the following conditions |
| 9 are met: |
| 10 |
| 11 - Redistributions of source code must retain the above copyright |
| 12 notice, this list of conditions and the following disclaimer. |
| 13 |
| 14 - Redistributions in binary form must reproduce the above copyright |
| 15 notice, this list of conditions and the following disclaimer in the |
| 16 documentation and/or other materials provided with the distribution. |
| 17 |
| 18 - Neither the name of the Xiph.org Foundation nor the names of its |
| 19 contributors may be used to endorse or promote products derived from |
| 20 this software without specific prior written permission. |
| 21 |
| 22 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 23 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 24 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| 25 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR |
| 26 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| 27 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| 28 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| 29 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| 30 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| 31 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| 32 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 33 |
| 34 */ |
| 35 |
| 36 |
| 37 #ifndef SPEEX_HEADER_H |
| 38 #define SPEEX_HEADER_H |
| 39 /** @defgroup SpeexHeader SpeexHeader: Makes it easy to write/parse an Ogg/Speex
header |
| 40 * This is the Speex header for the Ogg encapsulation. You don't need that if y
ou just use RTP. |
| 41 * @{ |
| 42 */ |
| 43 |
| 44 #include "speex/speex_types.h" |
| 45 |
| 46 #ifdef __cplusplus |
| 47 extern "C" { |
| 48 #endif |
| 49 |
| 50 struct SpeexMode; |
| 51 |
| 52 /** Length of the Speex header identifier */ |
| 53 #define SPEEX_HEADER_STRING_LENGTH 8 |
| 54 |
| 55 /** Maximum number of characters for encoding the Speex version number in the he
ader */ |
| 56 #define SPEEX_HEADER_VERSION_LENGTH 20 |
| 57 |
| 58 /** Speex header info for file-based formats */ |
| 59 typedef struct SpeexHeader { |
| 60 char speex_string[SPEEX_HEADER_STRING_LENGTH]; /**< Identifies a Speex bit-
stream, always set to "Speex " */ |
| 61 char speex_version[SPEEX_HEADER_VERSION_LENGTH]; /**< Speex version */ |
| 62 spx_int32_t speex_version_id; /**< Version for Speex (for checking comp
atibility) */ |
| 63 spx_int32_t header_size; /**< Total size of the header ( sizeof(Sp
eexHeader) ) */ |
| 64 spx_int32_t rate; /**< Sampling rate used */ |
| 65 spx_int32_t mode; /**< Mode used (0 for narrowband, 1 for w
ideband) */ |
| 66 spx_int32_t mode_bitstream_version; /**< Version ID of the bit-stream */ |
| 67 spx_int32_t nb_channels; /**< Number of channels encoded */ |
| 68 spx_int32_t bitrate; /**< Bit-rate used */ |
| 69 spx_int32_t frame_size; /**< Size of frames */ |
| 70 spx_int32_t vbr; /**< 1 for a VBR encoding, 0 otherwise */ |
| 71 spx_int32_t frames_per_packet; /**< Number of frames stored per Ogg pack
et */ |
| 72 spx_int32_t extra_headers; /**< Number of additional headers after t
he comments */ |
| 73 spx_int32_t reserved1; /**< Reserved for future use, must be zer
o */ |
| 74 spx_int32_t reserved2; /**< Reserved for future use, must be zer
o */ |
| 75 } SpeexHeader; |
| 76 |
| 77 /** Initializes a SpeexHeader using basic information */ |
| 78 void speex_init_header(SpeexHeader *header, int rate, int nb_channels, const str
uct SpeexMode *m); |
| 79 |
| 80 /** Creates the header packet from the header itself (mostly involves endianness
conversion) */ |
| 81 char *speex_header_to_packet(SpeexHeader *header, int *size); |
| 82 |
| 83 /** Creates a SpeexHeader from a packet */ |
| 84 SpeexHeader *speex_packet_to_header(char *packet, int size); |
| 85 |
| 86 /** Frees the memory allocated by either speex_header_to_packet() or speex_packe
t_to_header() */ |
| 87 void speex_header_free(void *ptr); |
| 88 |
| 89 #ifdef __cplusplus |
| 90 } |
| 91 #endif |
| 92 |
| 93 /** @} */ |
| 94 #endif |
OLD | NEW |