summaryrefslogtreecommitdiff
path: root/libavcodec/exr.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2017-01-16 13:07:45 +0100
committerPaul B Mahol <onemda@gmail.com>2017-01-19 21:06:34 +0100
commit8a1759ad46f05375c957f33049b4592befbcb224 (patch)
tree2d37ed4e5b25e3a3cce5adfc4cf7ed8dc3098603 /libavcodec/exr.c
parent546e29d1f5340b52d14ea2e8c5a7cb1b096a4f4d (diff)
avcodec/exr: export writer info into frame metadata
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavcodec/exr.c')
-rw-r--r--libavcodec/exr.c15
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) {