source: roaraudio/libroar/meta.c @ 3074:4194e8314b7b

Last change on this file since 3074:4194e8314b7b was 3074:4194e8314b7b, checked in by phi, 14 years ago

added missing meta types from Xiph's list

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