- if( TagLib::MPEG::File *p_mpeg =
- dynamic_cast<TagLib::MPEG::File *>(f.file() ) )
- {
- if( p_mpeg->ID3v2Tag() )
- {
- TagLib::ID3v2::Tag *tag = p_mpeg->ID3v2Tag();
- TagLib::ID3v2::FrameList list = tag->frameListMap()["UFID"];
- TagLib::ID3v2::UniqueFileIdentifierFrame* p_ufid;
- for( TagLib::ID3v2::FrameList::Iterator iter = list.begin();
- iter != list.end(); iter++ )
- {
- p_ufid = dynamic_cast<TagLib::ID3v2::UniqueFileIdentifierFrame*>(*iter);
- const char *owner = p_ufid->owner().toCString();
- if (!strcmp( owner, "http://musicbrainz.org" ))
- {
- /* ID3v2 UFID contains up to 64 bytes binary data
- * but in our case it will be a '\0'
- * terminated string */
- char *psz_ufid = (char*) malloc( 64 );
- int j = 0;
- while( ( j < 63 ) &&
- ( j < p_ufid->identifier().size() ) )
- psz_ufid[j] = p_ufid->identifier()[j++];
- psz_ufid[j] = '\0';
- vlc_meta_SetTrackID( p_meta, psz_ufid );
- free( psz_ufid );
- }
- }
-
- list = tag->frameListMap()["TXXX"];
- TagLib::ID3v2::UserTextIdentificationFrame* p_txxx;
- for( TagLib::ID3v2::FrameList::Iterator iter = list.begin();
- iter != list.end(); iter++ )
- {
- p_txxx = dynamic_cast<TagLib::ID3v2::UserTextIdentificationFrame*>(*iter);
- const char *psz_desc= p_txxx->description().toCString();
-#if 0 /* musicbrainz artist and album id: not useful (yet?) */
- if( !strncmp( psz_desc, "MusicBrainz Artist Id", 21 ) )
- vlc_meta_SetArtistID( p_meta,
- p_txxx->fieldList().toString().toCString());
- if( !strncmp( psz_desc, "MusicBrainz Album Id", 20 ) )
- vlc_meta_SetAlbumID( p_meta,
- p_txxx->fieldList().toString().toCString());
-#endif
- vlc_meta_AddExtra( p_meta, psz_desc,
- p_txxx->fieldList().toString().toCString());
- }
-#if 0
- list = tag->frameListMap()["RVA2"];
- TagLib::ID3v2::RelativeVolumeFrame* p_rva2;
- for( TagLib::ID3v2::FrameList::Iterator iter = list.begin();
- iter != list.end(); iter++ )
- {
- p_rva2 = dynamic_cast<TagLib::ID3v2::RelativeVolumeFrame*>(*iter);
- /* TODO: process rva2 frames */
- }
-#endif
- list = tag->frameList();
- TagLib::ID3v2::Frame* p_t;
- char psz_tag[4];
- for( TagLib::ID3v2::FrameList::Iterator iter = list.begin();
- iter != list.end(); iter++ )
- {
- p_t = dynamic_cast<TagLib::ID3v2::Frame*> (*iter);
- memcpy( psz_tag, p_t->frameID().data(), 4);