The Extensible Metadata Platform tag can contain various kind of data
which are not strictly related to the video file, such as history of edits
and saves from the project file. So display XMP metadata only when the
user explicitly requires it.
Based on a patch by Marek Fort <[email protected]>.
---
libavformat/isom.h | 1 +
libavformat/mov.c | 6 +++++-
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/libavformat/isom.h b/libavformat/isom.h
index 7e60d8c..c24b962 100644
--- a/libavformat/isom.h
+++ b/libavformat/isom.h
@@ -157,6 +157,7 @@ typedef struct MOVContext {
int chapter_track;
int64_t next_root_atom; ///< offset of the next root atom
int export_all;
+ int export_xmp;
} MOVContext;
int ff_mp4_read_descr_len(AVIOContext *pb);
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 0310544..2d20d7d 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -263,6 +263,8 @@ static int mov_read_udta_string(MOVContext *c,
AVIOContext *pb, MOVAtom atom)
switch (atom.type) {
case MKTAG( '@','P','R','M'): key = "premiere_version"; raw = 1;
break;
case MKTAG( '@','P','R','Q'): key = "quicktime_version"; raw = 1;
break;
+ case MKTAG( 'X','M','P','_'):
+ if (c->export_xmp) { key = "xmp"; raw = 1; }
break;
case MKTAG( 'a','A','R','T'): key = "album_artist";
break;
case MKTAG( 'c','p','r','t'): key = "copyright";
break;
case MKTAG( 'd','e','s','c'): key = "description";
break;
@ -3428,6 +3430,8 @@ static int mov_read_seek(AVFormatContext *s, int
stream_index, int64_t sample_ti
static const AVOption mov_options[] = {
{ "export_all", "List all metadata found", OFFSET(export_all),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, .flags = FLAGS },
+ { "export_xmp", "List all XMP metadata found", OFFSET(export_xmp),
+ AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, .flags = FLAGS },