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)

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to