[FFmpeg-cvslog] oggvorbisdec: add support for embedded cover art

James Almer git at videolan.org
Sun Oct 13 09:56:02 CEST 2013


ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Tue Jul  9 02:39:10 2013 -0300| [c18375ec8040a9fe0f186b2033dc975883143758] | committer: Anton Khirnov

oggvorbisdec: add support for embedded cover art

Signed-off-by: James Almer <jamrial at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c18375ec8040a9fe0f186b2033dc975883143758
---

 libavformat/Makefile         |    3 ++-
 libavformat/oggparsevorbis.c |   28 +++++++++++++++++++++++++++-
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/libavformat/Makefile b/libavformat/Makefile
index 9ff5a3c..9bc9cdf 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -218,7 +218,8 @@ OBJS-$(CONFIG_OGG_DEMUXER)               += oggdec.o         \
                                             oggparsespeex.o  \
                                             oggparsetheora.o \
                                             oggparsevorbis.o \
-                                            vorbiscomment.o
+                                            vorbiscomment.o  \
+                                            flac_picture.o
 OBJS-$(CONFIG_OGG_MUXER)                 += oggenc.o \
                                             vorbiscomment.o
 OBJS-$(CONFIG_OMA_DEMUXER)               += omadec.o pcm.o oma.o
diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c
index 1804e9a..7468e0d 100644
--- a/libavformat/oggparsevorbis.c
+++ b/libavformat/oggparsevorbis.c
@@ -25,12 +25,14 @@
 #include <stdlib.h>
 
 #include "libavutil/avstring.h"
+#include "libavutil/base64.h"
 #include "libavutil/bswap.h"
 #include "libavutil/dict.h"
 #include "libavcodec/bytestream.h"
 #include "libavcodec/get_bits.h"
 #include "libavcodec/vorbis_parser.h"
 #include "avformat.h"
+#include "flac_picture.h"
 #include "internal.h"
 #include "oggdec.h"
 #include "vorbiscomment.h"
@@ -130,7 +132,31 @@ int ff_vorbis_comment(AVFormatContext *as, AVDictionary **m,
             memcpy(ct, v, vl);
             ct[vl] = 0;
 
-            if (!ogm_chapter(as, tt, ct))
+            /* The format in which the pictures are stored is the FLAC format.
+             * Xiph says: "The binary FLAC picture structure is base64 encoded
+             * and placed within a VorbisComment with the tag name
+             * 'METADATA_BLOCK_PICTURE'. This is the preferred and
+             * recommended way of embedding cover art within VorbisComments."
+             */
+            if (!strcmp(tt, "METADATA_BLOCK_PICTURE")) {
+                int ret;
+                char *pict = av_malloc(vl);
+
+                if (!pict) {
+                    av_freep(&tt);
+                    av_freep(&ct);
+                    return AVERROR(ENOMEM);
+                }
+                if ((ret = av_base64_decode(pict, ct, vl)) > 0)
+                    ret = ff_flac_parse_picture(as, pict, ret);
+                av_freep(&tt);
+                av_freep(&ct);
+                av_freep(&pict);
+                if (ret < 0) {
+                    av_log(as, AV_LOG_WARNING, "Failed to parse cover art block.\n");
+                    continue;
+                }
+            } else if (!ogm_chapter(as, tt, ct))
                 av_dict_set(m, tt, ct,
                             AV_DICT_DONT_STRDUP_KEY |
                             AV_DICT_DONT_STRDUP_VAL);



More information about the ffmpeg-cvslog mailing list