diff mbox

[FFmpeg-devel] Make the process for uuid-xmp data faster

Message ID 8846cc23-56f3-40ea-a8b4-0ab8a32b09c1.mengchen.mc@alibaba-inc.com
State Superseded
Headers show

Commit Message

=?GBK?B?w8+zvSjj1bfqKQ==?= Nov. 9, 2016, 3:38 p.m. UTC
avio_skip(AVIOContext *s, int64_t offset) equals avio_seek(s, offset, SEEK_CUR), of course, I have to say which has a better name.
------------------------------------------------------------------From:Steven Liu <lingjiujianke@gmail.com>Time:2016 Nov 9 (Wed) 21:00To:FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>Cc:Oliver <mengchen.mc@alibaba-inc.com>Subject:Re: [FFmpeg-devel] [PATCH] Make the process for uuid-xmp data faster


2016-11-09 17:30 GMT+08:00 Chen Meng <mengchen.mc@alibaba-inc.com>:
---
 libavformat/mov.c | 34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)
diff mbox

Patch

diff --git a/libavformat/mov.c b/libavformat/mov.c
index ca978c2..c358d17 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -4530,24 +4530,30 @@  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;
-        }
+no need newline.          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_seek(pb, len, SEEK_CUR);
 maybe avio_skip? +            if (ret < 0)
+                return ret;
         }
-        av_free(buffer);
     }
     return 0;
 }
--
2.10.2