diff options
author | Paul B Mahol <onemda@gmail.com> | 2012-07-16 00:55:18 +0000 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2012-07-17 01:23:35 +0000 |
commit | 3071af6cf20c0d8a7d91b68fdd1308d9eda48e69 (patch) | |
tree | 36e75dab054722c61b3050047a7c83457e05e845 /libavcodec/tiff.c | |
parent | 292850b634240045805e3c2001aed6f046034e93 (diff) | |
download | ffmpeg-3071af6cf20c0d8a7d91b68fdd1308d9eda48e69.tar.gz |
tiff: read more tags of type string
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavcodec/tiff.c')
-rw-r--r-- | libavcodec/tiff.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c index d3ec466a59..47c86453c0 100644 --- a/libavcodec/tiff.c +++ b/libavcodec/tiff.c @@ -291,12 +291,32 @@ static int add_shorts_metadata(int count, const char *name, return 0; } +static int add_string_metadata(int count, const char *name, + TiffContext *s) +{ + char *value; + + if (bytestream2_get_bytes_left(&s->gb) < count) + return AVERROR_INVALIDDATA; + + value = av_malloc(count + 1); + if (!value) + return AVERROR(ENOMEM); + + bytestream2_get_bufferu(&s->gb, value, count); + value[count] = 0; + + av_dict_set(&s->picture.metadata, name, value, AV_DICT_DONT_STRDUP_VAL); + return 0; +} + static int add_metadata(int count, int type, const char *name, const char *sep, TiffContext *s) { switch(type) { case TIFF_DOUBLE: return add_doubles_metadata(count, name, sep, s); case TIFF_SHORT : return add_shorts_metadata(count, name, sep, s); + case TIFF_STRING: return add_string_metadata(count, name, s); default : return AVERROR_INVALIDDATA; }; } @@ -913,6 +933,39 @@ static int tiff_decode_tag(TiffContext *s) } } break; + case TIFF_ARTIST: + ADD_METADATA(count, "artist", NULL); + break; + case TIFF_COPYRIGHT: + ADD_METADATA(count, "copyright", NULL); + break; + case TIFF_DATE: + ADD_METADATA(count, "date", NULL); + break; + case TIFF_DOCUMENT_NAME: + ADD_METADATA(count, "document_name", NULL); + break; + case TIFF_HOST_COMPUTER: + ADD_METADATA(count, "computer", NULL); + break; + case TIFF_IMAGE_DESCRIPTION: + ADD_METADATA(count, "description", NULL); + break; + case TIFF_MAKE: + ADD_METADATA(count, "make", NULL); + break; + case TIFF_MODEL: + ADD_METADATA(count, "model", NULL); + break; + case TIFF_PAGE_NAME: + ADD_METADATA(count, "page_name", NULL); + break; + case TIFF_PAGE_NUMBER: + ADD_METADATA(count, "page_number", " / "); + break; + case TIFF_SOFTWARE_NAME: + ADD_METADATA(count, "software", NULL); + break; default: av_log(s->avctx, AV_LOG_DEBUG, "Unknown or unsupported tag %d/0X%0X\n", tag, tag); |