Merge commit '82ee7d0dda0fec8cdb670f4e844bf5c2927ad9de'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 26 Oct 2014 01:38:26 +0000 (02:38 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 26 Oct 2014 01:38:26 +0000 (02:38 +0100)
* commit '82ee7d0dda0fec8cdb670f4e844bf5c2927ad9de':
  Use gmtime_r instead of gmtime and localtime_r instead of localtime

Conflicts:
libavformat/mov.c
libavformat/mxfenc.c
libavformat/wtvdec.c
libavutil/parseutils.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/mov.c
libavformat/mxfenc.c
libavformat/wtvdec.c
libavutil/parseutils.c

  #include "libavutil/intreadwrite.h"
  #include "libavutil/intfloat.h"
  #include "libavutil/mathematics.h"
+ #include "libavutil/time_internal.h"
  #include "libavutil/avstring.h"
  #include "libavutil/dict.h"
 +#include "libavutil/opt.h"
 +#include "libavutil/timecode.h"
  #include "libavcodec/ac3tab.h"
  #include "avformat.h"
  #include "internal.h"
@@@ -809,12 -740,9 +810,12 @@@ static void mov_metadata_creation_time(
  {
      char buffer[32];
      if (time) {
-         struct tm *ptm;
+         struct tm *ptm, tmbuf;
 -        time -= 2082844800;  /* seconds between 1904-01-01 and Epoch */
 -        ptm = gmtime_r(&time, &tmbuf);
 +        time_t timet;
 +        if(time >= 2082844800)
 +            time -= 2082844800;  /* seconds between 1904-01-01 and Epoch */
 +        timet = time;
-         ptm = gmtime(&timet);
++        ptm = gmtime_r(&timet, &tmbuf);
          if (!ptm) return;
          if (strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", ptm))
              av_dict_set(metadata, "creation_time", buffer, 0);
  #include <math.h>
  #include <time.h>
  
 +#include "libavutil/opt.h"
  #include "libavutil/random_seed.h"
 +#include "libavutil/timecode.h"
 +#include "libavutil/avassert.h"
+ #include "libavutil/time_internal.h"
  #include "libavcodec/bytestream.h"
 +#include "libavcodec/dnxhddata.h"
  #include "audiointerleave.h"
  #include "avformat.h"
 +#include "avio_internal.h"
  #include "internal.h"
  #include "mxf.h"
 -
 -static const int NTSC_samples_per_frame[] = { 1602, 1601, 1602, 1601, 1602, 0 };
 -static const int PAL_samples_per_frame[]  = { 1920, 0 };
 +#include "config.h"
  
  extern AVOutputFormat ff_mxf_d10_muxer;
  
  #include "libavutil/channel_layout.h"
  #include "libavutil/intreadwrite.h"
  #include "libavutil/intfloat.h"
 -#include "libavutil/dict.h"
+ #include "libavutil/time_internal.h"
  #include "avformat.h"
  #include "internal.h"
 -#include "riff.h"
 -#include "asf.h"
 +#include "wtv.h"
  #include "mpegts.h"
  
  /* Macros for formating GUIDs */
@@@ -381,47 -425,47 +382,50 @@@ static int read_probe(AVProbeData *p
  
  /**
   * Convert win32 FILETIME to ISO-8601 string
 + * @return <0 on error
   */
 -static void filetime_to_iso8601(char *buf, int buf_size, int64_t value)
 +static int filetime_to_iso8601(char *buf, int buf_size, int64_t value)
  {
      time_t t = (value / 10000000LL) - 11644473600LL;
-     struct tm *tm = gmtime(&t);
+     struct tm tmbuf;
+     struct tm *tm = gmtime_r(&t, &tmbuf);
 -    if (tm) {
 -        if (!strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", tm))
 -            buf[0] = '\0';
 -    } else
 -        buf[0] = '\0';
 +    if (!tm)
 +        return -1;
 +    if (!strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", tm))
 +        return -1;
 +    return 0;
  }
  
  /**
   * Convert crazy time (100ns since 1 Jan 0001) to ISO-8601 string
 + * @return <0 on error
   */
 -static void crazytime_to_iso8601(char *buf, int buf_size, int64_t value)
 +static int crazytime_to_iso8601(char *buf, int buf_size, int64_t value)
  {
      time_t t = (value / 10000000LL) - 719162LL*86400LL;
-     struct tm *tm = gmtime(&t);
+     struct tm tmbuf;
+     struct tm *tm = gmtime_r(&t, &tmbuf);
 -    if (tm) {
 -        if (!strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", tm))
 -            buf[0] = '\0';
 -    } else
 -        buf[0] = '\0';
 +    if (!tm)
 +        return -1;
 +    if (!strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", tm))
 +        return -1;
 +    return 0;
  }
  
  /**
   * Convert OLE DATE to ISO-8601 string
 + * @return <0 on error
   */
 -static void oledate_to_iso8601(char *buf, int buf_size, int64_t value)
 +static int oledate_to_iso8601(char *buf, int buf_size, int64_t value)
  {
 -    time_t t = 631112400LL + 86400*av_int2double(value);
 +    time_t t = (av_int2double(value) - 25569.0) * 86400;
-     struct tm *tm= gmtime(&t);
+     struct tm tmbuf;
 -    struct tm *tm = gmtime_r(&t, &tmbuf);
 -    if (tm) {
 -        if (!strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", tm))
 -            buf[0] = '\0';
 -    } else
 -        buf[0] = '\0';
++    struct tm *tm= gmtime_r(&t, &tmbuf);
 +    if (!tm)
 +        return -1;
 +    if (!strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", tm))
 +        return -1;
 +    return 0;
  }
  
  static void get_attachment(AVFormatContext *s, AVIOContext *pb, int length)
  #include "eval.h"
  #include "log.h"
  #include "random_seed.h"
+ #include "time_internal.h"
  #include "parseutils.h"
  
 +#ifdef TEST
 +
 +#define av_get_random_seed av_get_random_seed_deterministic
 +static uint32_t av_get_random_seed_deterministic(void);
 +
 +#define time(t) 1331972053
 +
 +#endif
 +
 +int av_parse_ratio(AVRational *q, const char *str, int max,
 +                   int log_offset, void *log_ctx)
 +{
 +    char c;
 +    int ret;
 +
 +    if (sscanf(str, "%d:%d%c", &q->num, &q->den, &c) != 2) {
 +        double d;
 +        ret = av_expr_parse_and_eval(&d, str, NULL, NULL,
 +                                     NULL, NULL, NULL, NULL,
 +                                     NULL, log_offset, log_ctx);
 +        if (ret < 0)
 +            return ret;
 +        *q = av_d2q(d, max);
 +    } else {
 +        av_reduce(&q->num, &q->den, q->num, q->den, max);
 +    }
 +
 +    return 0;
 +}
 +
  typedef struct {
      const char *abbr;
      int width, height;
@@@ -549,11 -482,9 +550,11 @@@ time_t av_timegm(struct tm *tm
  
  int av_parse_time(int64_t *timeval, const char *timestr, int duration)
  {
 -    const char *p;
 +    const char *p, *q;
      int64_t t;
-     struct tm dt = { 0 };
 +    time_t now;
+     struct tm dt = { 0 }, tmbuf;
 +    int today = 0, negative = 0, microseconds = 0;
      int i;
      static const char * const date_fmt[] = {
          "%Y-%m-%d",
      if (duration) {
          t = dt.tm_hour * 3600 + dt.tm_min * 60 + dt.tm_sec;
      } else {
 -        dt.tm_isdst = -1;       /* unknown */
 -        if (is_utc) {
 -            t = av_timegm(&dt);
 -        } else {
 -            t = mktime(&dt);
 +        int is_utc = *q == 'Z' || *q == 'z';
 +        q += is_utc;
 +        if (today) { /* fill in today's date */
-             struct tm dt2 = is_utc ? *gmtime(&now) : *localtime(&now);
++            struct tm dt2 = is_utc ? *gmtime_r(&now, &tmbuf) : *localtime_r(&now, &tmbuf);
 +            dt2.tm_hour = dt.tm_hour;
 +            dt2.tm_min  = dt.tm_min;
 +            dt2.tm_sec  = dt.tm_sec;
 +            dt = dt2;
          }
 +        t = is_utc ? av_timegm(&dt) : mktime(&dt);
      }
  
 -    t *= 1000000;
 +    /* Check that we are at the end of the string */
 +    if (*q)
 +        return AVERROR(EINVAL);
  
 -    /* parse the .m... part */
 -    if (*q == '.') {
 -        int val, n;
 -        q++;
 -        for (val = 0, n = 100000; n >= 1; n /= 10, q++) {
 -            if (!av_isdigit(*q))
 -                break;
 -            val += n * (*q - '0');
 -        }
 -        t += val;
 -    }
 +    t *= 1000000;
 +    t += microseconds;
      *timeval = negative ? -t : t;
      return 0;
  }