- /* 
-         libmpg123: MPEG Audio Decoder library 
-   
-         separate header just for audio format definitions not tied to 
-         library code 
-   
-         copyright 1995-2015 by the mpg123 project 
-         free software under the terms of the LGPL 2.1 
-         see COPYING and AUTHORS files in distribution or http://mpg123.org 
- */ 
-   
- #ifndef MPG123_ENC_H 
- #define MPG123_ENC_H 
-   
- /** \file fmt123.h Audio format definitions. */ 
-   
- /** \defgroup mpg123_enc mpg123 PCM sample encodings 
-  *  These are definitions for audio formats used by libmpg123 and 
-  *  libout123. 
-  * 
-  * @{ 
-  */ 
-   
- /** An enum over all sample types possibly known to mpg123. 
-  *  The values are designed as bit flags to allow bitmasking for encoding 
-  *  families. 
-  *  This is also why the enum is not used as type for actual encoding variables, 
-  *  plain integers (at least 16 bit, 15 bit being used) cover the possible 
-  *  combinations of these flags. 
-  * 
-  *  Note that (your build of) libmpg123 does not necessarily support all these. 
-  *  Usually, you can expect the 8bit encodings and signed 16 bit. 
-  *  Also 32bit float will be usual beginning with mpg123-1.7.0 . 
-  *  What you should bear in mind is that (SSE, etc) optimized routines may be 
-  *  absent for some formats. We do have SSE for 16, 32 bit and float, though. 
-  *  24 bit integer is done via postprocessing of 32 bit output -- just cutting 
-  *  the last byte, no rounding, even. If you want better, do it yourself. 
-  * 
-  *  All formats are in native byte order. If you need different endinaness, you 
-  *  can simply postprocess the output buffers (libmpg123 wouldn't do anything 
-  * else). The macro MPG123_SAMPLESIZE() can be helpful there. 
-  */ 
- enum mpg123_enc_enum 
- { 
- /* 0000 0000 0000 1111 Some 8 bit  integer encoding. */ 
-         MPG123_ENC_8      = 0x00f 
- /* 0000 0000 0100 0000 Some 16 bit integer encoding. */ 
- ,       MPG123_ENC_16     = 0x040 
- /* 0100 0000 0000 0000 Some 24 bit integer encoding. */ 
- ,       MPG123_ENC_24     = 0x4000  
- /* 0000 0001 0000 0000 Some 32 bit integer encoding. */ 
- ,       MPG123_ENC_32     = 0x100   
- /* 0000 0000 1000 0000 Some signed integer encoding. */ 
- ,       MPG123_ENC_SIGNED = 0x080   
- /* 0000 1110 0000 0000 Some float encoding. */ 
- ,       MPG123_ENC_FLOAT  = 0xe00   
- /* 0000 0000 1101 0000 signed 16 bit */ 
- ,       MPG123_ENC_SIGNED_16   = (MPG123_ENC_16|MPG123_ENC_SIGNED|0x10) 
- /* 0000 0000 0110 0000 unsigned 16 bit */ 
- ,       MPG123_ENC_UNSIGNED_16 = (MPG123_ENC_16|0x20) 
- /* 0000 0000 0000 0001 unsigned 8 bit */ 
- ,       MPG123_ENC_UNSIGNED_8  = 0x01 
- /* 0000 0000 1000 0010 signed 8 bit */ 
- ,       MPG123_ENC_SIGNED_8    = (MPG123_ENC_SIGNED|0x02) 
- /* 0000 0000 0000 0100 ulaw 8 bit */ 
- ,       MPG123_ENC_ULAW_8      = 0x04 
- /* 0000 0000 0000 1000 alaw 8 bit */ 
- ,       MPG123_ENC_ALAW_8      = 0x08 
- /* 0001 0001 1000 0000 signed 32 bit */ 
- ,       MPG123_ENC_SIGNED_32   = MPG123_ENC_32|MPG123_ENC_SIGNED|0x1000 
- /* 0010 0001 0000 0000 unsigned 32 bit */ 
- ,       MPG123_ENC_UNSIGNED_32 = MPG123_ENC_32|0x2000 
- /* 0101 0000 1000 0000 signed 24 bit */ 
- ,       MPG123_ENC_SIGNED_24   = MPG123_ENC_24|MPG123_ENC_SIGNED|0x1000 
- /* 0110 0000 0000 0000 unsigned 24 bit */ 
- ,       MPG123_ENC_UNSIGNED_24 = MPG123_ENC_24|0x2000 
- /* 0000 0010 0000 0000 32bit float */ 
- ,       MPG123_ENC_FLOAT_32    = 0x200 
- /* 0000 0100 0000 0000 64bit float */ 
- ,       MPG123_ENC_FLOAT_64    = 0x400 
- /* Any possibly known encoding from the list above. */ 
- ,       MPG123_ENC_ANY = ( MPG123_ENC_SIGNED_16  | MPG123_ENC_UNSIGNED_16 
-                          | MPG123_ENC_UNSIGNED_8 | MPG123_ENC_SIGNED_8 
-                          | MPG123_ENC_ULAW_8     | MPG123_ENC_ALAW_8 
-                          | MPG123_ENC_SIGNED_32  | MPG123_ENC_UNSIGNED_32 
-                          | MPG123_ENC_SIGNED_24  | MPG123_ENC_UNSIGNED_24 
-                          | MPG123_ENC_FLOAT_32   | MPG123_ENC_FLOAT_64    ) 
- }; 
-   
- /** Get size of one PCM sample with given encoding. 
-  *  This is included both in libmpg123 and libout123. Both offer 
-  *  an API function to provide the macro results from library 
-  *  compile-time, not that of you application. This most likely 
-  *  does not matter as I do not expect any fresh PCM sample 
-  *  encoding to appear. But who knows? Perhaps the encoding type 
-  *  will be abused for funny things in future, not even plain PCM. 
-  *  And, by the way: Thomas really likes the ?: operator. 
-  * \param enc the encoding (mpg123_enc_enum value) 
-  * \return size of one sample in bytes 
-  */ 
- #define MPG123_SAMPLESIZE(enc) ( \ 
-         (enc) & MPG123_ENC_8 \ 
-         ?       1 \ 
-         :       ( (enc) & MPG123_ENC_16 \ 
-                 ?       2 \ 
-                 :       ( (enc) & MPG123_ENC_24 \ 
-                         ?       3 \ 
-                         :       ( (  (enc) & MPG123_ENC_32 \ 
-                                   || (enc) == MPG123_ENC_FLOAT_32 ) \ 
-                                 ?       4 \ 
-                                 :       ( (enc) == MPG123_ENC_FLOAT_64 \ 
-                                         ?       8 \ 
-                                         :       0 \ 
- )       )       )       )       ) 
-   
- /** Structure defining an audio format. 
-  *  Providing the members as individual function arguments to define a certain 
-  *  output format is easy enough. This struct makes is more comfortable to deal 
-  *  with a list of formats. 
-  *  Negative values for the members might be used to communicate use of default 
-  *  values. 
-  */ 
- struct mpg123_fmt 
- { 
-         long rate;    /**< sampling rate in Hz  */ 
-         int channels; /**< channel count */ 
-         /** encoding code, can be single value or bitwise or of members of 
-          *  mpg123_enc_enum */ 
-         int encoding; 
- }; 
-   
- /* @} */ 
-   
- #endif 
-   
-