From: Michael Niedermayer Date: Thu, 6 Sep 2012 14:22:18 +0000 (+0200) Subject: Merge remote-tracking branch 'qatar/master' X-Git-Tag: n1.1-dev~409 X-Git-Url: http://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff_plain/40112e7b3589e1cf37cd80a7d2e8baad4cb8c523 Merge remote-tracking branch 'qatar/master' * qatar/master: fate: Allow setting the ld parameter from the config file x86: dsputil: Do not redundantly check for CPU caps before calling init funcs configure: Disable some warnings in MSVC x86: vp56: cmov version of vp56_rac_get_prob requires inline asm avopt: fix examples to match the same style about default values as the actual code. configure: Add support for MSVC cl.exe/link.exe lavu: add snprintf(), vsnprint() and strtod() replacements for MS runtime. Conflicts: libavutil/opt.h Merged-by: Michael Niedermayer --- 40112e7b3589e1cf37cd80a7d2e8baad4cb8c523 diff --cc compat/msvcrt/snprintf.c index 0000000,2cdec74..0800192 mode 000000,100644..100644 --- a/compat/msvcrt/snprintf.c +++ b/compat/msvcrt/snprintf.c @@@ -1,0 -1,63 +1,63 @@@ + /* + * C99-compatible snprintf() and vsnprintf() implementations + * Copyright (c) 2012 Ronald S. Bultje + * - * This file is part of Libav. ++ * This file is part of FFmpeg. + * - * Libav is free software; you can redistribute it and/or ++ * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * - * Libav is distributed in the hope that it will be useful, ++ * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public - * License along with Libav; if not, write to the Free Software ++ * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + + #include + #include + #include + #include + + #include "libavutil/error.h" + + int avpriv_snprintf(char *s, size_t n, const char *fmt, ...) + { + va_list ap; + int ret; + + va_start(ap, fmt); + ret = avpriv_vsnprintf(s, n, fmt, ap); + va_end(ap); + + return ret; + } + + int avpriv_vsnprintf(char *s, size_t n, const char *fmt, + va_list ap) + { + int ret; + + if (n == 0) + return 0; + else if (n > INT_MAX) + return AVERROR(EOVERFLOW); + + /* we use n - 1 here because if the buffer is not big enough, the MS + * runtime libraries don't add a terminating zero at the end. MSDN + * recommends to provide _snprintf/_vsnprintf() a buffer size that + * is one less than the actual buffer, and zero it before calling + * _snprintf/_vsnprintf() to workaround this problem. + * See http://msdn.microsoft.com/en-us/library/1kt27hek(v=vs.80).aspx */ + memset(s, 0, n); + ret = _vsnprintf(s, n - 1, fmt, ap); + if (ret == -1) + ret = n; + + return ret; + } diff --cc compat/strtod.c index 0000000,7e979e8..d0f9b3d mode 000000,100644..100644 --- a/compat/strtod.c +++ b/compat/strtod.c @@@ -1,0 -1,94 +1,94 @@@ + /* + * C99-compatible strtod() implementation + * Copyright (c) 2012 Ronald S. Bultje + * - * This file is part of Libav. ++ * This file is part of FFmpeg. + * - * Libav is free software; you can redistribute it and/or ++ * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * - * Libav is distributed in the hope that it will be useful, ++ * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public - * License along with Libav; if not, write to the Free Software ++ * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + + #include + #include + #include + + #include "libavutil/avstring.h" + #include "libavutil/mathematics.h" + + static char *check_nan_suffix(char *s) + { + char *start = s; + + if (*s++ != '(') + return start; + + while ((*s >= 'a' && *s <= 'z') || (*s >= 'A' && *s <= 'Z') || + (*s >= '0' && *s <= '9') || *s == '_') + s++; + + return *s == ')' ? s + 1 : start; + } + + #undef strtod + double strtod(const char *, char **); + + double avpriv_strtod(const char *nptr, char **endptr) + { + char *end; + double res; + + /* Skip leading spaces */ + while (isspace(*nptr)) + nptr++; + + if (!av_strncasecmp(nptr, "infinity", 8)) { + end = nptr + 8; + res = INFINITY; + } else if (!av_strncasecmp(nptr, "inf", 3)) { + end = nptr + 3; + res = INFINITY; + } else if (!av_strncasecmp(nptr, "+infinity", 9)) { + end = nptr + 9; + res = INFINITY; + } else if (!av_strncasecmp(nptr, "+inf", 4)) { + end = nptr + 4; + res = INFINITY; + } else if (!av_strncasecmp(nptr, "-infinity", 9)) { + end = nptr + 9; + res = -INFINITY; + } else if (!av_strncasecmp(nptr, "-inf", 4)) { + end = nptr + 4; + res = -INFINITY; + } else if (!av_strncasecmp(nptr, "nan", 3)) { + end = check_nan_suffix(nptr + 3); + res = NAN; + } else if (!av_strncasecmp(nptr, "+nan", 4) || + !av_strncasecmp(nptr, "-nan", 4)) { + end = check_nan_suffix(nptr + 4); + res = NAN; + } else if (!av_strncasecmp(nptr, "0x", 2) || + !av_strncasecmp(nptr, "-0x", 3) || + !av_strncasecmp(nptr, "+0x", 3)) { + /* FIXME this doesn't handle exponents, non-integers (float/double) + * and numbers too large for long long */ + res = strtoll(nptr, &end, 16); + } else { + res = strtod(nptr, &end); + } + + if (endptr) + *endptr = end; + + return res; + } diff --cc configure index f0b0388,25a56e7..a92b367 --- a/configure +++ b/configure @@@ -1330,13 -1183,10 +1330,14 @@@ HAVE_LIST= mkstemp mm_empty mmap + msvcrt nanosleep + PeekNamedPipe + perl + pod2man poll_h posix_memalign + pthread_cancel rdtsc rint round