source: roaraudio/libroar/meta.c @ 4791:4c1908f79270

Last change on this file since 4791:4c1908f79270 was 4791:4c1908f79270, checked in by phi, 13 years ago

added ROAR_META_TYPE_COMPOSER and ROAR_META_TYPE_RIGHTS

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