Support for METABLOCK_DATA_PICTURE in xiphcomments?

Tim De Baets tdebaets98 at yahoo.com
Fri Dec 13 21:57:54 UTC 2013


Hi Martin,

It's already possible to add a METABLOCK_DATA_PICTURE to Vorbis comments 
using current versions of TagLib. Create a vanilla FLAC::Picture object, 
set its picture data and optionally other fields (type, mime type, 
description...), and render() the object to a ByteVector.

You will then have to Base64-encode the ByteVector's data yourself, or 
use a library. In my WMP Tag Plus plug-in, I use libb64 
<http://libb64.sourceforge.net> for this.

Here's a code excerpt from WMP Tag Plus:

void WritePicture(TagLib::Ogg::XiphComment* comments, WM_PICTURE* picture,
                   bool* modified)
{
     if (picture && (!picture->pbData || picture->dwDataLen == 0))
         return;

     TagLib::StringList pictureBlocks = 
comments->fieldListMap()[COVERART_TAGNAME];
     for (unsigned int i = 0; i < pictureBlocks.size(); i++)
     {
         unsigned int size;
         std::string block;
         if (GetFrontCoverPictureBlock(pictureBlocks, i, &size, &block))
         {
             comments->removeField(COVERART_TAGNAME, pictureBlocks[i]);
             *modified = true;
         }
     }

     if (picture)
     {
         TagLib::FLAC::Picture flacPicture;
         SetFLACPictureFromWMPicture(picture, &flacPicture);
         TagLib::ByteVector block = flacPicture.render();
         unsigned int size = block.size();
         base64::Encoder encoder;
         char* encodedBlock = new char[size * 2 + 1];
         unsigned int encodedSize = encoder.encode(block.data(), size,
             encodedBlock);
         encodedSize += encoder.encode_end(encodedBlock + encodedSize);
         encodedBlock[encodedSize] = '\0';
         comments->addField(COVERART_TAGNAME, encodedBlock, false);
         *modified = true;
     }
}

Kind regards,

Tim De Baets

Martin Brodbeck wrote:
> Hello,
>
> I recently learned that the recommended way of adding cover art to ogg files
> (vorbis comments) is to use METABLOCK_DATA_PICTURE instead of the unofficial
> COVERART field, just likeit is done in FLAC files (see [1]).
>
> By the way, if you encode an opus file from flac (with a flac picture) using
> opusenc (from opus-tools >= 0.1.7), it uses METABLOCK_DATA_PICTURE.
>
> AFAIK, taglib supports FLAC pictures very well. Since the recommended
> xiphcomment way is exactly the same as in FLAC, it would be nice to have the
> same support here, I think.
>
> Are there any plans to add this?
>
> Thanks,
> Martin
>
> [1]http://wiki.xiph.org/VorbisComment#Cover_art
> _______________________________________________
> taglib-devel mailing list
> taglib-devel at kde.org
> https://mail.kde.org/mailman/listinfo/taglib-devel



More information about the taglib-devel mailing list