diff options
Diffstat (limited to 'libavdevice')
-rw-r--r-- | libavdevice/lavfi.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/libavdevice/lavfi.c b/libavdevice/lavfi.c index 944794fb87..82c5844fab 100644 --- a/libavdevice/lavfi.c +++ b/libavdevice/lavfi.c @@ -27,6 +27,7 @@ #include "float.h" /* DBL_MIN, DBL_MAX */ +#include "libavutil/bprint.h" #include "libavutil/log.h" #include "libavutil/mem.h" #include "libavutil/opt.h" @@ -339,6 +340,28 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt) memcpy(pkt->data, ref->data[0], size); } + if (ref->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(ref->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); + return AVERROR(ENOMEM); + } + memcpy(metadata, meta_buf.str, meta_buf.len); + av_bprint_finalize(&meta_buf, NULL); + } + pkt->stream_index = stream_idx; pkt->pts = ref->pts; pkt->pos = ref->pos; |