Doxygen...
[speexdsp.git] / libspeex / speex_header.h
1 /* Copyright (C) 2002 Jean-Marc Valin */
2 /**
3    @file speex_header.h
4    @brief Describes the Speex header
5 */
6 /*
7    This library is free software; you can redistribute it and/or
8    modify it under the terms of the GNU Lesser General Public
9    License as published by the Free Software Foundation; either
10    version 2.1 of the License, or (at your option) any later version.
11    
12    This library is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    Lesser General Public License for more details.
16    
17    You should have received a copy of the GNU Lesser General Public
18    License along with this library; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20
21 */
22
23
24 #ifndef SPEEX_HEADER_H
25 #define SPEEX_HEADER_H
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 struct SpeexMode;
32
33 /** Maximum number of characters for encoding the Speex version number in the header */
34 #define SPEEX_HEADER_VERSION_LENGTH 20
35
36 /** Current version of the Speex header */
37 #define SPEEX_HEADER_VERSION -1
38
39 /** Speex header info for file-based formats */
40 typedef struct SpeexHeader {
41    char speex_string[8]; /**< Identifies a Speex bit-stream, always set to "Speex   " */
42    char speex_version[SPEEX_HEADER_VERSION_LENGTH]; /**< Speex version */
43    int speex_header_version; /**< Version number for the header */
44    int header_size; /**< Total size of the header ( sizeof(SpeexHeader) ) */
45    int rate; /**< Sampling rate used */
46    int mode; /**< Mode used (0 for narrowband, 1 for wideband) */
47    int mode_bitstream_version; /**< Version ID of the bit-stream */
48    int nb_channels; /**< Number of channels encoded */
49    int bitrate; /**< Bit-rate used */
50    int frame_size; /**< Size of frames */
51    int vbr; /**< 1 for a VBR encoding, 0 otherwise */
52    int frames_per_packet; /**< Number of frames stored per Ogg packet */
53    int reserved1; /**< Reserved for future use */
54    int reserved2; /**< Reserved for future use */
55    int reserved3; /**< Reserved for future use */
56 } SpeexHeader;
57
58 /** Initializes a SpeexHeader using basic information */
59 void speex_init_header(SpeexHeader *header, int rate, int nb_channels, struct SpeexMode *m);
60
61 /** Creates the header packet from the header itself (mostly involves endianness conversion) */
62 char *speex_header_to_packet(SpeexHeader *header, int *size);
63
64 /** Creates a SpeexHeader from a packet */
65 SpeexHeader *speex_packet_to_header(char *packet, int size);
66
67 #ifdef __cplusplus
68 }
69 #endif
70
71
72 #endif