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, 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 };
00447 
00452 EXPORT int mpg123_eq(mpg123_handle *mh, enum mpg123_channels channel, int band, double val);
00453 
00455 EXPORT int mpg123_reset_eq(mpg123_handle *mh);
00456 
00459 EXPORT int mpg123_volume(mpg123_handle *mh, double vol);
00460 
00462 EXPORT int mpg123_volume_change(mpg123_handle *mh, double change);
00463 
00468 EXPORT int mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db);
00469 
00470 /* TODO: Set some preamp in addition / to replace internal RVA handling? */
00471 
00481 enum mpg123_vbr {
00482         MPG123_CBR=0,   
00483         MPG123_VBR,             
00484         MPG123_ABR              
00485 };
00486 
00488 enum mpg123_version {
00489         MPG123_1_0=0,   
00490         MPG123_2_0,             
00491         MPG123_2_5              
00492 };
00493 
00494 
00497 enum mpg123_mode {
00498         MPG123_M_STEREO=0,      
00499         MPG123_M_JOINT,         
00500         MPG123_M_DUAL,          
00501         MPG123_M_MONO           
00502 };
00503 
00504 
00506 enum mpg123_flags {
00507         MPG123_CRC=0x1,                 
00508         MPG123_COPYRIGHT=0x2,   
00509         MPG123_PRIVATE=0x4,             
00510         MPG123_ORIGINAL=0x8     
00511 };
00512 
00514 struct mpg123_frameinfo
00515 {
00516         enum mpg123_version version;    
00517         int layer;                                              
00518         long rate;                                              
00519         enum mpg123_mode mode;                  
00520         int mode_ext;                                   
00521         int framesize;                                  
00522         enum mpg123_flags flags;                
00523         int emphasis;                                   
00524         int bitrate;                                    
00525         int abr_rate;                                   
00526         enum mpg123_vbr vbr;                    
00527 };
00528 
00530 EXPORT int mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi);
00531 
00533 EXPORT size_t mpg123_safe_buffer(); 
00534 
00541 EXPORT int mpg123_scan(mpg123_handle *mh);
00542 
00545 EXPORT off_t mpg123_length(mpg123_handle *mh);
00546 
00550 EXPORT int mpg123_set_filesize(mpg123_handle *mh, off_t size);
00551 
00553 EXPORT double mpg123_tpf(mpg123_handle *mh);
00554 
00556 EXPORT long mpg123_clip(mpg123_handle *mh);
00557 
00571 typedef struct 
00572 {
00573         char* p;     
00574         size_t size; 
00575         size_t fill; 
00576 } mpg123_string;
00577 
00579 EXPORT void mpg123_init_string(mpg123_string* sb);
00580 
00582 EXPORT void mpg123_free_string(mpg123_string* sb);
00583 
00586 EXPORT int  mpg123_resize_string(mpg123_string* sb, size_t news);
00587 
00592 EXPORT int  mpg123_grow_string(mpg123_string* sb, size_t news);
00593 
00596 EXPORT int  mpg123_copy_string(mpg123_string* from, mpg123_string* to);
00597 
00600 EXPORT int  mpg123_add_string(mpg123_string* sb, const char* stuff);
00601 
00606 EXPORT int  mpg123_add_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count);
00607 
00610 EXPORT int  mpg123_set_string(mpg123_string* sb, const char* stuff);
00611 
00616 EXPORT int  mpg123_set_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count);
00617 
00618 
00623 typedef struct
00624 {
00625         char lang[3]; 
00626         char id[4];   
00627         mpg123_string description; 
00628         mpg123_string text;        
00629 } mpg123_text;
00630 
00636 typedef struct
00637 {
00638         unsigned char version; 
00639         mpg123_string *title;   
00640         mpg123_string *artist;  
00641         mpg123_string *album;   
00642         mpg123_string *year;    
00643         mpg123_string *genre;   
00644         mpg123_string *comment; 
00645         /* Encountered ID3v2 fields are appended to these lists.
00646            There can be multiple occurences, the pointers above always point to the last encountered data. */
00647         mpg123_text    *comment_list; 
00648         size_t          comments;     
00649         mpg123_text    *text;         
00650         size_t          texts;        
00651         mpg123_text    *extra;        
00652         size_t          extras;       
00653 } mpg123_id3v2;
00654 
00659 typedef struct
00660 {
00661         char tag[3];         
00662         char title[30];      
00663         char artist[30];     
00664         char album[30];      
00665         char year[4];        
00666         char comment[30];    
00667         unsigned char genre; 
00668 } mpg123_id3v1;
00669 
00670 #define MPG123_ID3     0x3 
00671 #define MPG123_NEW_ID3 0x1 
00672 #define MPG123_ICY     0xc 
00673 #define MPG123_NEW_ICY 0x4 
00677 EXPORT int mpg123_meta_check(mpg123_handle *mh); /* On error (no valid handle) just 0 is returned. */
00678 
00682 EXPORT int mpg123_id3(mpg123_handle *mh, mpg123_id3v1 **v1, mpg123_id3v2 **v2);
00683 
00686 EXPORT int mpg123_icy(mpg123_handle *mh, char **icy_meta); /* same for ICY meta string */
00687 
00691 EXPORT char* mpg123_icy2utf8(const char* icy_text);
00692 
00693 
00694 /* @} */
00695 
00696 
00713 struct mpg123_pars_struct;
00714 
00716 typedef struct mpg123_pars_struct   mpg123_pars;
00717 
00719 EXPORT mpg123_handle *mpg123_parnew(mpg123_pars *mp, const char* decoder, int *error);
00720 
00722 EXPORT mpg123_pars *mpg123_new_pars(int *error);
00723 
00725 EXPORT void         mpg123_delete_pars(mpg123_pars* mp);
00726 
00729 EXPORT int mpg123_fmt_none(mpg123_pars *mp);
00730 
00733 EXPORT int mpg123_fmt_all(mpg123_pars *mp);
00734 
00741 EXPORT int mpg123_fmt(mpg123_pars *mh, long rate, int channels, int encodings); /* 0 is good, -1 is error */
00742 
00747 EXPORT int mpg123_fmt_support(mpg123_pars *mh,   long rate, int encoding);
00748 
00751 EXPORT int mpg123_par(mpg123_pars *mp, enum mpg123_parms type, long value, double fvalue);
00752 
00755 EXPORT int mpg123_getpar(mpg123_pars *mp, enum mpg123_parms type, long *val, double *fval);
00756 
00757 /* @} */
00758 
00759 
00767 EXPORT int mpg123_replace_buffer(mpg123_handle *mh, unsigned char *data, size_t size);
00768 
00771 EXPORT size_t mpg123_outblock(mpg123_handle *mh);
00772 
00778 EXPORT int mpg123_replace_reader( mpg123_handle *mh,
00779                                   ssize_t (*r_read) (int, void *, size_t),
00780                                   off_t   (*r_lseek)(int, off_t, int) );
00781 
00782 /* @} */
00783 
00784 
00785 #ifdef __cplusplus
00786 }
00787 #endif
00788 
00789 #endif

Generated on Thu Aug 21 19:19:01 2008 for libmpg123 by  doxygen 1.5.4