Commit 020b7580 authored by Thierry Foucu's avatar Thierry Foucu Committed by Michael Niedermayer

lavf/mov: Extend extracting XMP in mov files using UUID Box

The UUID is based on http://www.adobe.com/devnet/xmp.html

The patch is made according to XMP SPECIFICATION PART 3 - STORAGE IN
FILES See Table 8
Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent cb8646af
...@@ -3895,6 +3895,10 @@ static int mov_read_uuid(MOVContext *c, AVIOContext *pb, MOVAtom atom) ...@@ -3895,6 +3895,10 @@ static int mov_read_uuid(MOVContext *c, AVIOContext *pb, MOVAtom atom)
0xa5, 0xd4, 0x0b, 0x30, 0xe8, 0x14, 0x11, 0xdd, 0xa5, 0xd4, 0x0b, 0x30, 0xe8, 0x14, 0x11, 0xdd,
0xba, 0x2f, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 0xba, 0x2f, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66
}; };
static const uint8_t uuid_xmp[] = {
0xbe, 0x7a, 0xcf, 0xcb, 0x97, 0xa9, 0x42, 0xe8,
0x9c, 0x71, 0x99, 0x94, 0x91, 0xe3, 0xaf, 0xac
};
if (atom.size < sizeof(uuid) || atom.size == INT64_MAX) if (atom.size < sizeof(uuid) || atom.size == INT64_MAX)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
...@@ -3948,6 +3952,27 @@ static int mov_read_uuid(MOVContext *c, AVIOContext *pb, MOVAtom atom) ...@@ -3948,6 +3952,27 @@ static int mov_read_uuid(MOVContext *c, AVIOContext *pb, MOVAtom atom)
} }
} }
av_free(buffer);
} else if (!memcmp(uuid, uuid_xmp, sizeof(uuid))) {
uint8_t *buffer;
size_t len = atom.size - sizeof(uuid);
buffer = av_mallocz(len + 1);
if (!buffer) {
return AVERROR(ENOMEM);
}
ret = avio_read(pb, buffer, len);
if (ret < 0) {
av_free(buffer);
return ret;
} else if (ret != len) {
av_free(buffer);
return AVERROR_INVALIDDATA;
}
if (c->export_xmp) {
buffer[len] = '\0';
av_dict_set(&c->fc->metadata, "xmp", buffer, 0);
}
av_free(buffer); av_free(buffer);
} }
return 0; return 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment