Skip to content

Commit

Permalink
meta: taglib: simplify processing Ogg pictures
Browse files Browse the repository at this point in the history
  • Loading branch information
fcartegnie authored and robUx4 committed Sep 25, 2024
1 parent 02586ba commit e4b04ce
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 59 deletions.
3 changes: 1 addition & 2 deletions modules/meta_engine/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ libfolder_plugin_la_SOURCES = meta_engine/folder.c
meta_LTLIBRARIES = libfolder_plugin.la

libtaglib_plugin_la_SOURCES = meta_engine/taglib.cpp \
meta_engine/ID3Pictures.h \
demux/xiph_metadata.h demux/xiph_metadata.c
meta_engine/ID3Pictures.h
libtaglib_plugin_la_CXXFLAGS = $(AM_CXXFLAGS) $(TAGLIB_CFLAGS)
libtaglib_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(metadir)'
libtaglib_plugin_la_LIBADD = $(TAGLIB_LIBS) -lz
Expand Down
2 changes: 1 addition & 1 deletion modules/meta_engine/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ taglib_dep = dependency('taglib', version: '>= 1.11', required: get_option('tagl
if taglib_dep.found()
vlc_modules += {
'name' : 'taglib',
'sources' : files('taglib.cpp', '../demux/xiph_metadata.c'),
'sources' : files('taglib.cpp'),
'dependencies' : [taglib_dep, z_dep]
}
endif
59 changes: 3 additions & 56 deletions modules/meta_engine/taglib.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include <vlc_url.h> /* vlc_uri2path */
#include <vlc_mime.h> /* mime type */
#include <vlc_fs.h>
#include <vlc_charset.h>
#include <vlc_cxx_helpers.hpp>

#include <sys/stat.h>
Expand Down Expand Up @@ -77,7 +78,6 @@
#include <oggfile.h>
#include <oggflacfile.h>
#include <opusfile.h>
#include "../demux/xiph_metadata.h"
#include "ID3Pictures.h"

#include <aifffile.h>
Expand Down Expand Up @@ -849,61 +849,8 @@ static void ReadMetaFromXiph( Ogg::XiphComment* tag, demux_meta_t* p_demux_meta,
}
}

// Try now to get embedded art
StringList mime_list { tag->fieldListMap()[ "COVERARTMIME" ] };
StringList art_list { tag->fieldListMap()[ "COVERART" ] };

input_attachment_t *p_attachment;

if( mime_list.size() != 0 && art_list.size() != 0 )
{
// We get only the first cover art
if( mime_list.size() > 1 || art_list.size() > 1 )
msg_Warn( p_demux_meta, "Found %i embedded arts, so using only the first one",
art_list.size() );

const char* psz_name = "cover";
const char* psz_mime = mime_list[0].toCString(true);
const char* psz_description = "cover";

uint8_t *p_data;
int i_data = vlc_b64_decode_binary( &p_data, art_list[0].toCString(false) );

msg_Dbg( p_demux_meta, "Found embedded art: %s (%s) is %i bytes",
psz_name, psz_mime, i_data );

p_attachment = vlc_input_attachment_New( psz_name, psz_mime,
psz_description, p_data, i_data );
free( p_data );
}
else
{
StringList block_picture_list { tag->fieldListMap()[ "METADATA_BLOCK_PICTURE" ] };
if( block_picture_list.size() == 0 )
return;

uint8_t *p_data;
int i_cover_score;
int i_cover_idx;
int i_data = vlc_b64_decode_binary( &p_data, block_picture_list[0].toCString(false) );
i_cover_score = i_cover_idx = 0;
/* TODO: Use i_cover_score / i_cover_idx to select the picture. */
p_attachment = ParseFlacPicture( p_data, i_data, 0,
&i_cover_score, &i_cover_idx );
free( p_data );
}

if (p_attachment) {
TAB_APPEND_CAST( (input_attachment_t**),
p_demux_meta->i_attachments, p_demux_meta->attachments,
p_attachment );

char *psz_url;
if( asprintf( &psz_url, "attachment://%s", p_attachment->psz_name ) != -1 ) {
vlc_meta_SetArtURL( p_meta, psz_url );
free( psz_url );
}
}
// Taglib extracts if(key == "METADATA_BLOCK_PICTURE" || key == "COVERART")
ProcessAPICListFromFLAC( tag->pictureList(), p_demux_meta, p_meta );
}

/**
Expand Down

0 comments on commit e4b04ce

Please sign in to comment.