summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/ffmpeg/libavcodec/exif.c
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/ffmpeg/libavcodec/exif.c')
-rw-r--r--chromium/third_party/ffmpeg/libavcodec/exif.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/chromium/third_party/ffmpeg/libavcodec/exif.c b/chromium/third_party/ffmpeg/libavcodec/exif.c
index 96464261c10..a980da2a7be 100644
--- a/chromium/third_party/ffmpeg/libavcodec/exif.c
+++ b/chromium/third_party/ffmpeg/libavcodec/exif.c
@@ -48,9 +48,11 @@ static int exif_add_metadata(AVCodecContext *avctx, int count, int type,
{
switch(type) {
case TIFF_DOUBLE : return ff_tadd_doubles_metadata(count, name, sep, gb, le, metadata);
- case TIFF_SHORT : return ff_tadd_shorts_metadata(count, name, sep, gb, le, metadata);
+ case TIFF_SSHORT : return ff_tadd_shorts_metadata(count, name, sep, gb, le, 1, metadata);
+ case TIFF_SHORT : return ff_tadd_shorts_metadata(count, name, sep, gb, le, 0, metadata);
+ case TIFF_SBYTE : return ff_tadd_bytes_metadata(count, name, sep, gb, le, 1, metadata);
case TIFF_BYTE :
- case TIFF_UNDEFINED: return ff_tadd_bytes_metadata(count, name, sep, gb, le, metadata);
+ case TIFF_UNDEFINED: return ff_tadd_bytes_metadata(count, name, sep, gb, le, 0, metadata);
case TIFF_STRING : return ff_tadd_string_metadata(count, name, gb, le, metadata);
case TIFF_SRATIONAL:
case TIFF_RATIONAL : return ff_tadd_rational_metadata(count, name, sep, gb, le, metadata);
@@ -76,11 +78,16 @@ static int exif_decode_tag(AVCodecContext *avctx, GetByteContext *gbytes, int le
ff_tread_tag(gbytes, le, &id, &type, &count, &cur_pos);
+ if (!bytestream2_tell(gbytes)) {
+ bytestream2_seek(gbytes, cur_pos, SEEK_SET);
+ return 0;
+ }
+
// read count values and add it metadata
// store metadata or proceed with next IFD
ret = ff_tis_ifd(id);
if (ret) {
- ret = ff_exif_decode_ifd(avctx, gbytes, le, depth + 1, metadata);
+ ret = avpriv_exif_decode_ifd(avctx, gbytes, le, depth + 1, metadata);
} else {
const char *name = exif_get_tag_name(id);
char *use_name = (char*) name;
@@ -107,8 +114,8 @@ static int exif_decode_tag(AVCodecContext *avctx, GetByteContext *gbytes, int le
}
-int ff_exif_decode_ifd(AVCodecContext *avctx, GetByteContext *gbytes, int le,
- int depth, AVDictionary **metadata)
+int avpriv_exif_decode_ifd(AVCodecContext *avctx, GetByteContext *gbytes, int le,
+ int depth, AVDictionary **metadata)
{
int i, ret;
int entries;