source: roaraudio/libroar/meta.c @ 3059:80c47c307975

Last change on this file since 3059:80c47c307975 was 3059:80c47c307975, checked in by phi, 14 years ago

init codec with -1

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