From 26469aebd39e2cfba8c5c1918ac8d19af4d8ee18 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Sun, 30 Aug 2020 07:02:16 +0200 Subject: [PATCH] avdevice/lavfi: Use av_packet_pack_dictionary() to pack dictionary Signed-off-by: Andreas Rheinhardt --- libavdevice/lavfi.c | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/libavdevice/lavfi.c b/libavdevice/lavfi.c index 72ec1bb9b7c..c04e0b147a1 100644 --- a/libavdevice/lavfi.c +++ b/libavdevice/lavfi.c @@ -444,25 +444,16 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt) frame_metadata = frame->metadata; if (frame_metadata) { - uint8_t *metadata; - AVDictionaryEntry *e = NULL; - AVBPrint meta_buf; - - av_bprint_init(&meta_buf, 0, AV_BPRINT_SIZE_UNLIMITED); - while ((e = av_dict_get(frame_metadata, "", e, AV_DICT_IGNORE_SUFFIX))) { - av_bprintf(&meta_buf, "%s", e->key); - av_bprint_chars(&meta_buf, '\0', 1); - av_bprintf(&meta_buf, "%s", e->value); - av_bprint_chars(&meta_buf, '\0', 1); - } - if (!av_bprint_is_complete(&meta_buf) || - !(metadata = av_packet_new_side_data(pkt, AV_PKT_DATA_STRINGS_METADATA, - meta_buf.len))) { - av_bprint_finalize(&meta_buf, NULL); + int size; + uint8_t *metadata = av_packet_pack_dictionary(frame_metadata, &size); + + if (!metadata) return AVERROR(ENOMEM); + if ((ret = av_packet_add_side_data(pkt, AV_PKT_DATA_STRINGS_METADATA, + metadata, size)) < 0) { + av_freep(&metadata); + return ret; } - memcpy(metadata, meta_buf.str, meta_buf.len); - av_bprint_finalize(&meta_buf, NULL); } if ((ret = create_subcc_packet(avctx, frame, min_pts_sink_idx)) < 0) { -- 2.39.2