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
signature.asc
Description: OpenPGP digital signature
_______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
