[FFmpeg-devel] [PATCH v2 2/3] libavcodec/flacdec: parse vorbis metadata from ogg packets, add them to the next decoded frame.
Romain Beauxis
romain.beauxis at gmail.com
Tue Feb 4 13:15:20 EET 2025
This is the main patch. Parse ogg comments in ogg packets with comment,
keep them in pending_metadata and copy them to the next decoded audio
frame.
---
libavcodec/flacdec.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/libavcodec/flacdec.c b/libavcodec/flacdec.c
index ad921a1bd1..03a68cdfef 100644
--- a/libavcodec/flacdec.c
+++ b/libavcodec/flacdec.c
@@ -37,6 +37,7 @@
#include "libavutil/crc.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
+#include "libavformat/oggdec.h"
#include "avcodec.h"
#include "codec_internal.h"
#include "get_bits.h"
@@ -68,6 +69,8 @@ typedef struct FLACContext {
unsigned int decoded_buffer_size_33bps;
int buggy_lpc; ///< use workaround for old lavc encoded files
+ AVDictionary *pending_metadata;
+
FLACDSPContext dsp;
} FLACContext;
@@ -728,7 +731,8 @@ static int flac_decode_frame(AVCodecContext *avctx, AVFrame *frame,
}
if (buf_size > 0 && (*buf & 0x7F) == FLAC_METADATA_TYPE_VORBIS_COMMENT) {
- av_log(s->avctx, AV_LOG_DEBUG, "skipping vorbis comment\n");
+ av_dict_free(&s->pending_metadata);
+ ff_vorbis_comment(avctx, &s->pending_metadata, buf + 4, buf_size - 4, 1);
return buf_size;
}
@@ -788,6 +792,11 @@ static int flac_decode_frame(AVCodecContext *avctx, AVFrame *frame,
buf_size - bytes_read, buf_size);
}
+ if (s->pending_metadata) {
+ av_dict_copy(&frame->metadata, s->pending_metadata, AV_DICT_APPEND);
+ av_dict_free(&s->pending_metadata);
+ }
+
*got_frame_ptr = 1;
return bytes_read;
@@ -799,6 +808,7 @@ static av_cold int flac_decode_close(AVCodecContext *avctx)
av_freep(&s->decoded_buffer);
av_freep(&s->decoded_buffer_33bps);
+ av_dict_free(&s->pending_metadata);
return 0;
}
--
2.39.5 (Apple Git-154)
More information about the ffmpeg-devel
mailing list