[FFmpeg-devel] [PATCH] lavf/id3v2enc: fix cover art display on some software

Matthieu Bouron matthieu.bouron at gmail.com
Wed May 29 20:05:42 CEST 2013


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;
+
+    cur_pos = avio_tell(pb);
     avio_seek(pb, id3->size_pos, SEEK_SET);
     id3v2_put_size(pb, id3->len);
     avio_seek(pb, cur_pos, SEEK_SET);
diff --git a/tests/ref/lavf-fate/mp3 b/tests/ref/lavf-fate/mp3
index 361314b..6f201e0 100644
--- a/tests/ref/lavf-fate/mp3
+++ b/tests/ref/lavf-fate/mp3
@@ -1,3 +1,3 @@
-7fcf80c2059b5c058a6cdd2e2f798b6c *./tests/data/lavf-fate/lavf.mp3
-96366 ./tests/data/lavf-fate/lavf.mp3
+6bdea919dc6856d76ef2553698e2b0d3 *./tests/data/lavf-fate/lavf.mp3
+96376 ./tests/data/lavf-fate/lavf.mp3
 ./tests/data/lavf-fate/lavf.mp3 CRC=0x6c9850fe
-- 
1.8.2.3



More information about the ffmpeg-devel mailing list