increase PA_CVOLUME_SNPRINT_MAX to a proper value and document that it is not conside...
[profile/ivi/pulseaudio-panda.git] / src / pulse / sample.h
1 #ifndef foosamplehfoo
2 #define foosamplehfoo
3
4 /***
5   This file is part of PulseAudio.
6
7   Copyright 2004-2006 Lennart Poettering
8   Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
9
10   PulseAudio is free software; you can redistribute it and/or modify
11   it under the terms of the GNU Lesser General Public License as published
12   by the Free Software Foundation; either version 2 of the License,
13   or (at your option) any later version.
14
15   PulseAudio is distributed in the hope that it will be useful, but
16   WITHOUT ANY WARRANTY; without even the implied warranty of
17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18   General Public License for more details.
19
20   You should have received a copy of the GNU Lesser General Public License
21   along with PulseAudio; if not, write to the Free Software
22   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
23   USA.
24 ***/
25
26 #include <inttypes.h>
27 #include <sys/types.h>
28 #include <sys/param.h>
29 #include <math.h>
30
31 #include <pulse/gccmacro.h>
32 #include <pulse/cdecl.h>
33
34 /** \page sample Sample Format Specifications
35  *
36  * \section overv_sec Overview
37  *
38  * PulseAudio is capable of handling a multitude of sample formats, rates
39  * and channels, transparently converting and mixing them as needed.
40  *
41  * \section format_sec Sample Format
42  *
43  * PulseAudio supports the following sample formats:
44  *
45  * \li PA_SAMPLE_U8 - Unsigned 8 bit integer PCM.
46  * \li PA_SAMPLE_S16LE - Signed 16 integer bit PCM, little endian.
47  * \li PA_SAMPLE_S16BE - Signed 16 integer bit PCM, big endian.
48  * \li PA_SAMPLE_FLOAT32LE - 32 bit IEEE floating point PCM, little endian.
49  * \li PA_SAMPLE_FLOAT32BE - 32 bit IEEE floating point PCM, big endian.
50  * \li PA_SAMPLE_ALAW - 8 bit a-Law.
51  * \li PA_SAMPLE_ULAW - 8 bit mu-Law.
52  * \li PA_SAMPLE_S32LE - Signed 32 bit integer PCM, little endian.
53  * \li PA_SAMPLE_S32BE - Signed 32 bit integer PCM, big endian.
54  *
55  * The floating point sample formats have the range from -1.0 to 1.0.
56  *
57  * The sample formats that are sensitive to endianness have convenience
58  * macros for native endian (NE), and reverse endian (RE).
59  *
60  * \section rate_sec Sample Rates
61  *
62  * PulseAudio supports any sample rate between 1 Hz and 4 GHz. There is no
63  * point trying to exceed the sample rate of the output device though as the
64  * signal will only get downsampled, consuming CPU on the machine running the
65  * server.
66  *
67  * \section chan_sec Channels
68  *
69  * PulseAudio supports up to 16 individiual channels. The order of the
70  * channels is up to the application, but they must be continous. To map
71  * channels to speakers, see \ref channelmap.
72  *
73  * \section calc_sec Calculations
74  *
75  * The PulseAudio library contains a number of convenience functions to do
76  * calculations on sample formats:
77  *
78  * \li pa_bytes_per_second() - The number of bytes one second of audio will
79  *                             take given a sample format.
80  * \li pa_frame_size() - The size, in bytes, of one frame (i.e. one set of
81  *                       samples, one for each channel).
82  * \li pa_sample_size() - The size, in bytes, of one sample.
83  * \li pa_bytes_to_usec() - Calculate the time it would take to play a buffer
84  *                          of a certain size.
85  *
86  * \section util_sec Convenience Functions
87  *
88  * The library also contains a couple of other convenience functions:
89  *
90  * \li pa_sample_spec_valid() - Tests if a sample format specification is
91  *                              valid.
92  * \li pa_sample_spec_equal() - Tests if the sample format specifications are
93  *                              identical.
94  * \li pa_sample_format_to_string() - Return a textual description of a
95  *                                    sample format.
96  * \li pa_parse_sample_format() - Parse a text string into a sample format.
97  * \li pa_sample_spec_snprint() - Create a textual description of a complete
98  *                                 sample format specification.
99  * \li pa_bytes_snprint() - Pretty print a byte value (e.g. 2.5 MiB).
100  */
101
102 /** \file
103  * Constants and routines for sample type handling */
104
105 PA_C_DECL_BEGIN
106
107 #if !defined(WORDS_BIGENDIAN)
108 #if defined(__BYTE_ORDER)
109 #if __BYTE_ORDER == __BIG_ENDIAN
110 #define WORDS_BIGENDIAN
111 #endif
112 #endif
113 #endif
114
115 /** Maximum number of allowed channels */
116 #define PA_CHANNELS_MAX 32U
117
118 /** Maximum allowed sample rate */
119 #define PA_RATE_MAX (48000U*4U)
120
121 /** Sample format */
122 typedef enum pa_sample_format {
123     PA_SAMPLE_U8,
124     /**< Unsigned 8 Bit PCM */
125
126     PA_SAMPLE_ALAW,
127     /**< 8 Bit a-Law */
128
129     PA_SAMPLE_ULAW,
130     /**< 8 Bit mu-Law */
131
132     PA_SAMPLE_S16LE,
133     /**< Signed 16 Bit PCM, little endian (PC) */
134
135     PA_SAMPLE_S16BE,
136     /**< Signed 16 Bit PCM, big endian */
137
138     PA_SAMPLE_FLOAT32LE,
139     /**< 32 Bit IEEE floating point, little endian, range -1 to 1 */
140
141     PA_SAMPLE_FLOAT32BE,
142     /**< 32 Bit IEEE floating point, big endian, range -1 to 1 */
143
144     PA_SAMPLE_S32LE,
145     /**< Signed 32 Bit PCM, little endian (PC) */
146
147     PA_SAMPLE_S32BE,
148     /**< Signed 32 Bit PCM, big endian (PC) */
149
150     PA_SAMPLE_MAX,
151     /**< Upper limit of valid sample types */
152
153     PA_SAMPLE_INVALID = -1
154     /**< An invalid value */
155 } pa_sample_format_t;
156
157 #ifdef WORDS_BIGENDIAN
158 /** Signed 16 Bit PCM, native endian */
159 #define PA_SAMPLE_S16NE PA_SAMPLE_S16BE
160 /** 32 Bit IEEE floating point, native endian */
161 #define PA_SAMPLE_FLOAT32NE PA_SAMPLE_FLOAT32BE
162 /** Signed 32 Bit PCM, native endian */
163 #define PA_SAMPLE_S32NE PA_SAMPLE_S32BE
164 /** Signed 16 Bit PCM reverse endian */
165 #define PA_SAMPLE_S16RE PA_SAMPLE_S16LE
166 /** 32 Bit IEEE floating point, reverse endian */
167 #define PA_SAMPLE_FLOAT32RE PA_SAMPLE_FLOAT32LE
168 /** Signed 32 Bit PCM reverse endian */
169 #define PA_SAMPLE_S32RE PA_SAMPLE_S32LE
170 #else
171 /** Signed 16 Bit PCM, native endian */
172 #define PA_SAMPLE_S16NE PA_SAMPLE_S16LE
173 /** 32 Bit IEEE floating point, native endian */
174 #define PA_SAMPLE_FLOAT32NE PA_SAMPLE_FLOAT32LE
175 /** Signed 32 Bit PCM, native endian */
176 #define PA_SAMPLE_S32NE PA_SAMPLE_S32LE
177 /** Signed 16 Bit PCM reverse endian */
178 #define PA_SAMPLE_S16RE PA_SAMPLE_S16BE
179 /** 32 Bit IEEE floating point, reverse endian */
180 #define PA_SAMPLE_FLOAT32RE PA_SAMPLE_FLOAT32BE
181 /** Signed 32 Bit PCM reverse endian */
182 #define PA_SAMPLE_S32RE PA_SAMPLE_S32BE
183 #endif
184
185 /** A Shortcut for PA_SAMPLE_FLOAT32NE */
186 #define PA_SAMPLE_FLOAT32 PA_SAMPLE_FLOAT32NE
187
188 /** \cond fulldocs */
189 /* Allow clients to check with #ifdef for thse sample formats */
190 #define PA_SAMPLE_U8 PA_SAMPLE_U8
191 #define PA_SAMPLE_ALAW PA_SAMPLE_ALAW
192 #define PA_SAMPLE_ULAW PA_SAMPLE_ULAW
193 #define PA_SAMPLE_S16LE PA_SAMPLE_S16LE
194 #define PA_SAMPLE_S16BE PA_SAMPLE_S16BE
195 #define PA_SAMPLE_FLOAT32LE PA_SAMPLE_FLOAT32LE
196 #define PA_SAMPLE_FLOAT32BE PA_SAMPLE_FLOAT32BE
197 #define PA_SAMPLE_S32LE PA_SAMPLE_S32LE
198 #define PA_SAMPLE_S32BE PA_SAMPLE_S32BE
199 /** \endcond */
200
201 /** A sample format and attribute specification */
202 typedef struct pa_sample_spec {
203     pa_sample_format_t format;
204     /**< The sample format */
205
206     uint32_t rate;
207     /**< The sample rate. (e.g. 44100) */
208
209     uint8_t channels;
210     /**< Audio channels. (1 for mono, 2 for stereo, ...) */
211 } pa_sample_spec;
212
213 /** Type for usec specifications (unsigned). Always 64 bit. */
214 typedef uint64_t pa_usec_t;
215
216 /** Return the amount of bytes playback of a second of audio with the specified sample type takes */
217 size_t pa_bytes_per_second(const pa_sample_spec *spec) PA_GCC_PURE;
218
219 /** Return the size of a frame with the specific sample type */
220 size_t pa_frame_size(const pa_sample_spec *spec) PA_GCC_PURE;
221
222 /** Return the size of a sample with the specific sample type */
223 size_t pa_sample_size(const pa_sample_spec *spec) PA_GCC_PURE;
224
225 /** Calculate the time the specified bytes take to play with the
226  * specified sample type. The return value will always be rounded
227  * down for non-integral return values. */
228 pa_usec_t pa_bytes_to_usec(uint64_t length, const pa_sample_spec *spec) PA_GCC_PURE;
229
230 /** Calculates the number of bytes that are required for the specified
231  * time. The return value will always be rounded down for non-integral
232  * return values. \since 0.9 */
233 size_t pa_usec_to_bytes(pa_usec_t t, const pa_sample_spec *spec) PA_GCC_PURE;
234
235 /** Initialize the specified sample spec and return a pointer to
236  * it. The sample spec will have a defined state but
237  * pa_sample_spec_valid() will fail for it. \since 0.9.13 */
238 pa_sample_spec* pa_sample_spec_init(pa_sample_spec *spec);
239
240 /** Return non-zero when the sample type specification is valid */
241 int pa_sample_spec_valid(const pa_sample_spec *spec) PA_GCC_PURE;
242
243 /** Return non-zero when the two sample type specifications match */
244 int pa_sample_spec_equal(const pa_sample_spec*a, const pa_sample_spec*b) PA_GCC_PURE;
245
246 /** Return a descriptive string for the specified sample format. \since 0.8 */
247 const char *pa_sample_format_to_string(pa_sample_format_t f) PA_GCC_PURE;
248
249 /** Parse a sample format text. Inverse of pa_sample_format_to_string() */
250 pa_sample_format_t pa_parse_sample_format(const char *format) PA_GCC_PURE;
251
252 /** Maximum required string length for
253  * pa_sample_spec_snprint(). Please note that this value can change
254  * with any release without warning and without being considered API
255  * or ABI breakage. You should not use this definition anywhere where
256  * it might become part of an ABI. */
257 #define PA_SAMPLE_SPEC_SNPRINT_MAX 32
258
259 /** Pretty print a sample type specification to a string */
260 char* pa_sample_spec_snprint(char *s, size_t l, const pa_sample_spec *spec);
261
262 /** Pretty print a byte size value. (i.e. "2.5 MiB") */
263 char* pa_bytes_snprint(char *s, size_t l, unsigned v);
264
265 PA_C_DECL_END
266
267 #endif