Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> --- av_packet_pack_dictionary() returns NULL in case the dictionary's count is zero; but given that the dict API does not return such dicts at all, I have not added any check for this.
libavdevice/lavfi.c | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/libavdevice/lavfi.c b/libavdevice/lavfi.c index 5e814eada8..bafc3275c9 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.20.1 _______________________________________________ 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".