lavf/id3v2enc: fix cover art display on some software
authorMatthieu Bouron <matthieu.bouron@gmail.com>
Wed, 29 May 2013 10:05:26 +0000 (12:05 +0200)
committerPaul B Mahol <onemda@gmail.com>
Thu, 30 May 2013 21:16:57 +0000 (21:16 +0000)
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
libavformat/version.h
tests/ref/lavf-fate/mp3

index 60ddbaa..f7c37eb 100644 (file)
 #include "libavutil/intreadwrite.h"
 #include "avformat.h"
 #include "avio.h"
+#include "avio_internal.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 +322,15 @@ 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);
+    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) */
+    ffio_fill(pb, 0, PADDING_BYTES);
+    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);
index 8517fb1..8db210e 100644 (file)
@@ -31,7 +31,7 @@
 
 #define LIBAVFORMAT_VERSION_MAJOR 55
 #define LIBAVFORMAT_VERSION_MINOR  8
-#define LIBAVFORMAT_VERSION_MICRO 101
+#define LIBAVFORMAT_VERSION_MICRO 102
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
                                                LIBAVFORMAT_VERSION_MINOR, \
index 361314b..6f201e0 100644 (file)
@@ -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