mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-28 12:32:17 +02:00
vorbiscomment: Add support for embedded cover art
Fixes ticket #2655 Signed-off-by: James Almer <jamrial@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
1e5bbbfcf3
commit
193782216f
libavformat
@ -256,7 +256,8 @@ OBJS-$(CONFIG_OGG_DEMUXER) += oggdec.o \
|
|||||||
oggparsespeex.o \
|
oggparsespeex.o \
|
||||||
oggparsetheora.o \
|
oggparsetheora.o \
|
||||||
oggparsevorbis.o \
|
oggparsevorbis.o \
|
||||||
vorbiscomment.o
|
vorbiscomment.o \
|
||||||
|
flacdec_picture.o
|
||||||
OBJS-$(CONFIG_OGG_MUXER) += oggenc.o \
|
OBJS-$(CONFIG_OGG_MUXER) += oggenc.o \
|
||||||
vorbiscomment.o
|
vorbiscomment.o
|
||||||
OBJS-$(CONFIG_OMA_DEMUXER) += omadec.o pcm.o oma.o
|
OBJS-$(CONFIG_OMA_DEMUXER) += omadec.o pcm.o oma.o
|
||||||
|
@ -24,12 +24,14 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
|
#include "libavutil/base64.h"
|
||||||
#include "libavutil/bswap.h"
|
#include "libavutil/bswap.h"
|
||||||
#include "libavutil/dict.h"
|
#include "libavutil/dict.h"
|
||||||
#include "libavcodec/get_bits.h"
|
#include "libavcodec/get_bits.h"
|
||||||
#include "libavcodec/bytestream.h"
|
#include "libavcodec/bytestream.h"
|
||||||
#include "libavcodec/vorbis_parser.h"
|
#include "libavcodec/vorbis_parser.h"
|
||||||
#include "avformat.h"
|
#include "avformat.h"
|
||||||
|
#include "flacdec.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#include "oggdec.h"
|
#include "oggdec.h"
|
||||||
#include "vorbiscomment.h"
|
#include "vorbiscomment.h"
|
||||||
@ -128,7 +130,22 @@ ff_vorbis_comment(AVFormatContext * as, AVDictionary **m, const uint8_t *buf, in
|
|||||||
memcpy(ct, v, vl);
|
memcpy(ct, v, vl);
|
||||||
ct[vl] = 0;
|
ct[vl] = 0;
|
||||||
|
|
||||||
if (!ogm_chapter(as, tt, ct))
|
if (!strcmp(tt, "METADATA_BLOCK_PICTURE")) {
|
||||||
|
int ret;
|
||||||
|
char *pict = av_malloc(vl);
|
||||||
|
|
||||||
|
if (!pict) {
|
||||||
|
av_log(as, AV_LOG_WARNING, "out-of-memory error. Skipping cover art block.\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ((ret = av_base64_decode(pict, ct, vl)) > 0)
|
||||||
|
ret = ff_flac_parse_picture(as, pict, ret);
|
||||||
|
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_set(m, tt, ct,
|
||||||
AV_DICT_DONT_STRDUP_KEY |
|
AV_DICT_DONT_STRDUP_KEY |
|
||||||
AV_DICT_DONT_STRDUP_VAL);
|
AV_DICT_DONT_STRDUP_VAL);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user