diff mbox

[FFmpeg-devel,2/2] lavf/mov: strip com.apple.quicktime prefix in meta; parse creation date

Message ID 20160910010640.68408-2-rodger.combs@gmail.com
State Superseded
Headers show

Commit Message

Rodger Combs Sept. 10, 2016, 1:06 a.m. UTC
---
 libavformat/mov.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Comments

Michael Niedermayer Sept. 10, 2016, 10:55 a.m. UTC | #1
On Fri, Sep 09, 2016 at 08:06:40PM -0500, Rodger Combs wrote:
> ---
>  libavformat/mov.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/libavformat/mov.c b/libavformat/mov.c
> index 54530e3..b75acd2 100644
> --- a/libavformat/mov.c
> +++ b/libavformat/mov.c
> @@ -42,6 +42,7 @@
>  #include "libavutil/aes_ctr.h"
>  #include "libavutil/sha.h"
>  #include "libavutil/timecode.h"
> +#include "libavutil/parseutils.h"
>  #include "libavcodec/ac3tab.h"
>  #include "libavcodec/mpegaudiodecheader.h"
>  #include "avformat.h"
> @@ -476,6 +477,21 @@ retry:
>                  return ret;
>              }
>              str[str_size] = 0;
> +            if (!strcmp(key, "com.apple.quicktime.creationdate")) {
> +                struct tm *ptm, tmbuf;
> +                int64_t timeval;
> +                if (av_parse_time(&timeval, str, 0) >= 0) {
> +                    time_t timet = timeval / 1000000;
> +                    if (ptm = gmtime_r(&timet, &tmbuf)) {
> +                        strftime(str, str_size, "%Y-%m-%d %H:%M:%S", ptm);
> +                        key = "creation_time";
> +                    }
> +                }
> +            } else if (!strcmp(key, "com.apple.quicktime.location.ISO6709")) {
> +                key = "location";
> +            } else if (!strncmp(key, "com.apple.quicktime.", 20)) {
> +                key += 20;
> +            }
>          }

this causes language specific entries no longer to be listed together
with their "parent" entries:
is this missing some hadling of langauge specific stuff ?
also off topic but we should sort metadata for display so related
tags appear together

ticket/4012/IMG_4596.MOV

     major_brand     : qt
     minor_version   : 0
-    creation_time   : 2014-10-05T10:06:36.000000Z
+    make-eng        : Apple
     encoder         : 8.0.2
     encoder-eng     : 8.0.2
     date            : 2014-10-05T18:06:36+0800
     date-eng        : 2014-10-05T18:06:36+0800
-    location        : +06.2271+099.7476+018.026/
+    software        : 8.0.2
     location-eng    : +06.2271+099.7476+018.026/
-    model           : iPhone 6
+    creation_time   : 2014-10-05T10:06:36.000
     model-eng       : iPhone 6
+    location        : +06.2271+099.7476+018.026/
+    model           : iPhone 6
     make            : Apple
-    make-eng        : Apple
       rotate          : 180
       creation_time   : 2014-10-05T10:06:36.000000Z
       handler_name    : Core Media Data Handler


[...]
Rodger Combs Sept. 13, 2016, 1:24 a.m. UTC | #2
> On Sep 10, 2016, at 05:55, Michael Niedermayer <michael@niedermayer.cc> wrote:
> 
> On Fri, Sep 09, 2016 at 08:06:40PM -0500, Rodger Combs wrote:
>> ---
>> libavformat/mov.c | 16 ++++++++++++++++
>> 1 file changed, 16 insertions(+)
>> 
>> diff --git a/libavformat/mov.c b/libavformat/mov.c
>> index 54530e3..b75acd2 100644
>> --- a/libavformat/mov.c
>> +++ b/libavformat/mov.c
>> @@ -42,6 +42,7 @@
>> #include "libavutil/aes_ctr.h"
>> #include "libavutil/sha.h"
>> #include "libavutil/timecode.h"
>> +#include "libavutil/parseutils.h"
>> #include "libavcodec/ac3tab.h"
>> #include "libavcodec/mpegaudiodecheader.h"
>> #include "avformat.h"
>> @@ -476,6 +477,21 @@ retry:
>>                 return ret;
>>             }
>>             str[str_size] = 0;
>> +            if (!strcmp(key, "com.apple.quicktime.creationdate")) {
>> +                struct tm *ptm, tmbuf;
>> +                int64_t timeval;
>> +                if (av_parse_time(&timeval, str, 0) >= 0) {
>> +                    time_t timet = timeval / 1000000;
>> +                    if (ptm = gmtime_r(&timet, &tmbuf)) {
>> +                        strftime(str, str_size, "%Y-%m-%d %H:%M:%S", ptm);
>> +                        key = "creation_time";
>> +                    }
>> +                }
>> +            } else if (!strcmp(key, "com.apple.quicktime.location.ISO6709")) {
>> +                key = "location";
>> +            } else if (!strncmp(key, "com.apple.quicktime.", 20)) {
>> +                key += 20;
>> +            }
>>         }
> 
> this causes language specific entries no longer to be listed together
> with their "parent" entries:

