Browse Source

Support alternate TrackTotal styles in taglib.

vorbis_ParseComment() supports several different methods of
specifying the total number of tracks. Update the taglib module
to support reading in the same set.

Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
pull/7/head
Timothy B. Terriberry 13 years ago
committed by Jean-Baptiste Kempf
parent
commit
0b429f0af4
  1. 30
      modules/meta_engine/taglib.cpp

30
modules/meta_engine/taglib.cpp

@ -429,12 +429,12 @@ static void ReadMetaFromId3v2( ID3v2::Tag* tag, demux_meta_t* p_demux_meta, vlc_
static void ReadMetaFromXiph( Ogg::XiphComment* tag, demux_meta_t* p_demux_meta, vlc_meta_t* p_meta )
{
StringList list;
bool hasTrackTotal = false;
#define SET( keyName, metaName ) \
list = tag->fieldListMap()[keyName]; \
if( !list.isEmpty() ) \
vlc_meta_Set##metaName( p_meta, (*list.begin()).toCString( true ) );
SET( "TRACKTOTAL", TrackTotal );
SET( "COPYRIGHT", Copyright );
SET( "ORGANIZATION", Publisher );
SET( "DATE", Date );
@ -443,6 +443,34 @@ static void ReadMetaFromXiph( Ogg::XiphComment* tag, demux_meta_t* p_demux_meta,
SET( "LANGUAGE", Language );
#undef SET
list = tag->fieldListMap()["TRACKNUMBER"];
if( !list.isEmpty() )
{
const char *psz_value;
unsigned short u_track;
unsigned short u_total;
psz_value = (*list.begin()).toCString( true );
if( sscanf( psz_value, "%hu/%hu", &u_track, &u_total ) == 2)
{
char str[6];
snprintf(str, 6, "%u", u_track);
vlc_meta_SetTrackNum( p_meta, str);
snprintf(str, 6, "%u", u_total);
vlc_meta_SetTrackTotal( p_meta, str);
hasTrackTotal = true;
}
else
vlc_meta_SetTrackNum( p_meta, psz_value);
}
if( !hasTrackTotal )
{
list = tag->fieldListMap()["TRACKTOTAL"];
if( list.isEmpty() )
list = tag->fieldListMap()["TOTALTRACKS"];
if( !list.isEmpty() )
vlc_meta_SetTrackTotal( p_meta, (*list.begin()).toCString( true ) );
}
// Try now to get embedded art
StringList mime_list = tag->fieldListMap()[ "COVERARTMIME" ];
StringList art_list = tag->fieldListMap()[ "COVERART" ];

Loading…
Cancel
Save