|
|
|
@@ -4776,24 +4776,28 @@ static int mov_read_uuid(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
} 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 = 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; |
|
|
|
} |
|
|
|
buffer[len] = '\0'; |
|
|
|
av_dict_set(&c->fc->metadata, "xmp", buffer, 0); |
|
|
|
av_free(buffer); |
|
|
|
} else { |
|
|
|
// skip all uuid atom, which makes it fast for long uuid-xmp file |
|
|
|
ret = avio_skip(pb, len); |
|
|
|
if (ret < 0) |
|
|
|
return ret; |
|
|
|
} |
|
|
|
av_free(buffer); |
|
|
|
} else if (!memcmp(uuid, uuid_spherical, sizeof(uuid))) { |
|
|
|
size_t len = atom.size - sizeof(uuid); |
|
|
|
ret = mov_parse_uuid_spherical(sc, pb, len); |
|
|
|
|