Huh; interesting. Not sure why this happens, but also not sure if it matters?

> is this missing some hadling of langauge specific stuff ?

Nothing I'm aware of, but I could easily be missing something.

> also off topic but we should sort metadata for display so related
> tags appear together

Sounds worthwhile, but yeah out-of-scope here.

> 
> ticket/4012/IMG_4596.MOV
> 
>     major_brand     : qt
>     minor_version   : 0
> -    creation_time   : 2014-10-05T10:06:36.000000Z
> +    make-eng        : Apple
>     encoder         : 8.0.2
>     encoder-eng     : 8.0.2
>     date            : 2014-10-05T18:06:36+0800
>     date-eng        : 2014-10-05T18:06:36+0800
> -    location        : +06.2271+099.7476+018.026/
> +    software        : 8.0.2
>     location-eng    : +06.2271+099.7476+018.026/
> -    model           : iPhone 6
> +    creation_time   : 2014-10-05T10:06:36.000
>     model-eng       : iPhone 6
> +    location        : +06.2271+099.7476+018.026/
> +    model           : iPhone 6
>     make            : Apple
> -    make-eng        : Apple
>       rotate          : 180
>       creation_time   : 2014-10-05T10:06:36.000000Z
>       handler_name    : Core Media Data Handler
> 
> 
> [...]
> 
> -- 
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
> 
> Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org>
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel <http://ffmpeg.org/mailman/listinfo/ffmpeg-devel>
Michael Niedermayer April 19, 2017, 1:54 a.m. UTC | #3
On Mon, Sep 12, 2016 at 08:24:44PM -0500, Rodger Combs wrote:
> 
> > On Sep 10, 2016, at 05:55, Michael Niedermayer <michael@niedermayer.cc> wrote:
> > 
> > On Fri, Sep 09, 2016 at 08:06:40PM -0500, Rodger Combs wrote:
> >> ---
> >> libavformat/mov.c | 16 ++++++++++++++++
> >> 1 file changed, 16 insertions(+)
> >> 
> >> diff --git a/libavformat/mov.c b/libavformat/mov.c
> >> index 54530e3..b75acd2 100644
> >> --- a/libavformat/mov.c
> >> +++ b/libavformat/mov.c
> >> @@ -42,6 +42,7 @@
> >> #include "libavutil/aes_ctr.h"
> >> #include "libavutil/sha.h"
> >> #include "libavutil/timecode.h"
> >> +#include "libavutil/parseutils.h"
> >> #include "libavcodec/ac3tab.h"
> >> #include "libavcodec/mpegaudiodecheader.h"
> >> #include "avformat.h"
> >> @@ -476,6 +477,21 @@ retry:
> >>                 return ret;
> >>             }
> >>             str[str_size] = 0;
> >> +            if (!strcmp(key, "com.apple.quicktime.creationdate")) {
> >> +                struct tm *ptm, tmbuf;
> >> +                int64_t timeval;
> >> +                if (av_parse_time(&timeval, str, 0) >= 0) {
> >> +                    time_t timet = timeval / 1000000;
> >> +                    if (ptm = gmtime_r(&timet, &tmbuf)) {
> >> +                        strftime(str, str_size, "%Y-%m-%d %H:%M:%S", ptm);
> >> +                        key = "creation_time";
> >> +                    }
> >> +                }
> >> +            } else if (!strcmp(key, "com.apple.quicktime.location.ISO6709")) {
> >> +                key = "location";
> >> +            } else if (!strncmp(key, "com.apple.quicktime.", 20)) {
> >> +                key += 20;
> >> +            }
> >>         }
> > 
> > this causes language specific entries no longer to be listed together
> > with their "parent" entries:
> 
> Huh; interesting. Not sure why this happens, but also not sure if it matters?

doesnt matter

btw this patch seems to have been forgotten

[...]
diff mbox

Patch

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 54530e3..b75acd2 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -42,6 +42,7 @@ 
 #include "libavutil/aes_ctr.h"
 #include "libavutil/sha.h"
 #include "libavutil/timecode.h"
+#include "libavutil/parseutils.h"
 #include "libavcodec/ac3tab.h"
 #include "libavcodec/mpegaudiodecheader.h"
 #include "avformat.h"
@@ -476,6 +477,21 @@  retry:
                 return ret;
             }
             str[str_size] = 0;
+            if (!strcmp(key, "com.apple.quicktime.creationdate")) {
+                struct tm *ptm, tmbuf;
+                int64_t timeval;
+                if (av_parse_time(&timeval, str, 0) >= 0) {
+                    time_t timet = timeval / 1000000;
+                    if (ptm = gmtime_r(&timet, &tmbuf)) {
+                        strftime(str, str_size, "%Y-%m-%d %H:%M:%S", ptm);
+                        key = "creation_time";
+                    }
+                }
+            } else if (!strcmp(key, "com.apple.quicktime.location.ISO6709")) {
+                key = "location";
+            } else if (!strncmp(key, "com.apple.quicktime.", 20)) {
+                key += 20;
+            }
         }
         c->fc->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED;
         av_dict_set(&c->fc->metadata, key, str, 0);