On 04/06/2015 04:50 AM, Luca Barbato wrote:
> And use it in libavformat.
>
> Based on a similar patch from Stefano Sabatini <[email protected]>.
> ---
>
> avpriv would be a better idea maybe?
>
>  configure              |  2 --
>  doc/APIchanges         |  3 +++
>  libavformat/utils.c    | 11 ++---------
>  libavutil/parseutils.c | 10 +++++-----
>  libavutil/parseutils.h | 31 +++++++++++++++++++++++++++++++
>  libavutil/version.h    |  2 +-
>  6 files changed, 42 insertions(+), 17 deletions(-)
>
> diff --git a/configure b/configure
> index 6ad813b..8821cbc 100755
> --- a/configure
> +++ b/configure
> @@ -1487,7 +1487,6 @@ SYSTEM_FUNCS="
>      setrlimit
>      Sleep
>      strerror_r
> -    strptime
>      sysconf
>      sysctl
>      usleep
> @@ -4133,7 +4132,6 @@ check_func_headers time.h nanosleep || { 
> check_func_headers time.h nanosleep -lr
>  check_func  sched_getaffinity
>  check_func  setrlimit
>  check_func  strerror_r
> -check_func  strptime
>  check_func  sysconf
>  check_func  sysctl
>  check_func  usleep
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 75eb66b..b0d6e89 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -13,6 +13,9 @@ libavutil:     2014-08-09
>
>  API changes, most recent first:
>
> +2015-xx-xx - xxxxxxx - lavu 54.10.0
> +  Add av_small_strptime().
> +
>  2015-xx-xx - xxxxxxx - lavc 56.22.0
>    Add FF_PROFILE_DTS_EXPRESS.
>
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index 6248c1e..c275d06 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -2902,21 +2902,14 @@ int ff_find_stream_index(AVFormatContext *s, int id)
>
>  int64_t ff_iso8601_to_unix_time(const char *datestr)
>  {
> -#if HAVE_STRPTIME
>      struct tm time1 = { 0 }, time2 = { 0 };
>      char *ret1, *ret2;
> -    ret1 = strptime(datestr, "%Y - %m - %d %T", &time1);
> -    ret2 = strptime(datestr, "%Y - %m - %dT%T", &time2);
> +    ret1 = av_small_strptime(datestr, "%Y - %m - %d %T", &time1);
> +    ret2 = av_small_strptime(datestr, "%Y - %m - %dT%T", &time2);
>      if (ret2 && !ret1)
>          return av_timegm(&time2);
>      else
>          return av_timegm(&time1);
> -#else
> -    av_log(NULL, AV_LOG_WARNING,
> -           "strptime() unavailable on this system, cannot convert "
> -           "the date string.\n");
> -    return 0;
> -#endif
>  }
>
>  int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id,
> diff --git a/libavutil/parseutils.c b/libavutil/parseutils.c
> index 0e07b4a..be238f0 100644
> --- a/libavutil/parseutils.c
> +++ b/libavutil/parseutils.c
> @@ -400,7 +400,7 @@ static int date_get_num(const char **pp,
>      return val;
>  }
>
> -static const char *small_strptime(const char *p, const char *fmt, struct tm 
> *dt)
> +const char *av_small_strptime(const char *p, const char *fmt, struct tm *dt)
>  {
>      int c, val;
>
> @@ -453,7 +453,7 @@ static const char *small_strptime(const char *p, const 
> char *fmt, struct tm *dt)
>              dt->tm_mday = val;
>              break;
>          case 'T':
> -            p = small_strptime(p, "%H:%M:%S", dt);
> +            p = av_small_strptime(p, "%H:%M:%S", dt);
>              if (!p)
>                  return NULL;
>              break;
> @@ -526,7 +526,7 @@ int av_parse_time(int64_t *timeval, const char *timestr, 
> int duration)
>
>          /* parse the year-month-day part */
>          for (i = 0; i < FF_ARRAY_ELEMS(date_fmt); i++) {
> -            q = small_strptime(p, date_fmt[i], &dt);
> +            q = av_small_strptime(p, date_fmt[i], &dt);
>              if (q) {
>                  break;
>              }
> @@ -550,7 +550,7 @@ int av_parse_time(int64_t *timeval, const char *timestr, 
> int duration)
>
>          /* parse the hour-minute-second part */
>          for (i = 0; i < FF_ARRAY_ELEMS(time_fmt); i++) {
> -            q = small_strptime(p, time_fmt[i], &dt);
> +            q = av_small_strptime(p, time_fmt[i], &dt);
>              if (q) {
>                  break;
>              }
> @@ -562,7 +562,7 @@ int av_parse_time(int64_t *timeval, const char *timestr, 
> int duration)
>              ++p;
>          }
>          /* parse timestr as HH:MM:SS */
> -        q = small_strptime(p, time_fmt[0], &dt);
> +        q = av_small_strptime(p, time_fmt[0], &dt);
>          if (!q) {
>              char *o;
>              /* parse timestr as S+ */
> diff --git a/libavutil/parseutils.h b/libavutil/parseutils.h
> index 0844abb..8e99634 100644
> --- a/libavutil/parseutils.h
> +++ b/libavutil/parseutils.h
> @@ -117,6 +117,37 @@ int av_parse_time(int64_t *timeval, const char *timestr, 
> int duration);
>  int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char 
> *info);
>
>  /**
> + * Simplified version of strptime
> + *
> + * Parse the input string p according to the format string fmt and
> + * store its results in the structure dt.
> + *
> + * Neither text and locale's alternative representation are supported.
> + *
> + * The supported input field descriptors are listed below.
> + * - %H: the hour as a decimal number, using a 24-hour clock, in the
> + *   range '00' through '23'
> + * - %M: the minute as a decimal number, using a 24-hour clock, in the
> + *   range '00' through '59'
> + * - %S: the second as a decimal number, using a 24-hour clock, in the
> + *   range '00' through '59'
> + * - %Y: the year as a decimal number, using the Gregorian calendar
> + * - %m: the month as a decimal number, in the range '1' through '12'
> + * - %d: the day of the month as a decimal number, in the range '1'
> + *   through '31'
> + * - %T: alias for '%H:%M:%S'
> + * - %%: a literal '%'
> + *
> + * @return a pointer to the first character not processed in this function
> + *         call. In case the input string contains more characters than
> + *         required by the format string the return value points right after
> + *         the last consumed input character. In case the whole input string
> + *         is consumed the return value points to the null byte at the end of
> + *         the string. On failure NULL is returned.
> + */
> +const char *av_small_strptime(const char *p, const char *fmt, struct tm *dt);
> +
> +/**
>   * Convert the decomposed UTC time in tm to a time_t value.
>   */
>  time_t av_timegm(struct tm *tm);
> diff --git a/libavutil/version.h b/libavutil/version.h
> index b94db74..14a406e 100644
> --- a/libavutil/version.h
> +++ b/libavutil/version.h
> @@ -54,7 +54,7 @@
>   */
>
>  #define LIBAVUTIL_VERSION_MAJOR 54
> -#define LIBAVUTIL_VERSION_MINOR 10
> +#define LIBAVUTIL_VERSION_MINOR 11
>  #define LIBAVUTIL_VERSION_MICRO  0
>
>  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
> --
>

LGTM. I also tested that it produces the correct date tag in mp4.

Thanks.

-- 
John      GnuPG fingerprint: D0EC B3DB C372 D1F1 0B01  83F0 49F1 D7B2 60D4 D0F7


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to