[93] | 1 | //meta.c: |
---|
| 2 | |
---|
[690] | 3 | /* |
---|
[3811] | 4 | * Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008-2010 |
---|
[690] | 5 | * |
---|
| 6 | * This file is part of libroar a part of RoarAudio, |
---|
| 7 | * a cross-platform sound system for both, home and professional use. |
---|
| 8 | * See README for details. |
---|
| 9 | * |
---|
| 10 | * This file is free software; you can redistribute it and/or modify |
---|
| 11 | * it under the terms of the GNU General Public License version 3 |
---|
| 12 | * as published by the Free Software Foundation. |
---|
| 13 | * |
---|
| 14 | * libroar 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 software; see the file COPYING. If not, write to |
---|
[3517] | 21 | * the Free Software Foundation, 51 Franklin Street, Fifth Floor, |
---|
| 22 | * Boston, MA 02110-1301, USA. |
---|
[690] | 23 | * |
---|
| 24 | * NOTE for everyone want's to change something and send patches: |
---|
| 25 | * read README and HACKING! There a addition information on |
---|
| 26 | * the license of this document you need to read before you send |
---|
| 27 | * any patches. |
---|
| 28 | * |
---|
| 29 | * NOTE for uses of non-GPL (LGPL,...) software using libesd, libartsc |
---|
| 30 | * or libpulse*: |
---|
| 31 | * The libs libroaresd, libroararts and libroarpulse link this lib |
---|
| 32 | * and are therefore GPL. Because of this it may be illigal to use |
---|
| 33 | * them with any software that uses libesd, libartsc or libpulse*. |
---|
| 34 | */ |
---|
| 35 | |
---|
[93] | 36 | #include "libroar.h" |
---|
| 37 | |
---|
[110] | 38 | /* |
---|
| 39 | |
---|
| 40 | grep ^'#define ROAR_META_TYPE_' meta.h | cut -d' ' -f2 | while read line; do printf ' {%-30s "%-16s},\n' $line, $(echo $line | cut -d_ -f4)\"; done |
---|
| 41 | |
---|
| 42 | */ |
---|
| 43 | |
---|
| 44 | struct { |
---|
| 45 | int id; |
---|
| 46 | char * name; |
---|
| 47 | } _libroar_meta_typelist[] = { |
---|
| 48 | {ROAR_META_TYPE_NONE, "NONE" }, |
---|
| 49 | {ROAR_META_TYPE_TITLE, "TITLE" }, |
---|
| 50 | {ROAR_META_TYPE_ALBUM, "ALBUM" }, |
---|
[2328] | 51 | {ROAR_META_TYPE_AUTHOR, "AUTHOR" }, |
---|
[110] | 52 | {ROAR_META_TYPE_AUTOR, "AUTOR" }, |
---|
| 53 | {ROAR_META_TYPE_ARTIST, "ARTIST" }, |
---|
| 54 | {ROAR_META_TYPE_VERSION, "VERSION" }, |
---|
| 55 | {ROAR_META_TYPE_DATE, "DATE" }, |
---|
| 56 | {ROAR_META_TYPE_LICENSE, "LICENSE" }, |
---|
| 57 | {ROAR_META_TYPE_TRACKNUMBER, "TRACKNUMBER" }, |
---|
| 58 | {ROAR_META_TYPE_ORGANIZATION, "ORGANIZATION" }, |
---|
| 59 | {ROAR_META_TYPE_DESCRIPTION, "DESCRIPTION" }, |
---|
| 60 | {ROAR_META_TYPE_GENRE, "GENRE" }, |
---|
| 61 | {ROAR_META_TYPE_LOCATION, "LOCATION" }, |
---|
| 62 | {ROAR_META_TYPE_CONTACT, "CONTACT" }, |
---|
| 63 | {ROAR_META_TYPE_STREAMURL, "STREAMURL" }, |
---|
| 64 | {ROAR_META_TYPE_HOMEPAGE, "HOMEPAGE" }, |
---|
| 65 | {ROAR_META_TYPE_THUMBNAIL, "THUMBNAIL" }, |
---|
| 66 | {ROAR_META_TYPE_LENGTH, "LENGTH" }, |
---|
| 67 | {ROAR_META_TYPE_COMMENT, "COMMENT" }, |
---|
| 68 | {ROAR_META_TYPE_OTHER, "OTHER" }, |
---|
| 69 | {ROAR_META_TYPE_FILENAME, "FILENAME" }, |
---|
| 70 | {ROAR_META_TYPE_FILEURL, "FILEURL" }, |
---|
[123] | 71 | {ROAR_META_TYPE_SERVER, "SERVER" }, |
---|
[138] | 72 | {ROAR_META_TYPE_DURATION, "DURATION" }, |
---|
| 73 | {ROAR_META_TYPE_WWW, "WWW" }, |
---|
| 74 | {ROAR_META_TYPE_WOAF, "WOAF" }, |
---|
[141] | 75 | {ROAR_META_TYPE_ENCODER, "ENCODER" }, |
---|
[236] | 76 | {ROAR_META_TYPE_ENCODEDBY, "ENCODEDBY" }, |
---|
[877] | 77 | {ROAR_META_TYPE_YEAR, "YEAR" }, |
---|
[878] | 78 | {ROAR_META_TYPE_DISCID, "DISCID" }, |
---|
[877] | 79 | {ROAR_META_TYPE_RPG_TRACK_PEAK, "REPLAYGAIN_TRACK_PEAK" }, |
---|
| 80 | {ROAR_META_TYPE_RPG_TRACK_GAIN, "REPLAYGAIN_TRACK_GAIN" }, |
---|
| 81 | {ROAR_META_TYPE_RPG_ALBUM_PEAK, "REPLAYGAIN_ALBUM_PEAK" }, |
---|
| 82 | {ROAR_META_TYPE_RPG_ALBUM_GAIN, "REPLAYGAIN_ALBUM_GAIN" }, |
---|
[2263] | 83 | {ROAR_META_TYPE_HASH, "HASH" }, |
---|
[3044] | 84 | {ROAR_META_TYPE_SIGNALINFO, "SIGNALINFO" }, |
---|
| 85 | {ROAR_META_TYPE_AUDIOINFO, "AUDIOINFO" }, |
---|
| 86 | {ROAR_META_TYPE_OFFSET, "OFFSET" }, |
---|
[3074] | 87 | {ROAR_META_TYPE_PERFORMER, "PERFORMER" }, |
---|
| 88 | {ROAR_META_TYPE_COPYRIGHT, "COPYRIGHT" }, |
---|
[110] | 89 | |
---|
| 90 | {-1, "EOL"} |
---|
| 91 | }; |
---|
| 92 | |
---|
[3051] | 93 | |
---|
| 94 | struct { |
---|
| 95 | int id; |
---|
| 96 | char * name; |
---|
| 97 | } _libroar_meta_genrelist[] = { |
---|
[3052] | 98 | {ROAR_META_GENRE_RDS_EU_NONE, "rds_eu_none"}, |
---|
| 99 | {ROAR_META_GENRE_RDS_EU_NONE, "none"}, |
---|
| 100 | {ROAR_META_GENRE_RDS_EU_NEWS, "rds_eu_news"}, |
---|
| 101 | {ROAR_META_GENRE_RDS_EU_NEWS, "news"}, |
---|
| 102 | {ROAR_META_GENRE_RDS_EU_CURRENT_AFFAIRS, "rds_eu_current_affairs"}, |
---|
| 103 | {ROAR_META_GENRE_RDS_EU_CURRENT_AFFAIRS, "current affairs"}, |
---|
| 104 | {ROAR_META_GENRE_RDS_EU_INFORMATION, "rds_eu_information"}, |
---|
| 105 | {ROAR_META_GENRE_RDS_EU_INFORMATION, "information"}, |
---|
| 106 | {ROAR_META_GENRE_RDS_EU_SPORT, "rds_eu_sport"}, |
---|
| 107 | {ROAR_META_GENRE_RDS_EU_SPORT, "sport"}, |
---|
| 108 | {ROAR_META_GENRE_RDS_EU_EDUCATION, "rds_eu_education"}, |
---|
| 109 | {ROAR_META_GENRE_RDS_EU_EDUCATION, "education"}, |
---|
| 110 | {ROAR_META_GENRE_RDS_EU_DRAMA, "rds_eu_drama"}, |
---|
| 111 | {ROAR_META_GENRE_RDS_EU_DRAMA, "drama"}, |
---|
| 112 | {ROAR_META_GENRE_RDS_EU_CULTURE, "rds_eu_culture"}, |
---|
| 113 | {ROAR_META_GENRE_RDS_EU_CULTURE, "culture"}, |
---|
| 114 | {ROAR_META_GENRE_RDS_EU_SCIENCE, "rds_eu_science"}, |
---|
| 115 | {ROAR_META_GENRE_RDS_EU_SCIENCE, "science"}, |
---|
| 116 | {ROAR_META_GENRE_RDS_EU_VARIED, "rds_eu_varied"}, |
---|
| 117 | {ROAR_META_GENRE_RDS_EU_VARIED, "varied"}, |
---|
| 118 | {ROAR_META_GENRE_RDS_EU_POP_MUSIC, "rds_eu_pop_music"}, |
---|
| 119 | {ROAR_META_GENRE_RDS_EU_POP_MUSIC, "pop music"}, |
---|
| 120 | {ROAR_META_GENRE_RDS_EU_ROCK_MUSIC, "rds_eu_rock_music"}, |
---|
| 121 | {ROAR_META_GENRE_RDS_EU_ROCK_MUSIC, "rock music"}, |
---|
| 122 | {ROAR_META_GENRE_RDS_EU_EASY_LISTENING, "rds_eu_easy_listening"}, |
---|
| 123 | {ROAR_META_GENRE_RDS_EU_EASY_LISTENING, "easy listening"}, |
---|
| 124 | {ROAR_META_GENRE_RDS_EU_LIGHT_CLASSICAL, "rds_eu_light_classical"}, |
---|
| 125 | {ROAR_META_GENRE_RDS_EU_LIGHT_CLASSICAL, "light classical"}, |
---|
| 126 | {ROAR_META_GENRE_RDS_EU_SERIOUS_CLASSICAL, "rds_eu_serious_classical"}, |
---|
| 127 | {ROAR_META_GENRE_RDS_EU_SERIOUS_CLASSICAL, "serious classical"}, |
---|
| 128 | {ROAR_META_GENRE_RDS_EU_OTHER_MUSIC, "rds_eu_other_music"}, |
---|
| 129 | {ROAR_META_GENRE_RDS_EU_OTHER_MUSIC, "other music"}, |
---|
| 130 | {ROAR_META_GENRE_RDS_EU_WEATHER, "rds_eu_weather"}, |
---|
| 131 | {ROAR_META_GENRE_RDS_EU_WEATHER, "weather"}, |
---|
| 132 | {ROAR_META_GENRE_RDS_EU_FINANCE, "rds_eu_finance"}, |
---|
| 133 | {ROAR_META_GENRE_RDS_EU_FINANCE, "finance"}, |
---|
| 134 | {ROAR_META_GENRE_RDS_EU_CHILDREN_S_PROGRAMMES, "rds_eu_children_s_programmes"}, |
---|
| 135 | {ROAR_META_GENRE_RDS_EU_CHILDREN_S_PROGRAMMES, "children s programmes"}, |
---|
| 136 | {ROAR_META_GENRE_RDS_EU_SOCIAL_AFFAIRS, "rds_eu_social_affairs"}, |
---|
| 137 | {ROAR_META_GENRE_RDS_EU_SOCIAL_AFFAIRS, "social affairs"}, |
---|
| 138 | {ROAR_META_GENRE_RDS_EU_RELIGION, "rds_eu_religion"}, |
---|
| 139 | {ROAR_META_GENRE_RDS_EU_RELIGION, "religion"}, |
---|
| 140 | {ROAR_META_GENRE_RDS_EU_PHONE_IN, "rds_eu_phone_in"}, |
---|
| 141 | {ROAR_META_GENRE_RDS_EU_PHONE_IN, "phone in"}, |
---|
| 142 | {ROAR_META_GENRE_RDS_EU_TRAVEL, "rds_eu_travel"}, |
---|
| 143 | {ROAR_META_GENRE_RDS_EU_TRAVEL, "travel"}, |
---|
| 144 | {ROAR_META_GENRE_RDS_EU_LEISURE, "rds_eu_leisure"}, |
---|
| 145 | {ROAR_META_GENRE_RDS_EU_LEISURE, "leisure"}, |
---|
| 146 | {ROAR_META_GENRE_RDS_EU_JAZZ_MUSIC, "rds_eu_jazz_music"}, |
---|
| 147 | {ROAR_META_GENRE_RDS_EU_JAZZ_MUSIC, "jazz music"}, |
---|
| 148 | {ROAR_META_GENRE_RDS_EU_COUNTRY_MUSIC, "rds_eu_country_music"}, |
---|
| 149 | {ROAR_META_GENRE_RDS_EU_COUNTRY_MUSIC, "country music"}, |
---|
| 150 | {ROAR_META_GENRE_RDS_EU_NATIONAL_MUSIC, "rds_eu_national_music"}, |
---|
| 151 | {ROAR_META_GENRE_RDS_EU_NATIONAL_MUSIC, "national music"}, |
---|
| 152 | {ROAR_META_GENRE_RDS_EU_OLDIES_MUSIC, "rds_eu_oldies_music"}, |
---|
| 153 | {ROAR_META_GENRE_RDS_EU_OLDIES_MUSIC, "oldies music"}, |
---|
| 154 | {ROAR_META_GENRE_RDS_EU_FOLK_MUSIC, "rds_eu_folk_music"}, |
---|
| 155 | {ROAR_META_GENRE_RDS_EU_FOLK_MUSIC, "folk music"}, |
---|
| 156 | {ROAR_META_GENRE_RDS_EU_DOCUMENTARY, "rds_eu_documentary"}, |
---|
| 157 | {ROAR_META_GENRE_RDS_EU_DOCUMENTARY, "documentary"}, |
---|
| 158 | {ROAR_META_GENRE_RDS_EU_ALARM_TEST, "rds_eu_alarm_test"}, |
---|
| 159 | {ROAR_META_GENRE_RDS_EU_ALARM_TEST, "alarm test"}, |
---|
| 160 | {ROAR_META_GENRE_RDS_EU_ALARM, "rds_eu_alarm"}, |
---|
| 161 | {ROAR_META_GENRE_RDS_EU_ALARM, "alarm"}, |
---|
| 162 | {ROAR_META_GENRE_RDS_EU_EMERGENCY_TEST, "rds_eu_emergency_test"}, |
---|
| 163 | {ROAR_META_GENRE_RDS_EU_EMERGENCY_TEST, "emergency test"}, |
---|
| 164 | {ROAR_META_GENRE_RDS_EU_EMERGENCY, "rds_eu_emergency"}, |
---|
| 165 | {ROAR_META_GENRE_RDS_EU_EMERGENCY, "emergency"}, |
---|
| 166 | {ROAR_META_GENRE_RDS_NA_NONE, "rds_na_none"}, |
---|
| 167 | {ROAR_META_GENRE_RDS_NA_NONE, "none"}, |
---|
| 168 | {ROAR_META_GENRE_RDS_NA_NEWS, "rds_na_news"}, |
---|
| 169 | {ROAR_META_GENRE_RDS_NA_NEWS, "news"}, |
---|
| 170 | {ROAR_META_GENRE_RDS_NA_INFORMATION, "rds_na_information"}, |
---|
| 171 | {ROAR_META_GENRE_RDS_NA_INFORMATION, "information"}, |
---|
| 172 | {ROAR_META_GENRE_RDS_NA_SPORTS, "rds_na_sports"}, |
---|
| 173 | {ROAR_META_GENRE_RDS_NA_SPORTS, "sports"}, |
---|
| 174 | {ROAR_META_GENRE_RDS_NA_TALK, "rds_na_talk"}, |
---|
| 175 | {ROAR_META_GENRE_RDS_NA_TALK, "talk"}, |
---|
| 176 | {ROAR_META_GENRE_RDS_NA_ROCK, "rds_na_rock"}, |
---|
| 177 | {ROAR_META_GENRE_RDS_NA_ROCK, "rock"}, |
---|
| 178 | {ROAR_META_GENRE_RDS_NA_CLASSIC_ROCK, "rds_na_classic_rock"}, |
---|
| 179 | {ROAR_META_GENRE_RDS_NA_CLASSIC_ROCK, "classic rock"}, |
---|
| 180 | {ROAR_META_GENRE_RDS_NA_ADULT_HITS, "rds_na_adult_hits"}, |
---|
| 181 | {ROAR_META_GENRE_RDS_NA_ADULT_HITS, "adult hits"}, |
---|
| 182 | {ROAR_META_GENRE_RDS_NA_SOFT_ROCK, "rds_na_soft_rock"}, |
---|
| 183 | {ROAR_META_GENRE_RDS_NA_SOFT_ROCK, "soft rock"}, |
---|
| 184 | {ROAR_META_GENRE_RDS_NA_TOP_40, "rds_na_top_40"}, |
---|
| 185 | {ROAR_META_GENRE_RDS_NA_TOP_40, "top 40"}, |
---|
| 186 | {ROAR_META_GENRE_RDS_NA_COUNTRY, "rds_na_country"}, |
---|
| 187 | {ROAR_META_GENRE_RDS_NA_COUNTRY, "country"}, |
---|
| 188 | {ROAR_META_GENRE_RDS_NA_OLDIES, "rds_na_oldies"}, |
---|
| 189 | {ROAR_META_GENRE_RDS_NA_OLDIES, "oldies"}, |
---|
| 190 | {ROAR_META_GENRE_RDS_NA_SOFT, "rds_na_soft"}, |
---|
| 191 | {ROAR_META_GENRE_RDS_NA_SOFT, "soft"}, |
---|
| 192 | {ROAR_META_GENRE_RDS_NA_NOSTALGIA, "rds_na_nostalgia"}, |
---|
| 193 | {ROAR_META_GENRE_RDS_NA_NOSTALGIA, "nostalgia"}, |
---|
| 194 | {ROAR_META_GENRE_RDS_NA_JAZZ, "rds_na_jazz"}, |
---|
| 195 | {ROAR_META_GENRE_RDS_NA_JAZZ, "jazz"}, |
---|
| 196 | {ROAR_META_GENRE_RDS_NA_CLASSICAL, "rds_na_classical"}, |
---|
| 197 | {ROAR_META_GENRE_RDS_NA_CLASSICAL, "classical"}, |
---|
| 198 | {ROAR_META_GENRE_RDS_NA_RHYTHM_AND_BLUES, "rds_na_rhythm_and_blues"}, |
---|
| 199 | {ROAR_META_GENRE_RDS_NA_RHYTHM_AND_BLUES, "rhythm and blues"}, |
---|
| 200 | {ROAR_META_GENRE_RDS_NA_SOFT_RHYTHM_AND_BLUES, "rds_na_soft_rhythm_and_blues"}, |
---|
| 201 | {ROAR_META_GENRE_RDS_NA_SOFT_RHYTHM_AND_BLUES, "soft rhythm and blues"}, |
---|
| 202 | {ROAR_META_GENRE_RDS_NA_LANGUAGE, "rds_na_language"}, |
---|
| 203 | {ROAR_META_GENRE_RDS_NA_LANGUAGE, "language"}, |
---|
| 204 | {ROAR_META_GENRE_RDS_NA_RELIGIOUS_MUSIC, "rds_na_religious_music"}, |
---|
| 205 | {ROAR_META_GENRE_RDS_NA_RELIGIOUS_MUSIC, "religious music"}, |
---|
| 206 | {ROAR_META_GENRE_RDS_NA_RELIGIOUS_TALK, "rds_na_religious_talk"}, |
---|
| 207 | {ROAR_META_GENRE_RDS_NA_RELIGIOUS_TALK, "religious talk"}, |
---|
| 208 | {ROAR_META_GENRE_RDS_NA_PERSONALITY, "rds_na_personality"}, |
---|
| 209 | {ROAR_META_GENRE_RDS_NA_PERSONALITY, "personality"}, |
---|
| 210 | {ROAR_META_GENRE_RDS_NA_PUBLIC, "rds_na_public"}, |
---|
| 211 | {ROAR_META_GENRE_RDS_NA_PUBLIC, "public"}, |
---|
| 212 | {ROAR_META_GENRE_RDS_NA_COLLEGE, "rds_na_college"}, |
---|
| 213 | {ROAR_META_GENRE_RDS_NA_COLLEGE, "college"}, |
---|
| 214 | {ROAR_META_GENRE_RDS_NA_UNASSIGNED_0, "rds_na_unassigned_0"}, |
---|
| 215 | {ROAR_META_GENRE_RDS_NA_UNASSIGNED_0, "unassigned 0"}, |
---|
| 216 | {ROAR_META_GENRE_RDS_NA_UNASSIGNED_1, "rds_na_unassigned_1"}, |
---|
| 217 | {ROAR_META_GENRE_RDS_NA_UNASSIGNED_1, "unassigned 1"}, |
---|
| 218 | {ROAR_META_GENRE_RDS_NA_UNASSIGNED_2, "rds_na_unassigned_2"}, |
---|
| 219 | {ROAR_META_GENRE_RDS_NA_UNASSIGNED_2, "unassigned 2"}, |
---|
| 220 | {ROAR_META_GENRE_RDS_NA_UNASSIGNED_3, "rds_na_unassigned_3"}, |
---|
| 221 | {ROAR_META_GENRE_RDS_NA_UNASSIGNED_3, "unassigned 3"}, |
---|
| 222 | {ROAR_META_GENRE_RDS_NA_UNASSIGNED_4, "rds_na_unassigned_4"}, |
---|
| 223 | {ROAR_META_GENRE_RDS_NA_UNASSIGNED_4, "unassigned 4"}, |
---|
| 224 | {ROAR_META_GENRE_RDS_NA_WEATHER, "rds_na_weather"}, |
---|
| 225 | {ROAR_META_GENRE_RDS_NA_WEATHER, "weather"}, |
---|
| 226 | {ROAR_META_GENRE_RDS_NA_EMERGENCY_TEST, "rds_na_emergency_test"}, |
---|
| 227 | {ROAR_META_GENRE_RDS_NA_EMERGENCY_TEST, "emergency test"}, |
---|
| 228 | {ROAR_META_GENRE_RDS_NA_EMERGENCY, "rds_na_emergency"}, |
---|
| 229 | {ROAR_META_GENRE_RDS_NA_EMERGENCY, "emergency"}, |
---|
| 230 | {ROAR_META_GENRE_RDS_NA_ALARM_TEST, "rds_na_alarm_test"}, |
---|
| 231 | {ROAR_META_GENRE_RDS_NA_ALARM_TEST, "alarm test"}, |
---|
| 232 | {ROAR_META_GENRE_RDS_NA_ALARM, "rds_na_alarm"}, |
---|
| 233 | {ROAR_META_GENRE_RDS_NA_ALARM, "alarm"}, |
---|
| 234 | {ROAR_META_GENRE_ID3_BLUES, "id3_blues"}, |
---|
| 235 | {ROAR_META_GENRE_ID3_BLUES, "blues"}, |
---|
| 236 | {ROAR_META_GENRE_ID3_CLASSIC_ROCK, "id3_classic_rock"}, |
---|
| 237 | {ROAR_META_GENRE_ID3_CLASSIC_ROCK, "classic rock"}, |
---|
| 238 | {ROAR_META_GENRE_ID3_COUNTRY, "id3_country"}, |
---|
| 239 | {ROAR_META_GENRE_ID3_COUNTRY, "country"}, |
---|
| 240 | {ROAR_META_GENRE_ID3_DANCE, "id3_dance"}, |
---|
| 241 | {ROAR_META_GENRE_ID3_DANCE, "dance"}, |
---|
| 242 | {ROAR_META_GENRE_ID3_DISCO, "id3_disco"}, |
---|
| 243 | {ROAR_META_GENRE_ID3_DISCO, "disco"}, |
---|
| 244 | {ROAR_META_GENRE_ID3_FUNK, "id3_funk"}, |
---|
| 245 | {ROAR_META_GENRE_ID3_FUNK, "funk"}, |
---|
| 246 | {ROAR_META_GENRE_ID3_GRUNGE, "id3_grunge"}, |
---|
| 247 | {ROAR_META_GENRE_ID3_GRUNGE, "grunge"}, |
---|
| 248 | {ROAR_META_GENRE_ID3_HIP_HOP, "id3_hip_hop"}, |
---|
| 249 | {ROAR_META_GENRE_ID3_HIP_HOP, "hip hop"}, |
---|
| 250 | {ROAR_META_GENRE_ID3_JAZZ, "id3_jazz"}, |
---|
| 251 | {ROAR_META_GENRE_ID3_JAZZ, "jazz"}, |
---|
| 252 | {ROAR_META_GENRE_ID3_METAL, "id3_metal"}, |
---|
| 253 | {ROAR_META_GENRE_ID3_METAL, "metal"}, |
---|
| 254 | {ROAR_META_GENRE_ID3_NEW_AGE, "id3_new_age"}, |
---|
| 255 | {ROAR_META_GENRE_ID3_NEW_AGE, "new age"}, |
---|
| 256 | {ROAR_META_GENRE_ID3_OLDIES, "id3_oldies"}, |
---|
| 257 | {ROAR_META_GENRE_ID3_OLDIES, "oldies"}, |
---|
| 258 | {ROAR_META_GENRE_ID3_OTHER, "id3_other"}, |
---|
| 259 | {ROAR_META_GENRE_ID3_OTHER, "other"}, |
---|
| 260 | {ROAR_META_GENRE_ID3_POP, "id3_pop"}, |
---|
| 261 | {ROAR_META_GENRE_ID3_POP, "pop"}, |
---|
| 262 | {ROAR_META_GENRE_ID3_R_AND_B, "id3_r_and_b"}, |
---|
| 263 | {ROAR_META_GENRE_ID3_R_AND_B, "r and b"}, |
---|
| 264 | {ROAR_META_GENRE_ID3_RAP, "id3_rap"}, |
---|
| 265 | {ROAR_META_GENRE_ID3_RAP, "rap"}, |
---|
| 266 | {ROAR_META_GENRE_ID3_REGGAE, "id3_reggae"}, |
---|
| 267 | {ROAR_META_GENRE_ID3_REGGAE, "reggae"}, |
---|
| 268 | {ROAR_META_GENRE_ID3_ROCK, "id3_rock"}, |
---|
| 269 | {ROAR_META_GENRE_ID3_ROCK, "rock"}, |
---|
| 270 | {ROAR_META_GENRE_ID3_TECHNO, "id3_techno"}, |
---|
| 271 | {ROAR_META_GENRE_ID3_TECHNO, "techno"}, |
---|
| 272 | {ROAR_META_GENRE_ID3_INDUSTRIAL, "id3_industrial"}, |
---|
| 273 | {ROAR_META_GENRE_ID3_INDUSTRIAL, "industrial"}, |
---|
| 274 | {ROAR_META_GENRE_ID3_ALTERNATIVE, "id3_alternative"}, |
---|
| 275 | {ROAR_META_GENRE_ID3_ALTERNATIVE, "alternative"}, |
---|
| 276 | {ROAR_META_GENRE_ID3_SKA, "id3_ska"}, |
---|
| 277 | {ROAR_META_GENRE_ID3_SKA, "ska"}, |
---|
| 278 | {ROAR_META_GENRE_ID3_DEATH_METAL, "id3_death_metal"}, |
---|
| 279 | {ROAR_META_GENRE_ID3_DEATH_METAL, "death metal"}, |
---|
| 280 | {ROAR_META_GENRE_ID3_PRANKS, "id3_pranks"}, |
---|
| 281 | {ROAR_META_GENRE_ID3_PRANKS, "pranks"}, |
---|
| 282 | {ROAR_META_GENRE_ID3_SOUNDTRACK, "id3_soundtrack"}, |
---|
| 283 | {ROAR_META_GENRE_ID3_SOUNDTRACK, "soundtrack"}, |
---|
| 284 | {ROAR_META_GENRE_ID3_EURO_TECHNO, "id3_euro_techno"}, |
---|
| 285 | {ROAR_META_GENRE_ID3_EURO_TECHNO, "euro techno"}, |
---|
| 286 | {ROAR_META_GENRE_ID3_AMBIENT, "id3_ambient"}, |
---|
| 287 | {ROAR_META_GENRE_ID3_AMBIENT, "ambient"}, |
---|
| 288 | {ROAR_META_GENRE_ID3_TRIP_HOP, "id3_trip_hop"}, |
---|
| 289 | {ROAR_META_GENRE_ID3_TRIP_HOP, "trip hop"}, |
---|
| 290 | {ROAR_META_GENRE_ID3_VOCAL, "id3_vocal"}, |
---|
| 291 | {ROAR_META_GENRE_ID3_VOCAL, "vocal"}, |
---|
| 292 | {ROAR_META_GENRE_ID3_JAZZ_FUNK, "id3_jazz_funk"}, |
---|
| 293 | {ROAR_META_GENRE_ID3_JAZZ_FUNK, "jazz funk"}, |
---|
| 294 | {ROAR_META_GENRE_ID3_FUSION, "id3_fusion"}, |
---|
| 295 | {ROAR_META_GENRE_ID3_FUSION, "fusion"}, |
---|
| 296 | {ROAR_META_GENRE_ID3_TRANCE, "id3_trance"}, |
---|
| 297 | {ROAR_META_GENRE_ID3_TRANCE, "trance"}, |
---|
| 298 | {ROAR_META_GENRE_ID3_CLASSICAL, "id3_classical"}, |
---|
| 299 | {ROAR_META_GENRE_ID3_CLASSICAL, "classical"}, |
---|
| 300 | {ROAR_META_GENRE_ID3_INSTRUMENTAL, "id3_instrumental"}, |
---|
| 301 | {ROAR_META_GENRE_ID3_INSTRUMENTAL, "instrumental"}, |
---|
| 302 | {ROAR_META_GENRE_ID3_ACID, "id3_acid"}, |
---|
| 303 | {ROAR_META_GENRE_ID3_ACID, "acid"}, |
---|
| 304 | {ROAR_META_GENRE_ID3_HOUSE, "id3_house"}, |
---|
| 305 | {ROAR_META_GENRE_ID3_HOUSE, "house"}, |
---|
| 306 | {ROAR_META_GENRE_ID3_GAME, "id3_game"}, |
---|
| 307 | {ROAR_META_GENRE_ID3_GAME, "game"}, |
---|
| 308 | {ROAR_META_GENRE_ID3_SOUND_CLIP, "id3_sound_clip"}, |
---|
| 309 | {ROAR_META_GENRE_ID3_SOUND_CLIP, "sound clip"}, |
---|
| 310 | {ROAR_META_GENRE_ID3_GOSPEL, "id3_gospel"}, |
---|
| 311 | {ROAR_META_GENRE_ID3_GOSPEL, "gospel"}, |
---|
| 312 | {ROAR_META_GENRE_ID3_NOISE, "id3_noise"}, |
---|
| 313 | {ROAR_META_GENRE_ID3_NOISE, "noise"}, |
---|
| 314 | {ROAR_META_GENRE_ID3_ALTERNROCK, "id3_alternrock"}, |
---|
| 315 | {ROAR_META_GENRE_ID3_ALTERNROCK, "alternrock"}, |
---|
| 316 | {ROAR_META_GENRE_ID3_BASS, "id3_bass"}, |
---|
| 317 | {ROAR_META_GENRE_ID3_BASS, "bass"}, |
---|
| 318 | {ROAR_META_GENRE_ID3_SOUL, "id3_soul"}, |
---|
| 319 | {ROAR_META_GENRE_ID3_SOUL, "soul"}, |
---|
| 320 | {ROAR_META_GENRE_ID3_PUNK, "id3_punk"}, |
---|
| 321 | {ROAR_META_GENRE_ID3_PUNK, "punk"}, |
---|
| 322 | {ROAR_META_GENRE_ID3_SPACE, "id3_space"}, |
---|
| 323 | {ROAR_META_GENRE_ID3_SPACE, "space"}, |
---|
| 324 | {ROAR_META_GENRE_ID3_MEDITATIVE, "id3_meditative"}, |
---|
| 325 | {ROAR_META_GENRE_ID3_MEDITATIVE, "meditative"}, |
---|
| 326 | {ROAR_META_GENRE_ID3_INSTRUMENTAL_POP, "id3_instrumental_pop"}, |
---|
| 327 | {ROAR_META_GENRE_ID3_INSTRUMENTAL_POP, "instrumental pop"}, |
---|
| 328 | {ROAR_META_GENRE_ID3_INSTRUMENTAL_ROCK, "id3_instrumental_rock"}, |
---|
| 329 | {ROAR_META_GENRE_ID3_INSTRUMENTAL_ROCK, "instrumental rock"}, |
---|
| 330 | {ROAR_META_GENRE_ID3_ETHNIC, "id3_ethnic"}, |
---|
| 331 | {ROAR_META_GENRE_ID3_ETHNIC, "ethnic"}, |
---|
| 332 | {ROAR_META_GENRE_ID3_GOTHIC, "id3_gothic"}, |
---|
| 333 | {ROAR_META_GENRE_ID3_GOTHIC, "gothic"}, |
---|
| 334 | {ROAR_META_GENRE_ID3_DARKWAVE, "id3_darkwave"}, |
---|
| 335 | {ROAR_META_GENRE_ID3_DARKWAVE, "darkwave"}, |
---|
| 336 | {ROAR_META_GENRE_ID3_TECHNO_INDUSTRIAL, "id3_techno_industrial"}, |
---|
| 337 | {ROAR_META_GENRE_ID3_TECHNO_INDUSTRIAL, "techno industrial"}, |
---|
| 338 | {ROAR_META_GENRE_ID3_ELECTRONIC, "id3_electronic"}, |
---|
| 339 | {ROAR_META_GENRE_ID3_ELECTRONIC, "electronic"}, |
---|
| 340 | {ROAR_META_GENRE_ID3_POP_FOLK, "id3_pop_folk"}, |
---|
| 341 | {ROAR_META_GENRE_ID3_POP_FOLK, "pop folk"}, |
---|
| 342 | {ROAR_META_GENRE_ID3_EURODANCE, "id3_eurodance"}, |
---|
| 343 | {ROAR_META_GENRE_ID3_EURODANCE, "eurodance"}, |
---|
| 344 | {ROAR_META_GENRE_ID3_DREAM, "id3_dream"}, |
---|
| 345 | {ROAR_META_GENRE_ID3_DREAM, "dream"}, |
---|
| 346 | {ROAR_META_GENRE_ID3_SOUTHERN_ROCK, "id3_southern_rock"}, |
---|
| 347 | {ROAR_META_GENRE_ID3_SOUTHERN_ROCK, "southern rock"}, |
---|
| 348 | {ROAR_META_GENRE_ID3_COMEDY, "id3_comedy"}, |
---|
| 349 | {ROAR_META_GENRE_ID3_COMEDY, "comedy"}, |
---|
| 350 | {ROAR_META_GENRE_ID3_CULT, "id3_cult"}, |
---|
| 351 | {ROAR_META_GENRE_ID3_CULT, "cult"}, |
---|
| 352 | {ROAR_META_GENRE_ID3_GANGSTA, "id3_gangsta"}, |
---|
| 353 | {ROAR_META_GENRE_ID3_GANGSTA, "gangsta"}, |
---|
| 354 | {ROAR_META_GENRE_ID3_TOP_40, "id3_top_40"}, |
---|
| 355 | {ROAR_META_GENRE_ID3_TOP_40, "top 40"}, |
---|
| 356 | {ROAR_META_GENRE_ID3_CHRISTIAN_RAP, "id3_christian_rap"}, |
---|
| 357 | {ROAR_META_GENRE_ID3_CHRISTIAN_RAP, "christian rap"}, |
---|
| 358 | {ROAR_META_GENRE_ID3_POP_FUNK, "id3_pop_funk"}, |
---|
| 359 | {ROAR_META_GENRE_ID3_POP_FUNK, "pop funk"}, |
---|
| 360 | {ROAR_META_GENRE_ID3_JUNGLE, "id3_jungle"}, |
---|
| 361 | {ROAR_META_GENRE_ID3_JUNGLE, "jungle"}, |
---|
| 362 | {ROAR_META_GENRE_ID3_NATIVE_AMERICAN, "id3_native_american"}, |
---|
| 363 | {ROAR_META_GENRE_ID3_NATIVE_AMERICAN, "native american"}, |
---|
| 364 | {ROAR_META_GENRE_ID3_CABARET, "id3_cabaret"}, |
---|
| 365 | {ROAR_META_GENRE_ID3_CABARET, "cabaret"}, |
---|
| 366 | {ROAR_META_GENRE_ID3_NEW_WAVE, "id3_new_wave"}, |
---|
| 367 | {ROAR_META_GENRE_ID3_NEW_WAVE, "new wave"}, |
---|
| 368 | {ROAR_META_GENRE_ID3_PSYCHADELIC, "id3_psychadelic"}, |
---|
| 369 | {ROAR_META_GENRE_ID3_PSYCHADELIC, "psychadelic"}, |
---|
| 370 | {ROAR_META_GENRE_ID3_RAVE, "id3_rave"}, |
---|
| 371 | {ROAR_META_GENRE_ID3_RAVE, "rave"}, |
---|
| 372 | {ROAR_META_GENRE_ID3_SHOWTUNES, "id3_showtunes"}, |
---|
| 373 | {ROAR_META_GENRE_ID3_SHOWTUNES, "showtunes"}, |
---|
| 374 | {ROAR_META_GENRE_ID3_TRAILER, "id3_trailer"}, |
---|
| 375 | {ROAR_META_GENRE_ID3_TRAILER, "trailer"}, |
---|
| 376 | {ROAR_META_GENRE_ID3_LO_FI, "id3_lo_fi"}, |
---|
| 377 | {ROAR_META_GENRE_ID3_LO_FI, "lo fi"}, |
---|
| 378 | {ROAR_META_GENRE_ID3_TRIBAL, "id3_tribal"}, |
---|
| 379 | {ROAR_META_GENRE_ID3_TRIBAL, "tribal"}, |
---|
| 380 | {ROAR_META_GENRE_ID3_ACID_PUNK, "id3_acid_punk"}, |
---|
| 381 | {ROAR_META_GENRE_ID3_ACID_PUNK, "acid punk"}, |
---|
| 382 | {ROAR_META_GENRE_ID3_ACID_JAZZ, "id3_acid_jazz"}, |
---|
| 383 | {ROAR_META_GENRE_ID3_ACID_JAZZ, "acid jazz"}, |
---|
| 384 | {ROAR_META_GENRE_ID3_POLKA, "id3_polka"}, |
---|
| 385 | {ROAR_META_GENRE_ID3_POLKA, "polka"}, |
---|
| 386 | {ROAR_META_GENRE_ID3_RETRO, "id3_retro"}, |
---|
| 387 | {ROAR_META_GENRE_ID3_RETRO, "retro"}, |
---|
| 388 | {ROAR_META_GENRE_ID3_MUSICAL, "id3_musical"}, |
---|
| 389 | {ROAR_META_GENRE_ID3_MUSICAL, "musical"}, |
---|
| 390 | {ROAR_META_GENRE_ID3_ROCK_AND_ROLL, "id3_rock_and_roll"}, |
---|
| 391 | {ROAR_META_GENRE_ID3_ROCK_AND_ROLL, "rock and roll"}, |
---|
| 392 | {ROAR_META_GENRE_ID3_HARD_ROCK, "id3_hard_rock"}, |
---|
| 393 | {ROAR_META_GENRE_ID3_HARD_ROCK, "hard rock"}, |
---|
[3051] | 394 | |
---|
| 395 | {-1, "EOL"} |
---|
| 396 | }; |
---|
| 397 | |
---|
[110] | 398 | char * roar_meta_strtype(int type) { |
---|
| 399 | int i; |
---|
[1068] | 400 | static char name[ROAR_META_MAX_NAMELEN]; |
---|
[110] | 401 | |
---|
| 402 | for (i = 0; _libroar_meta_typelist[i].id != -1; i++) |
---|
| 403 | if ( _libroar_meta_typelist[i].id == type ) { |
---|
[1068] | 404 | strncpy(name, _libroar_meta_typelist[i].name, ROAR_META_MAX_NAMELEN); |
---|
[110] | 405 | return name; |
---|
| 406 | } |
---|
| 407 | |
---|
| 408 | return NULL; |
---|
| 409 | } |
---|
| 410 | |
---|
| 411 | int roar_meta_inttype(char * type) { |
---|
| 412 | int i; |
---|
| 413 | |
---|
| 414 | for (i = 0; _libroar_meta_typelist[i].id != -1; i++) |
---|
| 415 | if ( strcasecmp(_libroar_meta_typelist[i].name, type) == 0 ) { |
---|
| 416 | return _libroar_meta_typelist[i].id; |
---|
| 417 | } |
---|
| 418 | |
---|
| 419 | return -1; |
---|
| 420 | } |
---|
| 421 | |
---|
[97] | 422 | int roar_stream_meta_set (struct roar_connection * con, struct roar_stream * s, int mode, struct roar_meta * meta) { |
---|
| 423 | struct roar_message m; |
---|
| 424 | int len; |
---|
| 425 | |
---|
[131] | 426 | memset(&m, 0, sizeof(struct roar_message)); // make valgrind happy! |
---|
| 427 | |
---|
[97] | 428 | m.cmd = ROAR_CMD_SET_META; |
---|
| 429 | m.stream = s->id; |
---|
| 430 | // m.datalen = len; |
---|
| 431 | |
---|
[1129] | 432 | if ( (mode == ROAR_META_MODE_FINALIZE || mode == ROAR_META_MODE_CLEAR) && meta->value == NULL ) |
---|
| 433 | meta->value = ""; |
---|
| 434 | |
---|
| 435 | if ( meta->value == NULL ) |
---|
| 436 | return -1; |
---|
| 437 | |
---|
[97] | 438 | m.data[0] = 0; |
---|
| 439 | m.data[1] = mode; |
---|
| 440 | m.data[2] = meta->type; |
---|
| 441 | |
---|
| 442 | m.data[3] = strlen(meta->key); |
---|
| 443 | m.data[4] = len = strlen(meta->value); |
---|
| 444 | |
---|
| 445 | if ( len > 255 ) |
---|
| 446 | return -1; |
---|
| 447 | |
---|
[1037] | 448 | m.datalen = (int) 5 + (int) m.data[3] + len; |
---|
[97] | 449 | if ( m.datalen > LIBROAR_BUFFER_MSGDATA ) |
---|
| 450 | return -1; |
---|
| 451 | |
---|
| 452 | strncpy(&(m.data[5]), meta->key, ROAR_META_MAX_NAMELEN); |
---|
| 453 | strncpy(&(m.data[5+m.data[3]]), meta->value, len); |
---|
| 454 | |
---|
[1037] | 455 | ROAR_DBG("roar_stream_meta_set(*): meta value length is %i byte", len); |
---|
| 456 | ROAR_DBG("roar_stream_meta_set(*): message data length is %i byte", m.datalen); |
---|
| 457 | |
---|
[97] | 458 | if ( roar_req(con, &m, NULL) == -1 ) |
---|
| 459 | return -1; |
---|
| 460 | |
---|
| 461 | if ( m.cmd == ROAR_CMD_OK ) |
---|
| 462 | return 0; |
---|
| 463 | return -1; |
---|
| 464 | } |
---|
| 465 | |
---|
[102] | 466 | int roar_stream_meta_get (struct roar_connection * con, struct roar_stream * s, struct roar_meta * meta) { |
---|
| 467 | struct roar_message m; |
---|
| 468 | char * c; |
---|
| 469 | |
---|
[3875] | 470 | memset(&m, 0, sizeof(m)); |
---|
| 471 | |
---|
[108] | 472 | m.cmd = ROAR_CMD_GET_META; |
---|
[102] | 473 | m.stream = s->id; |
---|
| 474 | // m.datalen = len; |
---|
| 475 | |
---|
| 476 | m.data[0] = 0; |
---|
| 477 | m.data[1] = meta->type; |
---|
| 478 | m.datalen = 2; |
---|
| 479 | |
---|
[105] | 480 | if ( roar_req(con, &m, NULL) == -1 ) |
---|
| 481 | return -1; |
---|
| 482 | |
---|
[102] | 483 | if ( m.cmd != ROAR_CMD_OK ) |
---|
| 484 | return -1; |
---|
| 485 | |
---|
| 486 | if ( m.datalen < 2 ) |
---|
| 487 | return -1; |
---|
| 488 | |
---|
| 489 | if ( m.data[0] != 0 ) |
---|
| 490 | return -1; |
---|
| 491 | |
---|
| 492 | if ( (c = malloc(((unsigned) m.data[1]) + 1)) == NULL ) |
---|
| 493 | return -1; |
---|
| 494 | |
---|
| 495 | strncpy(c, &(m.data[2]), (unsigned) m.data[1]); |
---|
| 496 | c[(unsigned) m.data[1]] = 0; |
---|
| 497 | |
---|
| 498 | meta->value = c; |
---|
| 499 | meta->key[0] = 0; |
---|
| 500 | |
---|
| 501 | return 0; |
---|
| 502 | } |
---|
| 503 | |
---|
[114] | 504 | int roar_stream_meta_list (struct roar_connection * con, struct roar_stream * s, int * types, size_t len) { |
---|
| 505 | int i; |
---|
| 506 | struct roar_message m; |
---|
| 507 | |
---|
[3875] | 508 | memset(&m, 0, sizeof(m)); |
---|
| 509 | |
---|
[114] | 510 | m.cmd = ROAR_CMD_LIST_META; |
---|
| 511 | m.stream = s->id; |
---|
[2543] | 512 | m.pos = 0; |
---|
[114] | 513 | |
---|
| 514 | m.data[0] = 0; |
---|
| 515 | m.datalen = 1; |
---|
| 516 | |
---|
| 517 | if ( roar_req(con, &m, NULL) == -1 ) |
---|
| 518 | return -1; |
---|
| 519 | |
---|
| 520 | if ( m.cmd != ROAR_CMD_OK ) |
---|
| 521 | return -1; |
---|
| 522 | |
---|
| 523 | if ( m.datalen < 1 ) |
---|
| 524 | return -1; |
---|
| 525 | |
---|
| 526 | if ( m.data[0] != 0 ) |
---|
| 527 | return -1; |
---|
| 528 | |
---|
| 529 | if ( len < (m.datalen - 1 ) ) |
---|
| 530 | return -1; |
---|
| 531 | |
---|
| 532 | for (i = 1; i < m.datalen; i++) |
---|
| 533 | types[i-1] = (unsigned) m.data[i]; |
---|
| 534 | |
---|
| 535 | return m.datalen - 1; |
---|
| 536 | } |
---|
| 537 | |
---|
[102] | 538 | int roar_meta_free (struct roar_meta * meta) { |
---|
| 539 | if ( meta->value ) |
---|
| 540 | free(meta->value); |
---|
| 541 | |
---|
| 542 | return 0; |
---|
| 543 | } |
---|
| 544 | |
---|
[3051] | 545 | |
---|
| 546 | // genere: |
---|
| 547 | char * roar_meta_strgenre(int genre) { |
---|
| 548 | int i; |
---|
| 549 | |
---|
| 550 | for (i = 0; _libroar_meta_genrelist[i].id != -1; i++) |
---|
| 551 | if ( _libroar_meta_genrelist[i].id == genre ) { |
---|
| 552 | return _libroar_meta_genrelist[i].name; |
---|
| 553 | } |
---|
| 554 | |
---|
| 555 | return NULL; |
---|
| 556 | } |
---|
| 557 | |
---|
| 558 | int roar_meta_intgenre(char * genre) { |
---|
| 559 | int i; |
---|
| 560 | |
---|
| 561 | for (i = 0; _libroar_meta_genrelist[i].id != -1; i++) |
---|
| 562 | if ( strcasecmp(_libroar_meta_genrelist[i].name, genre) == 0 ) { |
---|
| 563 | return _libroar_meta_genrelist[i].id; |
---|
| 564 | } |
---|
| 565 | |
---|
| 566 | return -1; |
---|
| 567 | } |
---|
| 568 | |
---|
[3058] | 569 | int roar_meta_parse_audioinfo(struct roar_audio_info * info, char * str) { |
---|
| 570 | char * lc; |
---|
| 571 | char * cur, * next; |
---|
| 572 | char * k, * v; |
---|
| 573 | |
---|
| 574 | if ( info == NULL || str == NULL ) |
---|
| 575 | return -1; |
---|
| 576 | |
---|
| 577 | memset(info, 0, sizeof(struct roar_audio_info)); |
---|
| 578 | |
---|
[3059] | 579 | info->codec = -1; |
---|
| 580 | |
---|
[3058] | 581 | if ( (lc = strdup(str)) == NULL ) |
---|
| 582 | return -1; |
---|
| 583 | |
---|
| 584 | cur = lc; |
---|
| 585 | |
---|
| 586 | while (cur != NULL) { |
---|
| 587 | next = strstr(cur, " "); |
---|
| 588 | if ( next != NULL ) { |
---|
| 589 | *next = 0; |
---|
| 590 | next++; |
---|
| 591 | } |
---|
| 592 | |
---|
| 593 | k = cur; |
---|
| 594 | v = strstr(cur, ":"); |
---|
| 595 | |
---|
| 596 | if ( v != NULL ) { |
---|
| 597 | *v = 0; |
---|
| 598 | v++; |
---|
| 599 | } else { |
---|
| 600 | v = ""; |
---|
| 601 | } |
---|
| 602 | |
---|
| 603 | // we test for the key, unknown keys get ignored. |
---|
| 604 | if ( !strcasecmp(k, "rate") ) { |
---|
| 605 | info->rate = atoi(v); |
---|
| 606 | } else if ( !strcasecmp(k, "bits") ) { |
---|
| 607 | info->bits = atoi(v); |
---|
| 608 | } else if ( !strcasecmp(k, "channels") ) { |
---|
| 609 | info->channels = atoi(v); |
---|
| 610 | } else if ( !strcasecmp(k, "codec") ) { |
---|
| 611 | info->codec = roar_str2codec(v); |
---|
| 612 | } |
---|
| 613 | |
---|
| 614 | cur = next; |
---|
| 615 | } |
---|
| 616 | |
---|
| 617 | free(lc); |
---|
| 618 | |
---|
| 619 | return 0; |
---|
| 620 | } |
---|
| 621 | |
---|
[93] | 622 | //ll |
---|