From 2462f728286867bd4928cf240db54d10f244f206 Mon Sep 17 00:00:00 2001 From: albeu Date: Thu, 14 Feb 2002 13:04:35 +0000 Subject: Audio file demuxer. Extended version for demuxer info. genres.h come from id3edit of servex@servex.yi.org found at http://id3edit.sourceforge.net/ git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4695 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/Makefile | 2 +- libmpdemux/demux_audio.c | 249 ++++++++++++++++++++++++++++++++++++++++++ libmpdemux/demuxer.c | 116 ++++++++------------ libmpdemux/demuxer.h | 3 +- libmpdemux/genres.h | 277 +++++++++++++++++++++++++++++++++++++++++++++++ libmpdemux/mp3_hdr.c | 12 +- 6 files changed, 581 insertions(+), 78 deletions(-) create mode 100644 libmpdemux/demux_audio.c create mode 100644 libmpdemux/genres.h (limited to 'libmpdemux') diff --git a/libmpdemux/Makefile b/libmpdemux/Makefile index 3a05a31a02..af8d03c3c0 100644 --- a/libmpdemux/Makefile +++ b/libmpdemux/Makefile @@ -3,7 +3,7 @@ LIBNAME = libmpdemux.a include ../config.mak -SRCS = mp3_hdr.c video.c mpeg_hdr.c cache2.c asfheader.c aviheader.c aviprint.c aviwrite.c demux_asf.c demux_avi.c demux_mov.c demux_mpg.c demux_viv.c demuxer.c dvdauth.c open.c parse_es.c stream.c tv.c tvi_dummy.c tvi_v4l.c frequencies.c demux_fli.c demux_real.c demux_y4m.c yuv4mpeg.c yuv4mpeg_ratio.c demux_nuv.c demux_film.c demux_roq.c mf.c demux_mf.c +SRCS = mp3_hdr.c video.c mpeg_hdr.c cache2.c asfheader.c aviheader.c aviprint.c aviwrite.c demux_asf.c demux_avi.c demux_mov.c demux_mpg.c demux_viv.c demuxer.c dvdauth.c open.c parse_es.c stream.c tv.c tvi_dummy.c tvi_v4l.c frequencies.c demux_fli.c demux_real.c demux_y4m.c yuv4mpeg.c yuv4mpeg_ratio.c demux_nuv.c demux_film.c demux_roq.c mf.c demux_mf.c demux_audio.c ifeq ($(STREAMING),yes) SRCS += asf_streaming.c url.c http.c network.c rtp.c endif diff --git a/libmpdemux/demux_audio.c b/libmpdemux/demux_audio.c new file mode 100644 index 0000000000..a8c7bfb468 --- /dev/null +++ b/libmpdemux/demux_audio.c @@ -0,0 +1,249 @@ + +#include "config.h" + +#include +#include +#include "stream.h" +#include "demuxer.h" +#include "stheader.h" +#include "genres.h" + +#include +#ifdef MP_DEBUG +#include +#endif + +#define MP3 1 +#define WAV 2 + + +#define HDR_SIZE 4 + +typedef struct da_priv { + int frmt; +} da_priv_t; + +extern int mp_decode_mp3_header(unsigned char* hbuf); +extern void free_sh_audio(sh_audio_t* sh); + + +int demux_audio_open(demuxer_t* demuxer) { + stream_t *s; + sh_audio_t* sh_audio; + uint8_t hdr[HDR_SIZE]; + int st_pos = 0,frmt = 0, n = 0, pos = 0, step; + da_priv_t* priv; +#ifdef MP_DEBUG + assert(demuxer != NULL); + assert(demuxer->stream != NULL); +#endif + + s = demuxer->stream; + + while(n < 5 && ! s->eof) { + st_pos = stream_tell(s); + step = 1; + if(pos < HDR_SIZE) { + stream_read(s,&hdr[pos],HDR_SIZE-pos); + pos = HDR_SIZE; + } + + if( hdr[0] == 'R' && hdr[1] == 'I' && hdr[2] == 'F' && hdr[3] == 'F' ) { + stream_skip(s,4); + if(s->eof) + break; + stream_read(s,hdr,4); + if(s->eof) + break; + if(hdr[0] != 'W' || hdr[1] != 'A' || hdr[2] != 'V' || hdr[3] != 'E' ) + stream_skip(s,-8); + else + // We found wav header. Now we can have 'fmt ' or a mp3 header + // empty the buffer + step = 4; + } else if( hdr[0] == 'f' && hdr[1] == 'm' && hdr[2] == 't' && hdr[3] == ' ' ) { + frmt = WAV; + break; + } else if(mp_decode_mp3_header(hdr) > 0) { + frmt = MP3; + break; + } + // Add here some other audio format detection + if(step < HDR_SIZE) + memmove(hdr,&hdr[step],HDR_SIZE-step); + pos -= step; + } + + if(!frmt) + return 0; + + sh_audio = new_sh_audio(demuxer,0); + + switch(frmt) { + case MP3: + sh_audio->format = 0x55; + stream_seek(s,st_pos); + demuxer->movi_start = st_pos; + if(s->end_pos) { + char tag[4]; + stream_seek(s,s->end_pos-128); + stream_read(s,tag,3); + tag[3] = '\0'; + if(strcmp(tag,"TAG")) + demuxer->movi_end = s->end_pos; + else { + char buf[31]; + uint8_t g; + demuxer->movi_end = stream_tell(s)-3; + stream_read(s,buf,30); + buf[30] = '\0'; + demux_info_add(demuxer,"Title",buf); + stream_read(s,buf,30); + buf[30] = '\0'; + demux_info_add(demuxer,"Artist",buf); + stream_read(s,buf,30); + buf[30] = '\0'; + demux_info_add(demuxer,"Album",buf); + stream_read(s,buf,4); + buf[5] = '\0'; + demux_info_add(demuxer,"Year",buf); + stream_read(s,buf,30); + buf[30] = '\0'; + demux_info_add(demuxer,"Comment",buf); + if(buf[28] == 0 && buf[29] != 0) { + uint8_t trk = (uint8_t)buf[29]; + sprintf(buf,"%d",trk); + demux_info_add(demuxer,"Track",buf); + } + g = stream_read_char(s); + demux_info_add(demuxer,"Genre",genres[g]); + } + } + break; + case WAV: { + WAVEFORMATEX* w; + int l; + sh_audio->wf = w = (WAVEFORMATEX*)malloc(sizeof(WAVEFORMATEX)); + l = stream_read_dword_le(s); + if(l < 16) { + printf("Bad wav header length : too short !!!\n"); + free_sh_audio(sh_audio); + return 0; + } + w->wFormatTag = sh_audio->format = stream_read_word_le(s); + w->nChannels = sh_audio->channels = stream_read_word_le(s); + w->nSamplesPerSec = sh_audio->samplerate = stream_read_dword_le(s); + w->nAvgBytesPerSec = stream_read_dword_le(s); + w->nBlockAlign = stream_read_word_le(s); + w->wBitsPerSample = sh_audio->samplesize = stream_read_word_le(s); + w->cbSize = 0; + l -= 16; + if(l) + stream_skip(s,l); + demuxer->movi_start = stream_tell(s); + demuxer->movi_end = s->end_pos; + } break; + } + + priv = (da_priv_t*)malloc(sizeof(da_priv_t)); + priv->frmt = frmt; + demuxer->priv = priv; + demuxer->movi_start = st_pos; + demuxer->audio->id = 0; + demuxer->audio->sh = sh_audio; + sh_audio->ds = demuxer->audio; + + if(stream_tell(s) != demuxer->movi_start) + stream_seek(s,demuxer->movi_start); + + return 1; +} + + +int demux_audio_fill_buffer(demux_stream_t *ds) { + sh_audio_t* sh_audio; + demuxer_t* demux; + da_priv_t* priv; + stream_t* s; +#ifdef MP_DEBUG + assert(ds != NULL); + assert(ds->sh != NULL); + assert(ds->demuxer != NULL); +#endif + sh_audio = ds->sh; + demux = ds->demuxer; + priv = demux->priv; + s = demux->stream; + + if(s->eof || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) + return 0; + + switch(priv->frmt) { + case MP3 : + while(! s->eof || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) { + uint8_t hdr[4]; + int len; + stream_read(s,hdr,4); + len = mp_decode_mp3_header(hdr); + if(len < 0) { + stream_skip(s,-3); + } else { + demux_packet_t* dp; + if(s->eof || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) + return 0; + dp = new_demux_packet(len); + memcpy(dp->buffer,hdr,4); + stream_read(s,dp->buffer + 4,len-4); + ds_add_packet(ds,dp); + return 1; + } + } + case WAV : { + int l = sh_audio->wf->nAvgBytesPerSec; + demux_packet_t* dp = new_demux_packet(l); + stream_read(s,dp->buffer,l); + ds_add_packet(ds,dp); + return 1; + } + default: + printf("Audio demuxer : unknow format %d\n",priv->frmt); + } + + + return 0; +} + +void demux_audio_seek(demuxer_t *demuxer,float rel_seek_secs,int flags){ + sh_audio_t* sh_audio; + stream_t* s; + int base,pos; + float len; + da_priv_t* priv; + + sh_audio = demuxer->audio->sh; + s = demuxer->stream; + priv = demuxer->priv; + + base = flags&1 ? demuxer->movi_start : stream_tell(s) ; + len = (demuxer->movi_end && flags&2) ? (demuxer->movi_end - demuxer->movi_start)*rel_seek_secs : rel_seek_secs; + + pos = base+(len*sh_audio->i_bps); + + if(demuxer->movi_end && pos >= demuxer->movi_end) { + sh_audio->timer = (stream_tell(s) - demuxer->movi_start)/sh_audio->i_bps; + return; + } else if(pos < demuxer->movi_start) + pos = demuxer->movi_start; + + + sh_audio->timer = flags&1 ? rel_seek_secs : (pos-demuxer->movi_start)/sh_audio->i_bps; + + switch(priv->frmt) { + case WAV: + pos += (pos % (sh_audio->channels * sh_audio->samplesize) ); + break; + } + + stream_seek(s,pos); + +} diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 89fecbc265..dc482511e3 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -125,6 +125,11 @@ void free_demuxer(demuxer_t *demuxer){ // free demuxers: free_demuxer_stream(demuxer->audio); free_demuxer_stream(demuxer->video); + if(demuxer->info) { + for(i=0;demuxer->info[i] != NULL; i++) + free(demuxer->info[i]); + free(demuxer->info); + } free(demuxer); } @@ -186,6 +191,7 @@ extern int demux_tv_fill_buffer(demuxer_t *demux, tvi_handle_t *tvh); extern int demux_open_tv(demuxer_t *demuxer, tvi_handle_t *tvh); #endif int demux_y4m_fill_buffer(demuxer_t *demux); +int demux_audio_fill_buffer(demux_stream_t *ds); int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){ // Note: parameter 'ds' can be NULL! @@ -209,6 +215,7 @@ int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){ case DEMUXER_TYPE_TV: return demux_tv_fill_buffer(demux, tv_handler); #endif case DEMUXER_TYPE_Y4M: return demux_y4m_fill_buffer(demux); + case DEMUXER_TYPE_AUDIO: return demux_audio_fill_buffer(ds); } return 0; } @@ -398,6 +405,7 @@ extern void demux_open_real(demuxer_t *demuxer); extern int nuv_check_file(demuxer_t *demuxer); extern void demux_open_nuv(demuxer_t *demuxer); +extern int demux_audio_open(demuxer_t* demuxer); demuxer_t* demux_open(stream_t *stream,int file_format,int audio_id,int video_id,int dvdsub_id){ @@ -535,6 +543,15 @@ if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_ROQ){ } else free_demuxer(demuxer); } +//=============== Try to open as audio file: ================= +if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_AUDIO){ + demuxer=new_demuxer(stream,DEMUXER_TYPE_AUDIO,audio_id,video_id,dvdsub_id); + if(demux_audio_open(demuxer)){ + mp_msg(MSGT_DEMUXER,MSGL_INFO,"Detected audio file\n"); + file_format=DEMUXER_TYPE_AUDIO; + } else + free_demuxer(demuxer); +} //=============== Try to open as MPEG-PS file: ================= if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MPEG_PS){ int pes=1; @@ -749,6 +766,7 @@ int demux_seek_fli(demuxer_t *demuxer,float rel_seek_secs,int flags); int demux_seek_mf(demuxer_t *demuxer,float rel_seek_secs,int flags); int demux_seek_nuv(demuxer_t *demuxer,float rel_seek_secs,int flags); void demux_seek_mov(demuxer_t *demuxer,float pts,int flags); +extern void demux_audio_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); int demux_seek(demuxer_t *demuxer,float rel_seek_secs,int flags){ demux_stream_t *d_audio=demuxer->audio; @@ -808,6 +826,8 @@ switch(demuxer->file_format){ demux_seek_fli(demuxer,rel_seek_secs,flags); break; case DEMUXER_TYPE_NUV: demux_seek_nuv(demuxer,rel_seek_secs,flags); break; + case DEMUXER_TYPE_AUDIO: + demux_audio_seek(demuxer,rel_seek_secs,flags); break; } // switch(demuxer->file_format) @@ -817,86 +837,38 @@ return 1; int demux_info_add(demuxer_t *demuxer, char *opt, char *param) { - demuxer_info_t *info = &demuxer->info; - - if (!strcasecmp(opt, "name")) - { - if (info->name) - { - mp_msg(MSGT_DEMUX, MSGL_WARN, "Demuxer info->name already present\n!"); - return(0); - } - info->name = strdup(param); - return(1); - } - - if (!strcasecmp(opt, "author")) - { - if (info->author) - { - mp_msg(MSGT_DEMUX, MSGL_WARN, "Demuxer info->author already present\n!"); - return(0); - } - info->author = strdup(param); - return(1); - } - - if (!strcasecmp(opt, "encoder") || !strcasecmp(opt, "software")) - { - if (info->encoder) - { - mp_msg(MSGT_DEMUX, MSGL_WARN, "Demuxer info->encoder already present\n!"); - return(0); - } - info->encoder = strdup(param); - return(1); - } + char **info = demuxer->info; + int n = 0; - if (!strcasecmp(opt, "comment") || !strcasecmp(opt, "comments")) - { - if (info->comments) - { - mp_msg(MSGT_DEMUX, MSGL_WARN, "Demuxer info->comments already present\n!"); - return(0); - } - info->comments = strdup(param); - return(1); - } - if (!strcasecmp(opt, "copyright")) - { - if (info->copyright) - { - mp_msg(MSGT_DEMUX, MSGL_WARN, "Demuxer info->copyright already present\n!"); - return(0); - } - info->copyright = strdup(param); - return(1); - } + for(n = 0; info && info[2*n] != NULL; n++) + { + if(!strcasecmp(opt,info[2*n])) + { + mp_msg(MSGT_DEMUX, MSGL_WARN, "Demuxer info %s already present\n!",opt); + return 0; + } + } + + info = demuxer->info = (char**)realloc(info,(2*(n+2))*sizeof(char*)); + info[2*n] = strdup(opt); + info[2*n+1] = strdup(param); + memset(&info[2*(n+1)],0,2*sizeof(char*)); - mp_msg(MSGT_DEMUX, MSGL_DBG2, "Unknown demuxer info->%s (=%s)!\n", - opt, param); - return(1); + return 1; } int demux_info_print(demuxer_t *demuxer) { - demuxer_info_t *info = &demuxer->info; + char **info = demuxer->info; + int n; - if (info->name || info->author || info->encoder || info->comments || info->copyright) - { - mp_msg(MSGT_DEMUX, MSGL_INFO, "Clip info: \n"); - if (info->name) - mp_msg(MSGT_DEMUX, MSGL_INFO, " Name: %s\n", info->name); - if (info->author) - mp_msg(MSGT_DEMUX, MSGL_INFO, " Author: %s\n", info->author); - if (info->copyright) - mp_msg(MSGT_DEMUX, MSGL_INFO, " Copyright: %s\n", info->copyright); - if (info->comments) - mp_msg(MSGT_DEMUX, MSGL_INFO, " Comments: %s\n", info->comments); - if (info->encoder) - mp_msg(MSGT_DEMUX, MSGL_INFO, " Encoder: %s\n", info->encoder); - } + if(!info) + return 0; + + mp_msg(MSGT_DEMUX, MSGL_INFO, "Clip info: \n"); + for(n = 0; info[2*n] != NULL ; n++) + mp_msg(MSGT_DEMUX, MSGL_INFO, " %s: %s\n",info[2*n],info[2*n+1]); return 0; } diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index b9389f7704..f50d93dfe3 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -19,6 +19,7 @@ #define DEMUXER_TYPE_FILM 14 #define DEMUXER_TYPE_ROQ 15 #define DEMUXER_TYPE_MF 16 +#define DEMUXER_TYPE_AUDIO 17 #define DEMUXER_TIME_NONE 0 #define DEMUXER_TIME_PTS 1 @@ -94,7 +95,7 @@ typedef struct demuxer_st { char s_streams[32]; // dvd subtitles (flag) void* priv; // fileformat-dependent data - demuxer_info_t info; + char** info; } demuxer_t; inline static demux_packet_t* new_demux_packet(int len){ diff --git a/libmpdemux/genres.h b/libmpdemux/genres.h new file mode 100644 index 0000000000..4029475451 --- /dev/null +++ b/libmpdemux/genres.h @@ -0,0 +1,277 @@ +/*********************************** + * Copyright (C) 2001 Jason Carter + * See the file "LICENSE" for details + *********************************** + * FILE: GENRES.H + * NAME: ID3EDIT - ID3 tag v 1.1 editor + * DESCRIPTION: Genres character array + * AUTHOR: Jason Carter + *********************************** + */ + + +#ifndef _GENRES_H +#define _GENRES_H + + +char *genres[] = { +"Blues", /* 0 */ +"Classic Rock", /* 1 */ +"Country", /* 2 */ +"Dance", /* 3 */ +"Disco", /* 4 */ +"Funk", /* 5 */ +"Grunge", /* 6 */ +"Hip-Hop", /* 7 */ +"Jazz", /* 8 */ +"Metal", /* 9 */ +"New Age", /* 10 */ +"Oldies", /* 11 */ +"Other", /* 12 */ +"Pop", /* 13 */ +"R&B", /* 14 */ +"Rap", /* 15 */ +"Reggae", /* 16 */ +"Rock", /* 17 */ +"Techno", /* 18 */ +"Industrial", /* 19 */ +"Alternative", /* 20 */ +"Ska", /* 21 */ +"Death Metal", /* 22 */ +"Pranks", /* 23 */ +"Soundtrack", /* 24 */ +"Eurotechno", /* 25 */ +"Ambient", /* 26 */ +"Trip-Hop", /* 27 */ +"Vocal", /* 28 */ +"Jazz+Funk", /* 29 */ +"Fusion", /* 30 */ +"Trance", /* 31 */ +"Classical", /* 32 */ +"Instrumental", /* 33 */ +"Acid", /* 34 */ +"House", /* 35 */ +"Game", /* 36 */ +"Sound Clip", /* 37 */ +"Gospel", /* 38 */ +"Noise", /* 39 */ +"Alternative Rock", /* 40 */ +"Bass", /* 41 */ +"Soul", /* 42 */ +"Punk", /* 43 */ +"Space", /* 44 */ +"Meditative", /* 45 */ +"Instrumental Pop", /* 46 */ +"Instrumental Rock", /* 47 */ +"Ethnic", /* 48 */ +"Gothic", /* 49 */ +"Darkwave", /* 50 */ +"Techno-Industrial", /* 51 */ +"Electronic", /* 52 */ +"Jungle", /* 53 */ +"Pop-Folk", /* 54 */ +"Eurodance", /* 55 */ +"Dream", /* 56 */ +"Southern Rock", /* 57 */ +"Comedy", /* 58 */ +"Cult", /* 59 */ +"Gangsta", /* 60 */ +"Top 40", /* 61 */ +"Christian Rap", /* 62 */ +"Pop/Funk", /* 63 */ +"Native American", /* 64 */ +"Cabaret", /* 65 */ +"New Wave", /* 66 */ +"Psychadelic", /* 67 */ +"Rave", /* 68 */ +"Show Tunes", /* 69 */ +"Trailer", /* 70 */ +"Lo-Fi", /* 71 */ +"Tribal", /* 72 */ +"Acid Punk", /* 73 */ +"Acid Jazz", /* 74 */ +"Polka", /* 75 */ +"Retro", /* 76 */ +"Musical", /* 77 */ +"Rock & Roll", /* 78 */ +"Hard Rock", /* 79 */ +"Folk", /* 80 */ +"Folk/Rock", /* 81 */ +"National Folk", /* 82 */ +"Swing", /* 83 */ +"Fast-Fusion", /* 84 */ +"Bebop", /* 85 */ +"Latin", /* 86 */ +"Revival", /* 87 */ +"Celtic", /* 88 */ +"Bluegrass", /* 89 */ +"Avantgarde", /* 90 */ +"Gothic Rock", /* 91 */ +"Progressive Rock", /* 92 */ +"Psychedelic Rock", /* 93 */ +"Symphonic Rock", /* 94 */ +"Slow Rock", /* 95 */ +"Big Band", /* 96 */ +"Chorus", /* 97 */ +"Easy Listening", /* 98 */ +"Acoustic", /* 99 */ +"Humour", /* 100 */ +"Speech", /* 101 */ +"Chanson", /* 102 */ +"Opera", /* 103 */ +"Chamber Music", /* 104 */ +"Sonata", /* 105 */ +"Symphony", /* 106 */ +"Booty Bass", /* 107 */ +"Primus", /* 108 */ +"Porn Groove", /* 109 */ +"Satire", /* 110 */ +"Slow Jam", /* 111 */ +"Club", /* 112 */ +"Tango", /* 113 */ +"Samba", /* 114 */ +"Folklore", /* 115 */ +"Ballad", /* 116 */ +"Power Ballad", /* 117 */ +"Rhytmic Soul", /* 118 */ +"Freestyle", /* 119 */ +"Duet", /* 120 */ +"Punk Rock", /* 121 */ +"Drum Solo", /* 122 */ +"Acapella", /* 123 */ +"Euro-House", /* 124 */ +"Dance Hall", /* 125 */ +"Goa", /* 126 */ +"Drum & Bass", /* 127 */ +"Club-House", /* 128 */ +"Hardcore", /* 129 */ +"Terror", /* 130 */ +"Indie", /* 131 */ +"BritPop", /* 132 */ +"Negerpunk", /* 133 */ +"Polsk Punk", /* 134 */ +"Beat", /* 135 */ +"Christian Gangsta Rap", /* 136 */ +"Heavy Metal", /* 137 */ +"Black Metal", /* 138 */ +"Crossover", /* 139 */ +"Contemporary Christian", /* 140 */ +"Christian Rock", /* 141 */ +"Unknown", /* 142 */ +"Unknown", /* 143 */ +"Unknown", /* 144 */ +"Unknown", /* 145 */ +"Unknown", /* 146 */ +"Unknown", /* 147 */ +"Unknown", /* 148 */ +"Unknown", /* 149 */ +"Unknown", /* 150 */ +"Unknown", /* 151 */ +"Unknown", /* 152 */ +"Unknown", /* 153 */ +"Unknown", /* 154 */ +"Unknown", /* 155 */ +"Unknown", /* 156 */ +"Unknown", /* 157 */ +"Unknown", /* 158 */ +"Unknown", /* 159 */ +"Unknown", /* 160 */ +"Unknown", /* 161 */ +"Unknown", /* 162 */ +"Unknown", /* 163 */ +"Unknown", /* 164 */ +"Unknown", /* 165 */ +"Unknown", /* 166 */ +"Unknown", /* 167 */ +"Unknown", /* 168 */ +"Unknown", /* 169 */ +"Unknown", /* 170 */ +"Unknown", /* 171 */ +"Unknown", /* 172 */ +"Unknown", /* 173 */ +"Unknown", /* 174 */ +"Unknown", /* 175 */ +"Unknown", /* 176 */ +"Unknown", /* 177 */ +"Unknown", /* 178 */ +"Unknown", /* 179 */ +"Unknown", /* 180 */ +"Unknown", /* 181 */ +"Unknown", /* 182 */ +"Unknown", /* 183 */ +"Unknown", /* 184 */ +"Unknown", /* 185 */ +"Unknown", /* 186 */ +"Unknown", /* 187 */ +"Unknown", /* 188 */ +"Unknown", /* 189 */ +"Unknown", /* 190 */ +"Unknown", /* 191 */ +"Unknown", /* 192 */ +"Unknown", /* 193 */ +"Unknown", /* 194 */ +"Unknown", /* 195 */ +"Unknown", /* 196 */ +"Unknown", /* 197 */ +"Unknown", /* 198 */ +"Unknown", /* 199 */ +"Unknown", /* 200 */ +"Unknown", /* 201 */ +"Unknown", /* 202 */ +"Unknown", /* 203 */ +"Unknown", /* 204 */ +"Unknown", /* 205 */ +"Unknown", /* 206 */ +"Unknown", /* 207 */ +"Unknown", /* 208 */ +"Unknown", /* 209 */ +"Unknown", /* 210 */ +"Unknown", /* 211 */ +"Unknown", /* 212 */ +"Unknown", /* 213 */ +"Unknown", /* 214 */ +"Unknown", /* 215 */ +"Unknown", /* 216 */ +"Unknown", /* 217 */ +"Unknown", /* 218 */ +"Unknown", /* 219 */ +"Unknown", /* 220 */ +"Unknown", /* 221 */ +"Unknown", /* 222 */ +"Unknown", /* 223 */ +"Unknown", /* 224 */ +"Unknown", /* 225 */ +"Unknown", /* 226 */ +"Unknown", /* 227 */ +"Unknown", /* 228 */ +"Unknown", /* 229 */ +"Unknown", /* 230 */ +"Unknown", /* 231 */ +"Unknown", /* 232 */ +"Unknown", /* 233 */ +"Unknown", /* 234 */ +"Unknown", /* 235 */ +"Unknown", /* 236 */ +"Unknown", /* 237 */ +"Unknown", /* 238 */ +"Unknown", /* 239 */ +"Unknown", /* 240 */ +"Unknown", /* 241 */ +"Unknown", /* 242 */ +"Unknown", /* 243 */ +"Unknown", /* 244 */ +"Unknown", /* 245 */ +"Unknown", /* 246 */ +"Unknown", /* 247 */ +"Unknown", /* 248 */ +"Unknown", /* 249 */ +"Unknown", /* 250 */ +"Unknown", /* 251 */ +"Unknown", /* 252 */ +"Unknown", /* 253 */ +"Unknown", /* 254 */ +"Unknown", /* 255 */ +}; + + +#endif /* _GENRES_H */ diff --git a/libmpdemux/mp3_hdr.c b/libmpdemux/mp3_hdr.c index 180c0c6cc3..b2ac948b5b 100644 --- a/libmpdemux/mp3_hdr.c +++ b/libmpdemux/mp3_hdr.c @@ -1,6 +1,7 @@ #include #include "config.h" +#include "../mp_msg.h" //----------------------- mp3 audio frame header parser ----------------------- @@ -32,12 +33,15 @@ int mp_decode_mp3_header(unsigned char* hbuf){ // head_check: if( (newhead & 0xffe00000) != 0xffe00000 || (newhead & 0x0000fc00) == 0x0000fc00){ - printf("head_check failed\n"); + mp_msg(MSGT_DEMUXER,MSGL_DBG2,"head_check failed\n"); return -1; } #endif - if((4-((newhead>>17)&3))!=3){ printf("not layer-3\n"); return -1;} + if((4-((newhead>>17)&3))!=3){ + mp_msg(MSGT_DEMUXER,MSGL_DBG2,"not layer-3\n"); + return -1; + } if( newhead & ((long)1<<20) ) { lsf = (newhead & ((long)1<<19)) ? 0x0 : 0x1; @@ -53,7 +57,7 @@ int mp_decode_mp3_header(unsigned char* hbuf){ sampling_frequency = ((newhead>>10)&0x3) + (lsf*3); if(sampling_frequency>8){ - printf("invalid sampling_frequency\n"); + mp_msg(MSGT_DEMUXER,MSGL_DBG2,"invalid sampling_frequency\n"); return -1; // valid: 0..8 } @@ -70,7 +74,7 @@ int mp_decode_mp3_header(unsigned char* hbuf){ stereo = ( (((newhead>>6)&0x3)) == 3) ? 1 : 2; if(!bitrate_index){ - fprintf(stderr,"Free format not supported.\n"); + mp_msg(MSGT_DEMUXER,MSGL_DBG2,"Free format not supported.\n"); return -1; } -- cgit v1.2.3