[Vorbis-dev] Cover art
Tor-Einar Jarnbjo
tor-einar at jarnbjo.name
Wed Apr 1 13:44:39 PDT 2009
Ian Malone schrieb:
> 2009/4/1 Ian Malone <ibmalone at gmail.com>:
>
>> 2009/4/1 Mathias Kunter <mathiaskunter at yahoo.de>:
>>
>>>> arbitrary binary content is most likely not a valid UTF-8 sequence and may
>>>> cause current software to fail.
>>>>
>
> To be honest software should be robust against that for security
> reasons if nothing else, but we should keep to the spec.
>
Sure, but the robustness may just as well be to reject the file, which
is also a kind of failure if you expected the audio to be played :)
> So what we have is base64 encode FLAC block, place in contents of
> BINARY_COVERART tag.
>
> On the wiki the points against the Audio Shell etc. COVERART approach were:
> * no additional information like a description about the cover
> art is provided,
>
This is not related to Base64 vs direct UTF-8 encoding of the data.
> * the base64 string is displayed within many tag editors as plain
> text because of their missing support for this "COVERART" field
>
As shown, the UTF-8 encoded data will be shown if the software treats \0
correctly as a control character and not an end-of-string marker. Trying
to display the UTF-8 encoded binary data as a string is potentially more
risky than displaying the Base64 string, since the UTF-8 string will
contain control characters.
> * it may breaks the playback on hardware players because of a
> large vorbis comment header
>
This is also a potential problem with the FLAC structure.
> * Old C / C++ based implementations don't display the binary data
> as string since it always starts with a zero byte at the first
> position, which is an empty string when interpreted as UTF-8.
>
As shown with WinAmp, the leading \0 may however cause existing software
to completely ignore the comment and remove it, if the file for some
reason is written back to disk.
> * All common picture file formats are supported (jpg, gif, whatever).
>
This is actually not clear from the FLAC specification. Which MIME types
is a compliant Vorbis player required to support? For some picture types
like cover art or leaflet pages, it might even be reasonable to embed a
PDF file.
Unfortunately, the FLAC specification is not very specific and and
allows for quite a few ambiguities and implementation specific details:
- The byte order is not clearly stated. It's only mentioned in the
METADATA_BLOCK_VORBIS_COMMENT field description, that that field uses
little-endian order as opposed to the "usual" big-endian order in other
FLAC fields.
- Why is "-->" used as a pseudo mime type to indicate that the binary
picture data contains a URL to the image instead of the registered MIME
type "text/uri-list"? Which character encoding is used for the URL?
Which protocols must be supported by a Vorbis player: http://, ftp://,
file:// ...?
- How should the fields "width", "height", "colour depth" and "number of
colours" be set for image formats, to which they don't apply? E.g. SVG,
to which none of the fields are applicable, or "colour depth" to
bi-colour (pure black and white) image formats. Are these fields
reasonable at all, if an external image is linked from a URL, since the
image may be replaced and not match the embedded information anymore?
And at last, a specific question to Vorbis integration:
- How should multiple images be embedded? Several METADATA_BLOCK_PICTURE
structs concatenated in one comment field, or several comment fields
with the same name, each containing one METADATA_BLOCK_PICTURE struct?
Some of the picture types indicate that the image order is relevant,
e.g. leaflet pages. If each image is put in separate comment fields,
will e.g. libvorbis (or other Vorbis decoders) retain the comment field
order, so that supporting software is able to show the images in the
correct order?
Regards,
Tor
More information about the Vorbis-dev
mailing list