mpg123 logo
download : svn :: features :: sf.net project - bug tracker :: news archive
libmpg123 API :: testing :: benchmarking :: faq :: links :: contact
Note: This API doc is automatically generated from the current development version that you can get via Subversion or as a daily snapshot from http://mpg123.org/snapshot. There may be differences (additions) compared to the latest stable release. See NEWS.libmpg123 and the overall NEWS file on libmpg123 versions and important changes between them.
Let me emphasize that the policy for libmpg123 is to always stay backwards compatible -- only additions are planned (and it's not yet planned to change the plans;-).

mpg123.h

Go to the documentation of this file.
00001 /*
00002         libmpg123: MPEG Audio Decoder library (version 1.5.1)
00003 
00004         copyright 1995-2007 by the mpg123 project - free software under the terms of the LGPL 2.1
00005         see COPYING and AUTHORS files in distribution or http://mpg123.org
00006 */
00007 
00008 #ifndef MPG123_LIB_H
00009 #define MPG123_LIB_H
00010 
00013 /* These aren't actually in use... seems to work without using libtool. */
00014 #ifdef BUILD_MPG123_DLL
00015 /* The dll exports. */
00016 #define EXPORT __declspec(dllexport)
00017 #else
00018 #ifdef LINK_MPG123_DLL
00019 /* The exe imports. */
00020 #define EXPORT __declspec(dllimport)
00021 #else
00022 /* Nothing on normal/UNIX builds */
00023 #define EXPORT
00024 #endif
00025 #endif
00026 
00027 #include <stdlib.h>
00028 #include <sys/types.h>
00029 
00030 
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034 
00045 struct mpg123_handle_struct;
00046 
00050 typedef struct mpg123_handle_struct mpg123_handle;
00051 
00057 EXPORT int  mpg123_init(void);
00058 
00061 EXPORT void mpg123_exit(void);
00062 
00069 EXPORT mpg123_handle *mpg123_new(const char* decoder, int *error);
00070 
00072 EXPORT void mpg123_delete(mpg123_handle *mh);
00073 
00075 enum mpg123_parms
00076 {
00077         MPG123_VERBOSE,        
00078         MPG123_FLAGS,          
00079         MPG123_ADD_FLAGS,      
00080         MPG123_FORCE_RATE,     
00081         MPG123_DOWN_SAMPLE,    
00082         MPG123_RVA,            
00083         MPG123_DOWNSPEED,      
00084         MPG123_UPSPEED,        
00085         MPG123_START_FRAME,    
00086         MPG123_DECODE_FRAMES,  
00087         MPG123_ICY_INTERVAL,   
00088         MPG123_OUTSCALE,       
00089         MPG123_TIMEOUT,        
00090         MPG123_REMOVE_FLAGS,   
00091         MPG123_RESYNC_LIMIT    
00092 };
00093 
00095 enum mpg123_param_flags
00096 {
00097          MPG123_FORCE_MONO   = 0x7  
00098         ,MPG123_MONO_LEFT    = 0x1  
00099         ,MPG123_MONO_RIGHT   = 0x2  
00100         ,MPG123_MONO_MIX     = 0x4  
00101         ,MPG123_FORCE_STEREO = 0x8  
00102         ,MPG123_FORCE_8BIT   = 0x10 
00103         ,MPG123_QUIET        = 0x20 
00104         ,MPG123_GAPLESS      = 0x40 
00105         ,MPG123_NO_RESYNC    = 0x80 
00106         ,MPG123_SEEKBUFFER   = 0x100 
00107 };
00108 
00110 enum mpg123_param_rva
00111 {
00112          MPG123_RVA_OFF   = 0 
00113         ,MPG123_RVA_MIX   = 1 
00114         ,MPG123_RVA_ALBUM = 2 
00115         ,MPG123_RVA_MAX   = MPG123_RVA_ALBUM 
00116 };
00117 
00118 /* TODO: Assess the possibilities and troubles of changing parameters during playback. */
00119 
00122 EXPORT int mpg123_param(mpg123_handle *mh, enum mpg123_parms type, long value, double fvalue);
00123 
00126 EXPORT int mpg123_getparam(mpg123_handle *mh, enum mpg123_parms type, long *val, double *fval);
00127 
00128 /* @} */
00129 
00130 
00144 enum mpg123_errors
00145 {
00146         MPG123_DONE=-12,        
00147         MPG123_NEW_FORMAT=-11,  
00148         MPG123_NEED_MORE=-10,   
00149         MPG123_ERR=-1,                  
00150         MPG123_OK=0,                    
00151         MPG123_BAD_OUTFORMAT,   
00152         MPG123_BAD_CHANNEL,             
00153         MPG123_BAD_RATE,                
00154         MPG123_ERR_16TO8TABLE,  
00155         MPG123_BAD_PARAM,               
00156         MPG123_BAD_BUFFER,              
00157         MPG123_OUT_OF_MEM,              
00158         MPG123_NOT_INITIALIZED, 
00159         MPG123_BAD_DECODER,             
00160         MPG123_BAD_HANDLE,              
00161         MPG123_NO_BUFFERS,              
00162         MPG123_BAD_RVA,                 
00163         MPG123_NO_GAPLESS,              
00164         MPG123_NO_SPACE,                
00165         MPG123_BAD_TYPES,               
00166         MPG123_BAD_BAND,                
00167         MPG123_ERR_NULL,                
00168         MPG123_ERR_READER,              
00169         MPG123_NO_SEEK_FROM_END,
00170         MPG123_BAD_WHENCE,              
00171         MPG123_NO_TIMEOUT,              
00172         MPG123_BAD_FILE,                
00173         MPG123_NO_SEEK,                 
00174         MPG123_NO_READER,               
00175         MPG123_BAD_PARS,                
00176         MPG123_BAD_INDEX_PAR,   
00177         MPG123_OUT_OF_SYNC,     
00178         MPG123_RESYNC_FAIL,     
00179         MPG123_NO_8BIT, 
00180         MPG123_BAD_ALIGN,       
00181         MPG123_NULL_BUFFER      
00182 };
00183 
00185 EXPORT const char* mpg123_plain_strerror(int errcode);
00186 
00191 EXPORT const char* mpg123_strerror(mpg123_handle *mh);
00192 
00194 EXPORT int mpg123_errcode(mpg123_handle *mh);
00195 
00208 EXPORT char **mpg123_decoders();
00209 
00211 EXPORT char **mpg123_supported_decoders();
00212 
00214 EXPORT int mpg123_decoder(mpg123_handle *mh, const char* decoder_name);
00215 
00229 enum mpg123_enc_enum
00230 {
00231          MPG123_ENC_8      = 0x00f  
00232         ,MPG123_ENC_16     = 0x040  
00233         ,MPG123_ENC_32     = 0x100  
00234         ,MPG123_ENC_SIGNED = 0x080  
00235         ,MPG123_ENC_FLOAT  = 0x800  
00236         ,MPG123_ENC_SIGNED_16   = (MPG123_ENC_16|MPG123_ENC_SIGNED|0x10) 
00237         ,MPG123_ENC_UNSIGNED_16 = (MPG123_ENC_16|0x20)                   
00238         ,MPG123_ENC_UNSIGNED_8  = 0x01                                   
00239         ,MPG123_ENC_SIGNED_8    = (MPG123_ENC_SIGNED|0x02)               
00240         ,MPG123_ENC_ULAW_8      = 0x04                                   
00241         ,MPG123_ENC_ALAW_8      = 0x08                                   
00242         ,MPG123_ENC_SIGNED_32   = MPG123_ENC_32|MPG123_ENC_SIGNED|0x10   
00243         ,MPG123_ENC_UNSIGNED_32 = MPG123_ENC_32|0x20                     
00244         ,MPG123_ENC_FLOAT_32    = 0x200                                  
00245         ,MPG123_ENC_FLOAT_64    = 0x400                                  
00246         ,MPG123_ENC_ANY = ( MPG123_ENC_SIGNED_16  | MPG123_ENC_UNSIGNED_16 | MPG123_ENC_UNSIGNED_8 
00247                           | MPG123_ENC_SIGNED_8   | MPG123_ENC_ULAW_8      | MPG123_ENC_ALAW_8
00248                           | MPG123_ENC_FLOAT_32   | MPG123_ENC_FLOAT_64 ) 
00249 };
00250 
00252 enum mpg123_channelcount
00253 {
00254          MPG123_MONO   = 1
00255         ,MPG123_STEREO = 2
00256 };
00257 
00263 EXPORT void mpg123_rates(const long **list, size_t *number);
00264 
00269 EXPORT void mpg123_encodings(const int **list, size_t *number);
00270 
00273 EXPORT int mpg123_format_none(mpg123_handle *mh);
00274 
00277 EXPORT int mpg123_format_all(mpg123_handle *mh);
00278 
00285 EXPORT int mpg123_format(mpg123_handle *mh, long rate, int channels, int encodings);
00286 
00291 EXPORT int mpg123_format_support(mpg123_handle *mh, long rate, int encoding);
00292 
00294 EXPORT int mpg123_getformat(mpg123_handle *mh, long *rate, int *channels, int *encoding);
00295 
00306 /* reading samples / triggering decoding, possible return values: */
00313 EXPORT int mpg123_open(mpg123_handle *mh, const char *path);
00314 
00318 EXPORT int mpg123_open_fd(mpg123_handle *mh, int fd);
00319 
00323 EXPORT int mpg123_open_feed(mpg123_handle *mh);
00324 
00326 EXPORT int mpg123_close(mpg123_handle *mh);
00327 
00333 EXPORT int mpg123_read(mpg123_handle *mh, unsigned char *outmemory, size_t outmemsize, size_t *done);
00334 
00340 EXPORT int mpg123_feed(mpg123_handle *mh, const unsigned char *in, size_t size);
00341 
00356 EXPORT int mpg123_decode(mpg123_handle *mh, const unsigned char *inmemory, size_t inmemsize,
00357                          unsigned char *outmemory, size_t outmemsize, size_t *done);
00358 
00365 EXPORT int mpg123_decode_frame(mpg123_handle *mh, off_t *num, unsigned char **audio, size_t *bytes);
00366 
00389 EXPORT off_t mpg123_tell(mpg123_handle *mh);
00390 
00392 EXPORT off_t mpg123_tellframe(mpg123_handle *mh);
00393 
00397 EXPORT off_t mpg123_seek(mpg123_handle *mh, off_t sampleoff, int whence);
00398 
00404 EXPORT off_t mpg123_feedseek(mpg123_handle *mh, off_t sampleoff, int whence, off_t *input_offset);
00405 
00409 EXPORT off_t mpg123_seek_frame(mpg123_handle *mh, off_t frameoff, int whence);
00410 
00414 EXPORT off_t mpg123_timeframe(mpg123_handle *mh, double sec);
00415 
00421 EXPORT int mpg123_index(mpg123_handle *mh, off_t **offsets, off_t *step, size_t *fill);
00422 
00429 EXPORT int mpg123_position( mpg123_handle *mh, off_t frame_offset,
00430                             off_t buffered_bytes,  off_t *current_frame,  
00431                             off_t *frames_left, double *current_seconds,
00432                             double *seconds_left);
00433 
00442 enum mpg123_channels
00443 {
00444          MPG123_LEFT=0x1        
00445         ,MPG123_RIGHT=0x2       
00446         ,MPG123_LR=0x3  
00447 };
00448 
00453 EXPORT int mpg123_eq(mpg123_handle *mh, enum mpg123_channels channel, int band, double val);
00454 
00456 EXPORT int mpg123_reset_eq(mpg123_handle *mh);
00457 
00460 EXPORT int mpg123_volume(mpg123_handle *mh, double vol);
00461 
00463 EXPORT int mpg123_volume_change(mpg123_handle *mh, double change);
00464 
00469 EXPORT int mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db);
00470 
00471 /* TODO: Set some preamp in addition / to replace internal RVA handling? */
00472 
00482 enum mpg123_vbr {
00483         MPG123_CBR=0,   
00484         MPG123_VBR,             
00485         MPG123_ABR              
00486 };
00487 
00489 enum mpg123_version {
00490         MPG123_1_0=0,   
00491         MPG123_2_0,             
00492         MPG123_2_5              
00493 };
00494 
00495 
00498 enum mpg123_mode {
00499         MPG123_M_STEREO=0,      
00500         MPG123_M_JOINT,         
00501         MPG123_M_DUAL,          
00502         MPG123_M_MONO           
00503 };
00504 
00505 
00507 enum mpg123_flags {
00508         MPG123_CRC=0x1,                 
00509         MPG123_COPYRIGHT=0x2,   
00510         MPG123_PRIVATE=0x4,             
00511         MPG123_ORIGINAL=0x8     
00512 };
00513 
00515 struct mpg123_frameinfo
00516 {
00517         enum mpg123_version version;    
00518         int layer;                                              
00519         long rate;                                              
00520         enum mpg123_mode mode;                  
00521         int mode_ext;                                   
00522         int framesize;                                  
00523         enum mpg123_flags flags;                
00524         int emphasis;                                   
00525         int bitrate;                                    
00526         int abr_rate;                                   
00527         enum mpg123_vbr vbr;                    
00528 };
00529 
00531 EXPORT int mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi);
00532 
00534 EXPORT size_t mpg123_safe_buffer(); 
00535 
00542 EXPORT int mpg123_scan(mpg123_handle *mh);
00543 
00546 EXPORT off_t mpg123_length(mpg123_handle *mh);
00547 
00551 EXPORT int mpg123_set_filesize(mpg123_handle *mh, off_t size);
00552 
00554 EXPORT double mpg123_tpf(mpg123_handle *mh);
00555 
00557 EXPORT long mpg123_clip(mpg123_handle *mh);
00558 
00572 typedef struct 
00573 {
00574         char* p;     
00575         size_t size; 
00576         size_t fill; 
00577 } mpg123_string;
00578 
00580 EXPORT void mpg123_init_string(mpg123_string* sb);
00581 
00583 EXPORT void mpg123_free_string(mpg123_string* sb);
00584 
00587 EXPORT int  mpg123_resize_string(mpg123_string* sb, size_t news);
00588 
00593 EXPORT int  mpg123_grow_string(mpg123_string* sb, size_t news);
00594 
00597 EXPORT int  mpg123_copy_string(mpg123_string* from, mpg123_string* to);
00598 
00601 EXPORT int  mpg123_add_string(mpg123_string* sb, const char* stuff);
00602 
00607 EXPORT int  mpg123_add_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count);
00608 
00611 EXPORT int  mpg123_set_string(mpg123_string* sb, const char* stuff);
00612 
00617 EXPORT int  mpg123_set_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count);
00618 
00619 
00624 typedef struct
00625 {
00626         char lang[3]; 
00627         char id[4];   
00628         mpg123_string description; 
00629         mpg123_string text;        
00630 } mpg123_text;
00631 
00637 typedef struct
00638 {
00639         unsigned char version; 
00640         mpg123_string *title;   
00641         mpg123_string *artist;  
00642         mpg123_string *album;   
00643         mpg123_string *year;    
00644         mpg123_string *genre;   
00645         mpg123_string *comment; 
00646         /* Encountered ID3v2 fields are appended to these lists.
00647            There can be multiple occurences, the pointers above always point to the last encountered data. */
00648         mpg123_text    *comment_list; 
00649         size_t          comments;     
00650         mpg123_text    *text;         
00651         size_t          texts;        
00652         mpg123_text    *extra;        
00653         size_t          extras;       
00654 } mpg123_id3v2;
00655 
00660 typedef struct
00661 {
00662         char tag[3];         
00663         char title[30];      
00664         char artist[30];     
00665         char album[30];      
00666         char year[4];        
00667         char comment[30];    
00668         unsigned char genre; 
00669 } mpg123_id3v1;
00670 
00671 #define MPG123_ID3     0x3 
00672 #define MPG123_NEW_ID3 0x1 
00673 #define MPG123_ICY     0xc 
00674 #define MPG123_NEW_ICY 0x4 
00678 EXPORT int mpg123_meta_check(mpg123_handle *mh); /* On error (no valid handle) just 0 is returned. */
00679 
00683 EXPORT int mpg123_id3(mpg123_handle *mh, mpg123_id3v1 **v1, mpg123_id3v2 **v2);
00684 
00687 EXPORT int mpg123_icy(mpg123_handle *mh, char **icy_meta); /* same for ICY meta string */
00688 
00692 EXPORT char* mpg123_icy2utf8(const char* icy_text);
00693 
00694 
00695 /* @} */
00696 
00697 
00714 struct mpg123_pars_struct;
00715 
00717 typedef struct mpg123_pars_struct   mpg123_pars;
00718 
00720 EXPORT mpg123_handle *mpg123_parnew(mpg123_pars *mp, const char* decoder, int *error);
00721 
00723 EXPORT mpg123_pars *mpg123_new_pars(int *error);
00724 
00726 EXPORT void         mpg123_delete_pars(mpg123_pars* mp);
00727 
00730 EXPORT int mpg123_fmt_none(mpg123_pars *mp);
00731 
00734 EXPORT int mpg123_fmt_all(mpg123_pars *mp);
00735 
00742 EXPORT int mpg123_fmt(mpg123_pars *mh, long rate, int channels, int encodings); /* 0 is good, -1 is error */
00743 
00748 EXPORT int mpg123_fmt_support(mpg123_pars *mh,   long rate, int encoding);
00749 
00752 EXPORT int mpg123_par(mpg123_pars *mp, enum mpg123_parms type, long value, double fvalue);
00753 
00756 EXPORT int mpg123_getpar(mpg123_pars *mp, enum mpg123_parms type, long *val, double *fval);
00757 
00758 /* @} */
00759 
00760 
00768 EXPORT int mpg123_replace_buffer(mpg123_handle *mh, unsigned char *data, size_t size);
00769 
00772 EXPORT size_t mpg123_outblock(mpg123_handle *mh);
00773 
00779 EXPORT int mpg123_replace_reader( mpg123_handle *mh,
00780                                   ssize_t (*r_read) (int, void *, size_t),
00781                                   off_t   (*r_lseek)(int, off_t, int) );
00782 
00783 /* @} */
00784 
00785 
00786 #ifdef __cplusplus
00787 }
00788 #endif
00789 
00790 #endif

Generated on Wed Sep 3 13:03:37 2008 for libmpg123 by  doxygen 1.5.4