[FFmpeg-devel] [PATCH] lavf/id3v2enc: fix cover art display on some software
Clément Bœsch
ubitux at gmail.com
Wed May 29 20:16:00 CEST 2013
On Wed, May 29, 2013 at 08:05:42PM +0200, Matthieu Bouron wrote:
> Adding an arbitrary amount of padding bytes at the end of the
> ID3 metadata fixes cover art display for some software (iTunes,
> Traktor, Serato, Torq).
>
> For reference (ID3 metadata):
>
> [ Apic frames ] → cover doesn't show up
> [ Apic frames, Padding ] → ok
> [ Apic frames, ID3 frames ] → ok
> [ ID3 frames, Apic frames ] → cover doesn't show up
> [ ID3 frames, Apic frames, Padding ] → ok
> ---
> libavformat/id3v2enc.c | 14 +++++++++++++-
> tests/ref/lavf-fate/mp3 | 4 ++--
> 2 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/libavformat/id3v2enc.c b/libavformat/id3v2enc.c
> index 60ddbaa..d43d48f 100644
> --- a/libavformat/id3v2enc.c
> +++ b/libavformat/id3v2enc.c
> @@ -28,6 +28,8 @@
> #include "avio.h"
> #include "id3v2.h"
>
> +#define PADDING_BYTES 10
> +
> static void id3v2_put_size(AVIOContext *pb, int size)
> {
> avio_w8(pb, size >> 21 & 0x7f);
> @@ -319,7 +321,17 @@ int ff_id3v2_write_apic(AVFormatContext *s, ID3v2EncContext *id3, AVPacket *pkt)
>
> void ff_id3v2_finish(ID3v2EncContext *id3, AVIOContext *pb)
> {
> - int64_t cur_pos = avio_tell(pb);
> + int i;
> + int64_t cur_pos;
> +
> + /* adding an arbitrary amount of padding bytes at the end of the
> + * ID3 metadata fixes cover art display for some software (iTunes,
> + * Traktor, Serato, Torq) */
> + for (i = 0; i < PADDING_BYTES; i++)
> + avio_w8(pb, 0);
> + id3->len += PADDING_BYTES;
> +
Why not simply:
static const uint8_t pad[10];
avio_write(pb, pad, sizeof(pad));
id3->len += sizeof(pad);
?
[...]
--
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20130529/303efce4/attachment.asc>
More information about the ffmpeg-devel
mailing list