1 //========================================================================= 2 // FILENAME : tagutils-mp3.h 3 // DESCRIPTION : MP3 metadata reader 4 //========================================================================= 5 // Copyright (c) 2008- NETGEAR, Inc. All Rights Reserved. 6 //========================================================================= 7 8 /* 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program. If not, see <http://www.gnu.org/licenses/>. 21 */ 22 23 24 struct mp3_frameinfo { 25 int layer; // 1,2,3 26 int bitrate; // unit=kbps 27 int samplerate; // samp/sec 28 int stereo; // flag 29 30 int frame_length; // bytes 31 int crc_protected; // flag 32 int samples_per_frame; // calculated 33 int padding; // flag 34 int xing_offset; // for xing hdr 35 int number_of_frames; 36 37 int frame_offset; 38 39 short mpeg_version; 40 short id3_version; 41 42 int is_valid; 43 }; 44 45 static int _get_mp3tags(char *file, struct song_metadata *psong); 46 static int _get_mp3fileinfo(char *file, struct song_metadata *psong); 47 static int _decode_mp3_frame(unsigned char *frame, struct mp3_frameinfo *pfi); 48 49 // bitrate_tbl[layer_index][bitrate_index] 50 static int bitrate_tbl[5][16] = { 51 { 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 0 }, /* MPEG1, L1 */ 52 { 0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 0 }, /* MPEG1, L2 */ 53 { 0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0 }, /* MPEG1, L3 */ 54 { 0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0 }, /* MPEG2/2.5, L1 */ 55 { 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0 } /* MPEG2/2.5, L2/L3 */ 56 }; 57 58 // sample_rate[sample_index][samplerate_index] 59 static int sample_rate_tbl[3][4] = { 60 { 44100, 48000, 32000, 0 }, /* MPEG 1 */ 61 { 22050, 24000, 16000, 0 }, /* MPEG 2 */ 62 { 11025, 12000, 8000, 0 } /* MPEG 2.5 */ 63 }; 64