diff options
author | Paul B Mahol <onemda@gmail.com> | 2017-01-16 13:07:45 +0100 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2017-01-19 21:06:34 +0100 |
commit | 8a1759ad46f05375c957f33049b4592befbcb224 (patch) | |
tree | 2d37ed4e5b25e3a3cce5adfc4cf7ed8dc3098603 | |
parent | 546e29d1f5340b52d14ea2e8c5a7cb1b096a4f4d (diff) | |
download | ffmpeg-8a1759ad46f05375c957f33049b4592befbcb224.tar.gz |
avcodec/exr: export writer info into frame metadata
Signed-off-by: Paul B Mahol <onemda@gmail.com>
-rw-r--r-- | libavcodec/exr.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/libavcodec/exr.c b/libavcodec/exr.c index 0c2e5d2c40..034920ff6c 100644 --- a/libavcodec/exr.c +++ b/libavcodec/exr.c @@ -1303,8 +1303,9 @@ static int check_header_variable(EXRContext *s, return var_size; } -static int decode_header(EXRContext *s) +static int decode_header(EXRContext *s, AVFrame *frame) { + AVDictionary *metadata = NULL; int magic_number, version, i, flags, sar = 0; int layer_match = 0; @@ -1577,6 +1578,14 @@ static int decode_header(EXRContext *s) } continue; + } else if ((var_size = check_header_variable(s, "writer", + "string", 1)) >= 0) { + uint8_t key[256] = { 0 }; + + bytestream2_get_buffer(&s->gb, key, FFMIN(sizeof(key) - 1, var_size)); + av_dict_set(&metadata, "writer", key, 0); + + continue; } // Check if there are enough bytes for a header @@ -1612,6 +1621,8 @@ static int decode_header(EXRContext *s) return AVERROR_INVALIDDATA; } + av_frame_set_metadata(frame, metadata); + // aaand we are done bytestream2_skip(&s->gb, 1); return 0; @@ -1631,7 +1642,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, bytestream2_init(&s->gb, avpkt->data, avpkt->size); - if ((ret = decode_header(s)) < 0) + if ((ret = decode_header(s, picture)) < 0) return ret; switch (s->pixel_type) { |