[FFmpeg-cvslog] mov: Read alternate absolute path in dref alis

Vittorio Giovara git at videolan.org
Mon Apr 20 05:59:11 CEST 2015


ffmpeg | branch: master | Vittorio Giovara <vittorio.giovara at gmail.com> | Tue Apr  7 15:06:04 2015 +0200| [376589e5dd72aa2dd42500f456fca303fcdcad85] | committer: Vittorio Giovara

mov: Read alternate absolute path in dref alis

Absolute paths can be stored in alis type 2 and 18 according to my research:
the first is the canonical MacOS filepath, with path level separated by
colons, and the volume name within the filepath, while the second should be the
absolute filesystem path from the mount point.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=376589e5dd72aa2dd42500f456fca303fcdcad85
---

 libavformat/mov.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 98822af..2704dfb 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -518,12 +518,14 @@ static int mov_read_dref(MOVContext *c, AVIOContext *pb, MOVAtom atom)
                 av_log(c->fc, AV_LOG_DEBUG, "type %d, len %d\n", type, len);
                 if (len&1)
                     len += 1;
-                if (type == 2) { // absolute path
+                if (type == 2 || type == 18) { // absolute path
                     av_free(dref->path);
                     dref->path = av_mallocz(len+1);
                     if (!dref->path)
                         return AVERROR(ENOMEM);
                     avio_read(pb, dref->path, len);
+                    if (type == 18) // no additional processing needed
+                        continue;
                     if (len > volume_len && !strncmp(dref->path, dref->volume, volume_len)) {
                         len -= volume_len;
                         memmove(dref->path, dref->path+volume_len, len);



More information about the ffmpeg-cvslog mailing list