source: roaraudio/libroar/meta.c @ 5326:dd73c777e8dd

Last change on this file since 5326:dd73c777e8dd was 5295:5914c84e72be, checked in by phi, 12 years ago

converted message (protocol) rutunes to use roar_mm_*() (Closes: #129)

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