添加项目文件。
This commit is contained in:
parent
f5c6245902
commit
3e82af9e90
2774
3rdparty/curl/inc/curl.h
vendored
Normal file
2774
3rdparty/curl/inc/curl.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
586
3rdparty/curl/inc/curlbuild.h
vendored
Normal file
586
3rdparty/curl/inc/curlbuild.h
vendored
Normal file
@ -0,0 +1,586 @@
|
|||||||
|
#ifndef __CURL_CURLBUILD_H
|
||||||
|
#define __CURL_CURLBUILD_H
|
||||||
|
/***************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
*
|
||||||
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
* copies of the Software, and permit persons to whom the Software is
|
||||||
|
* furnished to do so, under the terms of the COPYING file.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE 1:
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* See file include/curl/curlbuild.h.in, run configure, and forget
|
||||||
|
* that this file exists it is only used for non-configure systems.
|
||||||
|
* But you can keep reading if you want ;-)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* NOTES FOR NON-CONFIGURE SYSTEMS */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE 1:
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* Nothing in this file is intended to be modified or adjusted by the
|
||||||
|
* curl library user nor by the curl library builder.
|
||||||
|
*
|
||||||
|
* If you think that something actually needs to be changed, adjusted
|
||||||
|
* or fixed in this file, then, report it on the libcurl development
|
||||||
|
* mailing list: https://cool.haxx.se/mailman/listinfo/curl-library/
|
||||||
|
*
|
||||||
|
* Try to keep one section per platform, compiler and architecture,
|
||||||
|
* otherwise, if an existing section is reused for a different one and
|
||||||
|
* later on the original is adjusted, probably the piggybacking one can
|
||||||
|
* be adversely changed.
|
||||||
|
*
|
||||||
|
* In order to differentiate between platforms/compilers/architectures
|
||||||
|
* use only compiler built in predefined preprocessor symbols.
|
||||||
|
*
|
||||||
|
* This header file shall only export symbols which are 'curl' or 'CURL'
|
||||||
|
* prefixed, otherwise public name space would be polluted.
|
||||||
|
*
|
||||||
|
* NOTE 2:
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* For any given platform/compiler curl_off_t must be typedef'ed to a
|
||||||
|
* 64-bit wide signed integral data type. The width of this data type
|
||||||
|
* must remain constant and independent of any possible large file
|
||||||
|
* support settings.
|
||||||
|
*
|
||||||
|
* As an exception to the above, curl_off_t shall be typedef'ed to a
|
||||||
|
* 32-bit wide signed integral data type if there is no 64-bit type.
|
||||||
|
*
|
||||||
|
* As a general rule, curl_off_t shall not be mapped to off_t. This
|
||||||
|
* rule shall only be violated if off_t is the only 64-bit data type
|
||||||
|
* available and the size of off_t is independent of large file support
|
||||||
|
* settings. Keep your build on the safe side avoiding an off_t gating.
|
||||||
|
* If you have a 64-bit off_t then take for sure that another 64-bit
|
||||||
|
* data type exists, dig deeper and you will find it.
|
||||||
|
*
|
||||||
|
* NOTE 3:
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* Right now you might be staring at file include/curl/curlbuild.h.dist or
|
||||||
|
* at file include/curl/curlbuild.h, this is due to the following reason:
|
||||||
|
* file include/curl/curlbuild.h.dist is renamed to include/curl/curlbuild.h
|
||||||
|
* when the libcurl source code distribution archive file is created.
|
||||||
|
*
|
||||||
|
* File include/curl/curlbuild.h.dist is not included in the distribution
|
||||||
|
* archive. File include/curl/curlbuild.h is not present in the git tree.
|
||||||
|
*
|
||||||
|
* The distributed include/curl/curlbuild.h file is only intended to be used
|
||||||
|
* on systems which can not run the also distributed configure script.
|
||||||
|
*
|
||||||
|
* On systems capable of running the configure script, the configure process
|
||||||
|
* will overwrite the distributed include/curl/curlbuild.h file with one that
|
||||||
|
* is suitable and specific to the library being configured and built, which
|
||||||
|
* is generated from the include/curl/curlbuild.h.in template file.
|
||||||
|
*
|
||||||
|
* If you check out from git on a non-configure platform, you must run the
|
||||||
|
* appropriate buildconf* script to set up curlbuild.h and other local files.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
#ifdef CURL_SIZEOF_LONG
|
||||||
|
# error "CURL_SIZEOF_LONG shall not be defined except in curlbuild.h"
|
||||||
|
Error Compilation_aborted_CURL_SIZEOF_LONG_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
|
||||||
|
# error "CURL_TYPEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
|
||||||
|
Error Compilation_aborted_CURL_TYPEOF_CURL_SOCKLEN_T_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CURL_SIZEOF_CURL_SOCKLEN_T
|
||||||
|
# error "CURL_SIZEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
|
||||||
|
Error Compilation_aborted_CURL_SIZEOF_CURL_SOCKLEN_T_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CURL_TYPEOF_CURL_OFF_T
|
||||||
|
# error "CURL_TYPEOF_CURL_OFF_T shall not be defined except in curlbuild.h"
|
||||||
|
Error Compilation_aborted_CURL_TYPEOF_CURL_OFF_T_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CURL_FORMAT_CURL_OFF_T
|
||||||
|
# error "CURL_FORMAT_CURL_OFF_T shall not be defined except in curlbuild.h"
|
||||||
|
Error Compilation_aborted_CURL_FORMAT_CURL_OFF_T_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CURL_FORMAT_CURL_OFF_TU
|
||||||
|
# error "CURL_FORMAT_CURL_OFF_TU shall not be defined except in curlbuild.h"
|
||||||
|
Error Compilation_aborted_CURL_FORMAT_CURL_OFF_TU_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CURL_FORMAT_OFF_T
|
||||||
|
# error "CURL_FORMAT_OFF_T shall not be defined except in curlbuild.h"
|
||||||
|
Error Compilation_aborted_CURL_FORMAT_OFF_T_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CURL_SIZEOF_CURL_OFF_T
|
||||||
|
# error "CURL_SIZEOF_CURL_OFF_T shall not be defined except in curlbuild.h"
|
||||||
|
Error Compilation_aborted_CURL_SIZEOF_CURL_OFF_T_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CURL_SUFFIX_CURL_OFF_T
|
||||||
|
# error "CURL_SUFFIX_CURL_OFF_T shall not be defined except in curlbuild.h"
|
||||||
|
Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_T_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CURL_SUFFIX_CURL_OFF_TU
|
||||||
|
# error "CURL_SUFFIX_CURL_OFF_TU shall not be defined except in curlbuild.h"
|
||||||
|
Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_TU_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* EXTERNAL INTERFACE SETTINGS FOR NON-CONFIGURE SYSTEMS ONLY */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
#if defined(__DJGPP__) || defined(__GO32__)
|
||||||
|
# if defined(__DJGPP__) && (__DJGPP__ > 1)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# else
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 4
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__SALFORDC__)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 4
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__BORLANDC__)
|
||||||
|
# if (__BORLANDC__ < 0x520)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 4
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# else
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_FORMAT_OFF_T "%I64d"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T i64
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ui64
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__TURBOC__)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 4
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__WATCOMC__)
|
||||||
|
# if defined(__386__)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_FORMAT_OFF_T "%I64d"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T i64
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ui64
|
||||||
|
# else
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 4
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__POCC__)
|
||||||
|
# if (__POCC__ < 280)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 4
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# elif defined(_MSC_VER)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_FORMAT_OFF_T "%I64d"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T i64
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ui64
|
||||||
|
# else
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__LCC__)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 4
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__SYMBIAN32__)
|
||||||
|
# if defined(__EABI__) /* Treat all ARM compilers equally */
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# elif defined(__CW32__)
|
||||||
|
# pragma longlong on
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# elif defined(__VC32__)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__MWERKS__)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(_WIN32_WCE)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_FORMAT_OFF_T "%I64d"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T i64
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ui64
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__MINGW32__)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_FORMAT_OFF_T "%I64d"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__VMS)
|
||||||
|
# if defined(__VAX)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 4
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# else
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__OS400__)
|
||||||
|
# if defined(__ILEC400__)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
# define CURL_PULL_SYS_TYPES_H 1
|
||||||
|
# define CURL_PULL_SYS_SOCKET_H 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__MVS__)
|
||||||
|
# if defined(__IBMC__) || defined(__IBMCPP__)
|
||||||
|
# if defined(_ILP32)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# elif defined(_LP64)
|
||||||
|
# define CURL_SIZEOF_LONG 8
|
||||||
|
# endif
|
||||||
|
# if defined(_LONG_LONG)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# elif defined(_LP64)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# else
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 4
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
# define CURL_PULL_SYS_TYPES_H 1
|
||||||
|
# define CURL_PULL_SYS_SOCKET_H 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__370__)
|
||||||
|
# if defined(__IBMC__) || defined(__IBMCPP__)
|
||||||
|
# if defined(_ILP32)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# elif defined(_LP64)
|
||||||
|
# define CURL_SIZEOF_LONG 8
|
||||||
|
# endif
|
||||||
|
# if defined(_LONG_LONG)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# elif defined(_LP64)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# else
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 4
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
# define CURL_PULL_SYS_TYPES_H 1
|
||||||
|
# define CURL_PULL_SYS_SOCKET_H 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(TPF)
|
||||||
|
# define CURL_SIZEOF_LONG 8
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
/* ===================================== */
|
||||||
|
/* KEEP MSVC THE PENULTIMATE ENTRY */
|
||||||
|
/* ===================================== */
|
||||||
|
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_FORMAT_OFF_T "%I64d"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T i64
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ui64
|
||||||
|
# else
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 4
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
|
||||||
|
/* ===================================== */
|
||||||
|
/* KEEP GENERIC GCC THE LAST ENTRY */
|
||||||
|
/* ===================================== */
|
||||||
|
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
# if !defined(__LP64__) && (defined(__ILP32__) || \
|
||||||
|
defined(__i386__) || defined(__ppc__) || defined(__arm__) || \
|
||||||
|
defined(__sparc__) || defined(__mips__) || defined(__sh__))
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# elif defined(__LP64__) || \
|
||||||
|
defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__)
|
||||||
|
# define CURL_SIZEOF_LONG 8
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%ld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
||||||
|
# define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
||||||
|
# define CURL_PULL_SYS_TYPES_H 1
|
||||||
|
# define CURL_PULL_SYS_SOCKET_H 1
|
||||||
|
|
||||||
|
#else
|
||||||
|
# error "Unknown non-configure build target!"
|
||||||
|
Error Compilation_aborted_Unknown_non_configure_build_target
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */
|
||||||
|
/* sys/types.h is required here to properly make type definitions below. */
|
||||||
|
#ifdef CURL_PULL_SYS_TYPES_H
|
||||||
|
# include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */
|
||||||
|
/* sys/socket.h is required here to properly make type definitions below. */
|
||||||
|
#ifdef CURL_PULL_SYS_SOCKET_H
|
||||||
|
# include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Data type definition of curl_socklen_t. */
|
||||||
|
|
||||||
|
#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
|
||||||
|
typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Data type definition of curl_off_t. */
|
||||||
|
|
||||||
|
#ifdef CURL_TYPEOF_CURL_OFF_T
|
||||||
|
typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __CURL_CURLBUILD_H */
|
262
3rdparty/curl/inc/curlrules.h
vendored
Normal file
262
3rdparty/curl/inc/curlrules.h
vendored
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
#ifndef __CURL_CURLRULES_H
|
||||||
|
#define __CURL_CURLRULES_H
|
||||||
|
/***************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
*
|
||||||
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
* copies of the Software, and permit persons to whom the Software is
|
||||||
|
* furnished to do so, under the terms of the COPYING file.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* COMPILE TIME SANITY CHECKS */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE 1:
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* All checks done in this file are intentionally placed in a public
|
||||||
|
* header file which is pulled by curl/curl.h when an application is
|
||||||
|
* being built using an already built libcurl library. Additionally
|
||||||
|
* this file is also included and used when building the library.
|
||||||
|
*
|
||||||
|
* If compilation fails on this file it is certainly sure that the
|
||||||
|
* problem is elsewhere. It could be a problem in the curlbuild.h
|
||||||
|
* header file, or simply that you are using different compilation
|
||||||
|
* settings than those used to build the library.
|
||||||
|
*
|
||||||
|
* Nothing in this file is intended to be modified or adjusted by the
|
||||||
|
* curl library user nor by the curl library builder.
|
||||||
|
*
|
||||||
|
* Do not deactivate any check, these are done to make sure that the
|
||||||
|
* library is properly built and used.
|
||||||
|
*
|
||||||
|
* You can find further help on the libcurl development mailing list:
|
||||||
|
* https://cool.haxx.se/mailman/listinfo/curl-library/
|
||||||
|
*
|
||||||
|
* NOTE 2
|
||||||
|
* ------
|
||||||
|
*
|
||||||
|
* Some of the following compile time checks are based on the fact
|
||||||
|
* that the dimension of a constant array can not be a negative one.
|
||||||
|
* In this way if the compile time verification fails, the compilation
|
||||||
|
* will fail issuing an error. The error description wording is compiler
|
||||||
|
* dependent but it will be quite similar to one of the following:
|
||||||
|
*
|
||||||
|
* "negative subscript or subscript is too large"
|
||||||
|
* "array must have at least one element"
|
||||||
|
* "-1 is an illegal array size"
|
||||||
|
* "size of array is negative"
|
||||||
|
*
|
||||||
|
* If you are building an application which tries to use an already
|
||||||
|
* built libcurl library and you are getting this kind of errors on
|
||||||
|
* this file, it is a clear indication that there is a mismatch between
|
||||||
|
* how the library was built and how you are trying to use it for your
|
||||||
|
* application. Your already compiled or binary library provider is the
|
||||||
|
* only one who can give you the details you need to properly use it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify that some macros are actually defined.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CURL_SIZEOF_LONG
|
||||||
|
# error "CURL_SIZEOF_LONG definition is missing!"
|
||||||
|
Error Compilation_aborted_CURL_SIZEOF_LONG_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CURL_TYPEOF_CURL_SOCKLEN_T
|
||||||
|
# error "CURL_TYPEOF_CURL_SOCKLEN_T definition is missing!"
|
||||||
|
Error Compilation_aborted_CURL_TYPEOF_CURL_SOCKLEN_T_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CURL_SIZEOF_CURL_SOCKLEN_T
|
||||||
|
# error "CURL_SIZEOF_CURL_SOCKLEN_T definition is missing!"
|
||||||
|
Error Compilation_aborted_CURL_SIZEOF_CURL_SOCKLEN_T_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CURL_TYPEOF_CURL_OFF_T
|
||||||
|
# error "CURL_TYPEOF_CURL_OFF_T definition is missing!"
|
||||||
|
Error Compilation_aborted_CURL_TYPEOF_CURL_OFF_T_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CURL_FORMAT_CURL_OFF_T
|
||||||
|
# error "CURL_FORMAT_CURL_OFF_T definition is missing!"
|
||||||
|
Error Compilation_aborted_CURL_FORMAT_CURL_OFF_T_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CURL_FORMAT_CURL_OFF_TU
|
||||||
|
# error "CURL_FORMAT_CURL_OFF_TU definition is missing!"
|
||||||
|
Error Compilation_aborted_CURL_FORMAT_CURL_OFF_TU_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CURL_FORMAT_OFF_T
|
||||||
|
# error "CURL_FORMAT_OFF_T definition is missing!"
|
||||||
|
Error Compilation_aborted_CURL_FORMAT_OFF_T_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CURL_SIZEOF_CURL_OFF_T
|
||||||
|
# error "CURL_SIZEOF_CURL_OFF_T definition is missing!"
|
||||||
|
Error Compilation_aborted_CURL_SIZEOF_CURL_OFF_T_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CURL_SUFFIX_CURL_OFF_T
|
||||||
|
# error "CURL_SUFFIX_CURL_OFF_T definition is missing!"
|
||||||
|
Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_T_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CURL_SUFFIX_CURL_OFF_TU
|
||||||
|
# error "CURL_SUFFIX_CURL_OFF_TU definition is missing!"
|
||||||
|
Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_TU_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macros private to this header file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1
|
||||||
|
|
||||||
|
#define CurlchkszGE(t1, t2) sizeof(t1) >= sizeof(t2) ? 1 : -1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify that the size previously defined and expected for long
|
||||||
|
* is the same as the one reported by sizeof() at compile time.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef char
|
||||||
|
__curl_rule_01__
|
||||||
|
[CurlchkszEQ(long, CURL_SIZEOF_LONG)];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify that the size previously defined and expected for
|
||||||
|
* curl_off_t is actually the the same as the one reported
|
||||||
|
* by sizeof() at compile time.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef char
|
||||||
|
__curl_rule_02__
|
||||||
|
[CurlchkszEQ(curl_off_t, CURL_SIZEOF_CURL_OFF_T)];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify at compile time that the size of curl_off_t as reported
|
||||||
|
* by sizeof() is greater or equal than the one reported for long
|
||||||
|
* for the current compilation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef char
|
||||||
|
__curl_rule_03__
|
||||||
|
[CurlchkszGE(curl_off_t, long)];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify that the size previously defined and expected for
|
||||||
|
* curl_socklen_t is actually the the same as the one reported
|
||||||
|
* by sizeof() at compile time.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef char
|
||||||
|
__curl_rule_04__
|
||||||
|
[CurlchkszEQ(curl_socklen_t, CURL_SIZEOF_CURL_SOCKLEN_T)];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify at compile time that the size of curl_socklen_t as reported
|
||||||
|
* by sizeof() is greater or equal than the one reported for int for
|
||||||
|
* the current compilation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef char
|
||||||
|
__curl_rule_05__
|
||||||
|
[CurlchkszGE(curl_socklen_t, int)];
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* EXTERNALLY AND INTERNALLY VISIBLE DEFINITIONS */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow
|
||||||
|
* these to be visible and exported by the external libcurl interface API,
|
||||||
|
* while also making them visible to the library internals, simply including
|
||||||
|
* curl_setup.h, without actually needing to include curl.h internally.
|
||||||
|
* If some day this section would grow big enough, all this should be moved
|
||||||
|
* to its own header file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Figure out if we can use the ## preprocessor operator, which is supported
|
||||||
|
* by ISO/ANSI C and C++. Some compilers support it without setting __STDC__
|
||||||
|
* or __cplusplus so we need to carefully check for them too.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
|
||||||
|
defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
|
||||||
|
defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
|
||||||
|
defined(__ILEC400__)
|
||||||
|
/* This compiler is believed to have an ISO compatible preprocessor */
|
||||||
|
#define CURL_ISOCPP
|
||||||
|
#else
|
||||||
|
/* This compiler is believed NOT to have an ISO compatible preprocessor */
|
||||||
|
#undef CURL_ISOCPP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macros for minimum-width signed and unsigned curl_off_t integer constants.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551)
|
||||||
|
# define __CURL_OFF_T_C_HLPR2(x) x
|
||||||
|
# define __CURL_OFF_T_C_HLPR1(x) __CURL_OFF_T_C_HLPR2(x)
|
||||||
|
# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \
|
||||||
|
__CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T)
|
||||||
|
# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \
|
||||||
|
__CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU)
|
||||||
|
#else
|
||||||
|
# ifdef CURL_ISOCPP
|
||||||
|
# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix
|
||||||
|
# else
|
||||||
|
# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix
|
||||||
|
# endif
|
||||||
|
# define __CURL_OFF_T_C_HLPR1(Val,Suffix) __CURL_OFF_T_C_HLPR2(Val,Suffix)
|
||||||
|
# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T)
|
||||||
|
# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get rid of macros private to this header file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef CurlchkszEQ
|
||||||
|
#undef CurlchkszGE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get rid of macros not intended to exist beyond this point.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef CURL_PULL_WS2TCPIP_H
|
||||||
|
#undef CURL_PULL_SYS_TYPES_H
|
||||||
|
#undef CURL_PULL_SYS_SOCKET_H
|
||||||
|
#undef CURL_PULL_SYS_POLL_H
|
||||||
|
#undef CURL_PULL_STDINT_H
|
||||||
|
#undef CURL_PULL_INTTYPES_H
|
||||||
|
|
||||||
|
#undef CURL_TYPEOF_CURL_SOCKLEN_T
|
||||||
|
#undef CURL_TYPEOF_CURL_OFF_T
|
||||||
|
|
||||||
|
#ifdef CURL_NO_OLDIES
|
||||||
|
#undef CURL_FORMAT_OFF_T /* not required since 7.19.0 - obsoleted in 7.20.0 */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __CURL_CURLRULES_H */
|
77
3rdparty/curl/inc/curlver.h
vendored
Normal file
77
3rdparty/curl/inc/curlver.h
vendored
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
#ifndef __CURL_CURLVER_H
|
||||||
|
#define __CURL_CURLVER_H
|
||||||
|
/***************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
*
|
||||||
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
* copies of the Software, and permit persons to whom the Software is
|
||||||
|
* furnished to do so, under the terms of the COPYING file.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/* This header file contains nothing but libcurl version info, generated by
|
||||||
|
a script at release-time. This was made its own header file in 7.11.2 */
|
||||||
|
|
||||||
|
/* This is the global package copyright */
|
||||||
|
#define LIBCURL_COPYRIGHT "1996 - 2018 Daniel Stenberg, <daniel@haxx.se>."
|
||||||
|
|
||||||
|
/* This is the version number of the libcurl package from which this header
|
||||||
|
file origins: */
|
||||||
|
#define LIBCURL_VERSION "7.59.0"
|
||||||
|
|
||||||
|
/* The numeric version number is also available "in parts" by using these
|
||||||
|
defines: */
|
||||||
|
#define LIBCURL_VERSION_MAJOR 7
|
||||||
|
#define LIBCURL_VERSION_MINOR 59
|
||||||
|
#define LIBCURL_VERSION_PATCH 0
|
||||||
|
|
||||||
|
/* This is the numeric version of the libcurl version number, meant for easier
|
||||||
|
parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
|
||||||
|
always follow this syntax:
|
||||||
|
|
||||||
|
0xXXYYZZ
|
||||||
|
|
||||||
|
Where XX, YY and ZZ are the main version, release and patch numbers in
|
||||||
|
hexadecimal (using 8 bits each). All three numbers are always represented
|
||||||
|
using two digits. 1.2 would appear as "0x010200" while version 9.11.7
|
||||||
|
appears as "0x090b07".
|
||||||
|
|
||||||
|
This 6-digit (24 bits) hexadecimal number does not show pre-release number,
|
||||||
|
and it is always a greater number in a more recent release. It makes
|
||||||
|
comparisons with greater than and less than work.
|
||||||
|
|
||||||
|
Note: This define is the full hex number and _does not_ use the
|
||||||
|
CURL_VERSION_BITS() macro since curl's own configure script greps for it
|
||||||
|
and needs it to contain the full number.
|
||||||
|
*/
|
||||||
|
#define LIBCURL_VERSION_NUM 0x073b00
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is the date and time when the full source package was created. The
|
||||||
|
* timestamp is not stored in git, as the timestamp is properly set in the
|
||||||
|
* tarballs by the maketgz script.
|
||||||
|
*
|
||||||
|
* The format of the date follows this template:
|
||||||
|
*
|
||||||
|
* "2007-11-23"
|
||||||
|
*/
|
||||||
|
#define LIBCURL_TIMESTAMP "2018-03-14"
|
||||||
|
|
||||||
|
#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|z)
|
||||||
|
#define CURL_AT_LEAST_VERSION(x,y,z) \
|
||||||
|
(LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))
|
||||||
|
|
||||||
|
#endif /* __CURL_CURLVER_H */
|
102
3rdparty/curl/inc/easy.h
vendored
Normal file
102
3rdparty/curl/inc/easy.h
vendored
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
#ifndef __CURL_EASY_H
|
||||||
|
#define __CURL_EASY_H
|
||||||
|
/***************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
*
|
||||||
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
* copies of the Software, and permit persons to whom the Software is
|
||||||
|
* furnished to do so, under the terms of the COPYING file.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CURL_EXTERN CURL *curl_easy_init(void);
|
||||||
|
CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
|
||||||
|
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
|
||||||
|
CURL_EXTERN void curl_easy_cleanup(CURL *curl);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NAME curl_easy_getinfo()
|
||||||
|
*
|
||||||
|
* DESCRIPTION
|
||||||
|
*
|
||||||
|
* Request internal information from the curl session with this function. The
|
||||||
|
* third argument MUST be a pointer to a long, a pointer to a char * or a
|
||||||
|
* pointer to a double (as the documentation describes elsewhere). The data
|
||||||
|
* pointed to will be filled in accordingly and can be relied upon only if the
|
||||||
|
* function returns CURLE_OK. This function is intended to get used *AFTER* a
|
||||||
|
* performed transfer, all results from this function are undefined until the
|
||||||
|
* transfer is completed.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NAME curl_easy_duphandle()
|
||||||
|
*
|
||||||
|
* DESCRIPTION
|
||||||
|
*
|
||||||
|
* Creates a new curl session handle with the same options set for the handle
|
||||||
|
* passed in. Duplicating a handle could only be a matter of cloning data and
|
||||||
|
* options, internal state info and things like persistent connections cannot
|
||||||
|
* be transferred. It is useful in multithreaded applications when you can run
|
||||||
|
* curl_easy_duphandle() for each new thread to avoid a series of identical
|
||||||
|
* curl_easy_setopt() invokes in every thread.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NAME curl_easy_reset()
|
||||||
|
*
|
||||||
|
* DESCRIPTION
|
||||||
|
*
|
||||||
|
* Re-initializes a CURL handle to the default values. This puts back the
|
||||||
|
* handle to the same state as it was in when it was just created.
|
||||||
|
*
|
||||||
|
* It does keep: live connections, the Session ID cache, the DNS cache and the
|
||||||
|
* cookies.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN void curl_easy_reset(CURL *curl);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NAME curl_easy_recv()
|
||||||
|
*
|
||||||
|
* DESCRIPTION
|
||||||
|
*
|
||||||
|
* Receives data from the connected socket. Use after successful
|
||||||
|
* curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen,
|
||||||
|
size_t *n);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NAME curl_easy_send()
|
||||||
|
*
|
||||||
|
* DESCRIPTION
|
||||||
|
*
|
||||||
|
* Sends data over the connected socket. Use after successful
|
||||||
|
* curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer,
|
||||||
|
size_t buflen, size_t *n);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
50
3rdparty/curl/inc/mprintf.h
vendored
Normal file
50
3rdparty/curl/inc/mprintf.h
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#ifndef __CURL_MPRINTF_H
|
||||||
|
#define __CURL_MPRINTF_H
|
||||||
|
/***************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
*
|
||||||
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
* copies of the Software, and permit persons to whom the Software is
|
||||||
|
* furnished to do so, under the terms of the COPYING file.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h> /* needed for FILE */
|
||||||
|
#include "curl.h" /* for CURL_EXTERN */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CURL_EXTERN int curl_mprintf(const char *format, ...);
|
||||||
|
CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...);
|
||||||
|
CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...);
|
||||||
|
CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength,
|
||||||
|
const char *format, ...);
|
||||||
|
CURL_EXTERN int curl_mvprintf(const char *format, va_list args);
|
||||||
|
CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args);
|
||||||
|
CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args);
|
||||||
|
CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength,
|
||||||
|
const char *format, va_list args);
|
||||||
|
CURL_EXTERN char *curl_maprintf(const char *format, ...);
|
||||||
|
CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __CURL_MPRINTF_H */
|
441
3rdparty/curl/inc/multi.h
vendored
Normal file
441
3rdparty/curl/inc/multi.h
vendored
Normal file
@ -0,0 +1,441 @@
|
|||||||
|
#ifndef __CURL_MULTI_H
|
||||||
|
#define __CURL_MULTI_H
|
||||||
|
/***************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
*
|
||||||
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
* copies of the Software, and permit persons to whom the Software is
|
||||||
|
* furnished to do so, under the terms of the COPYING file.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
/*
|
||||||
|
This is an "external" header file. Don't give away any internals here!
|
||||||
|
|
||||||
|
GOALS
|
||||||
|
|
||||||
|
o Enable a "pull" interface. The application that uses libcurl decides where
|
||||||
|
and when to ask libcurl to get/send data.
|
||||||
|
|
||||||
|
o Enable multiple simultaneous transfers in the same thread without making it
|
||||||
|
complicated for the application.
|
||||||
|
|
||||||
|
o Enable the application to select() on its own file descriptors and curl's
|
||||||
|
file descriptors simultaneous easily.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This header file should not really need to include "curl.h" since curl.h
|
||||||
|
* itself includes this file and we expect user applications to do #include
|
||||||
|
* <curl/curl.h> without the need for especially including multi.h.
|
||||||
|
*
|
||||||
|
* For some reason we added this include here at one point, and rather than to
|
||||||
|
* break existing (wrongly written) libcurl applications, we leave it as-is
|
||||||
|
* but with this warning attached.
|
||||||
|
*/
|
||||||
|
#include "curl.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER)
|
||||||
|
typedef struct Curl_multi CURLM;
|
||||||
|
#else
|
||||||
|
typedef void CURLM;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
|
||||||
|
curl_multi_socket*() soon */
|
||||||
|
CURLM_OK,
|
||||||
|
CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */
|
||||||
|
CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */
|
||||||
|
CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */
|
||||||
|
CURLM_INTERNAL_ERROR, /* this is a libcurl bug */
|
||||||
|
CURLM_BAD_SOCKET, /* the passed in socket argument did not match */
|
||||||
|
CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */
|
||||||
|
CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was
|
||||||
|
attempted to get added - again */
|
||||||
|
CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a
|
||||||
|
callback */
|
||||||
|
CURLM_LAST
|
||||||
|
} CURLMcode;
|
||||||
|
|
||||||
|
/* just to make code nicer when using curl_multi_socket() you can now check
|
||||||
|
for CURLM_CALL_MULTI_SOCKET too in the same style it works for
|
||||||
|
curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
|
||||||
|
#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
|
||||||
|
|
||||||
|
/* bitmask bits for CURLMOPT_PIPELINING */
|
||||||
|
#define CURLPIPE_NOTHING 0L
|
||||||
|
#define CURLPIPE_HTTP1 1L
|
||||||
|
#define CURLPIPE_MULTIPLEX 2L
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CURLMSG_NONE, /* first, not used */
|
||||||
|
CURLMSG_DONE, /* This easy handle has completed. 'result' contains
|
||||||
|
the CURLcode of the transfer */
|
||||||
|
CURLMSG_LAST /* last, not used */
|
||||||
|
} CURLMSG;
|
||||||
|
|
||||||
|
struct CURLMsg {
|
||||||
|
CURLMSG msg; /* what this message means */
|
||||||
|
CURL *easy_handle; /* the handle it concerns */
|
||||||
|
union {
|
||||||
|
void *whatever; /* message-specific data */
|
||||||
|
CURLcode result; /* return code for transfer */
|
||||||
|
} data;
|
||||||
|
};
|
||||||
|
typedef struct CURLMsg CURLMsg;
|
||||||
|
|
||||||
|
/* Based on poll(2) structure and values.
|
||||||
|
* We don't use pollfd and POLL* constants explicitly
|
||||||
|
* to cover platforms without poll(). */
|
||||||
|
#define CURL_WAIT_POLLIN 0x0001
|
||||||
|
#define CURL_WAIT_POLLPRI 0x0002
|
||||||
|
#define CURL_WAIT_POLLOUT 0x0004
|
||||||
|
|
||||||
|
struct curl_waitfd {
|
||||||
|
curl_socket_t fd;
|
||||||
|
short events;
|
||||||
|
short revents; /* not supported yet */
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_init()
|
||||||
|
*
|
||||||
|
* Desc: inititalize multi-style curl usage
|
||||||
|
*
|
||||||
|
* Returns: a new CURLM handle to use in all 'curl_multi' functions.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLM *curl_multi_init(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_add_handle()
|
||||||
|
*
|
||||||
|
* Desc: add a standard curl handle to the multi stack
|
||||||
|
*
|
||||||
|
* Returns: CURLMcode type, general multi error code.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
|
||||||
|
CURL *curl_handle);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_remove_handle()
|
||||||
|
*
|
||||||
|
* Desc: removes a curl handle from the multi stack again
|
||||||
|
*
|
||||||
|
* Returns: CURLMcode type, general multi error code.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
|
||||||
|
CURL *curl_handle);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_fdset()
|
||||||
|
*
|
||||||
|
* Desc: Ask curl for its fd_set sets. The app can use these to select() or
|
||||||
|
* poll() on. We want curl_multi_perform() called as soon as one of
|
||||||
|
* them are ready.
|
||||||
|
*
|
||||||
|
* Returns: CURLMcode type, general multi error code.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
|
||||||
|
fd_set *read_fd_set,
|
||||||
|
fd_set *write_fd_set,
|
||||||
|
fd_set *exc_fd_set,
|
||||||
|
int *max_fd);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_wait()
|
||||||
|
*
|
||||||
|
* Desc: Poll on all fds within a CURLM set as well as any
|
||||||
|
* additional fds passed to the function.
|
||||||
|
*
|
||||||
|
* Returns: CURLMcode type, general multi error code.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle,
|
||||||
|
struct curl_waitfd extra_fds[],
|
||||||
|
unsigned int extra_nfds,
|
||||||
|
int timeout_ms,
|
||||||
|
int *ret);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_perform()
|
||||||
|
*
|
||||||
|
* Desc: When the app thinks there's data available for curl it calls this
|
||||||
|
* function to read/write whatever there is right now. This returns
|
||||||
|
* as soon as the reads and writes are done. This function does not
|
||||||
|
* require that there actually is data available for reading or that
|
||||||
|
* data can be written, it can be called just in case. It returns
|
||||||
|
* the number of handles that still transfer data in the second
|
||||||
|
* argument's integer-pointer.
|
||||||
|
*
|
||||||
|
* Returns: CURLMcode type, general multi error code. *NOTE* that this only
|
||||||
|
* returns errors etc regarding the whole multi stack. There might
|
||||||
|
* still have occurred problems on individual transfers even when
|
||||||
|
* this returns OK.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
|
||||||
|
int *running_handles);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_cleanup()
|
||||||
|
*
|
||||||
|
* Desc: Cleans up and removes a whole multi stack. It does not free or
|
||||||
|
* touch any individual easy handles in any way. We need to define
|
||||||
|
* in what state those handles will be if this function is called
|
||||||
|
* in the middle of a transfer.
|
||||||
|
*
|
||||||
|
* Returns: CURLMcode type, general multi error code.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_info_read()
|
||||||
|
*
|
||||||
|
* Desc: Ask the multi handle if there's any messages/informationals from
|
||||||
|
* the individual transfers. Messages include informationals such as
|
||||||
|
* error code from the transfer or just the fact that a transfer is
|
||||||
|
* completed. More details on these should be written down as well.
|
||||||
|
*
|
||||||
|
* Repeated calls to this function will return a new struct each
|
||||||
|
* time, until a special "end of msgs" struct is returned as a signal
|
||||||
|
* that there is no more to get at this point.
|
||||||
|
*
|
||||||
|
* The data the returned pointer points to will not survive calling
|
||||||
|
* curl_multi_cleanup().
|
||||||
|
*
|
||||||
|
* The 'CURLMsg' struct is meant to be very simple and only contain
|
||||||
|
* very basic information. If more involved information is wanted,
|
||||||
|
* we will provide the particular "transfer handle" in that struct
|
||||||
|
* and that should/could/would be used in subsequent
|
||||||
|
* curl_easy_getinfo() calls (or similar). The point being that we
|
||||||
|
* must never expose complex structs to applications, as then we'll
|
||||||
|
* undoubtably get backwards compatibility problems in the future.
|
||||||
|
*
|
||||||
|
* Returns: A pointer to a filled-in struct, or NULL if it failed or ran out
|
||||||
|
* of structs. It also writes the number of messages left in the
|
||||||
|
* queue (after this read) in the integer the second argument points
|
||||||
|
* to.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
|
||||||
|
int *msgs_in_queue);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_strerror()
|
||||||
|
*
|
||||||
|
* Desc: The curl_multi_strerror function may be used to turn a CURLMcode
|
||||||
|
* value into the equivalent human readable error string. This is
|
||||||
|
* useful for printing meaningful error messages.
|
||||||
|
*
|
||||||
|
* Returns: A pointer to a zero-terminated error message.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_socket() and
|
||||||
|
* curl_multi_socket_all()
|
||||||
|
*
|
||||||
|
* Desc: An alternative version of curl_multi_perform() that allows the
|
||||||
|
* application to pass in one of the file descriptors that have been
|
||||||
|
* detected to have "action" on them and let libcurl perform.
|
||||||
|
* See man page for details.
|
||||||
|
*/
|
||||||
|
#define CURL_POLL_NONE 0
|
||||||
|
#define CURL_POLL_IN 1
|
||||||
|
#define CURL_POLL_OUT 2
|
||||||
|
#define CURL_POLL_INOUT 3
|
||||||
|
#define CURL_POLL_REMOVE 4
|
||||||
|
|
||||||
|
#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD
|
||||||
|
|
||||||
|
#define CURL_CSELECT_IN 0x01
|
||||||
|
#define CURL_CSELECT_OUT 0x02
|
||||||
|
#define CURL_CSELECT_ERR 0x04
|
||||||
|
|
||||||
|
typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */
|
||||||
|
curl_socket_t s, /* socket */
|
||||||
|
int what, /* see above */
|
||||||
|
void *userp, /* private callback
|
||||||
|
pointer */
|
||||||
|
void *socketp); /* private socket
|
||||||
|
pointer */
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_timer_callback
|
||||||
|
*
|
||||||
|
* Desc: Called by libcurl whenever the library detects a change in the
|
||||||
|
* maximum number of milliseconds the app is allowed to wait before
|
||||||
|
* curl_multi_socket() or curl_multi_perform() must be called
|
||||||
|
* (to allow libcurl's timed events to take place).
|
||||||
|
*
|
||||||
|
* Returns: The callback should return zero.
|
||||||
|
*/
|
||||||
|
typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */
|
||||||
|
long timeout_ms, /* see above */
|
||||||
|
void *userp); /* private callback
|
||||||
|
pointer */
|
||||||
|
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
|
||||||
|
int *running_handles);
|
||||||
|
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
|
||||||
|
curl_socket_t s,
|
||||||
|
int ev_bitmask,
|
||||||
|
int *running_handles);
|
||||||
|
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
|
||||||
|
int *running_handles);
|
||||||
|
|
||||||
|
#ifndef CURL_ALLOW_OLD_MULTI_SOCKET
|
||||||
|
/* This macro below was added in 7.16.3 to push users who recompile to use
|
||||||
|
the new curl_multi_socket_action() instead of the old curl_multi_socket()
|
||||||
|
*/
|
||||||
|
#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_timeout()
|
||||||
|
*
|
||||||
|
* Desc: Returns the maximum number of milliseconds the app is allowed to
|
||||||
|
* wait before curl_multi_socket() or curl_multi_perform() must be
|
||||||
|
* called (to allow libcurl's timed events to take place).
|
||||||
|
*
|
||||||
|
* Returns: CURLM error code.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
|
||||||
|
long *milliseconds);
|
||||||
|
|
||||||
|
#undef CINIT /* re-using the same name as in curl.h */
|
||||||
|
|
||||||
|
#ifdef CURL_ISOCPP
|
||||||
|
#define CINIT(name,type,num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num
|
||||||
|
#else
|
||||||
|
/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
|
||||||
|
#define LONG CURLOPTTYPE_LONG
|
||||||
|
#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT
|
||||||
|
#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
|
||||||
|
#define OFF_T CURLOPTTYPE_OFF_T
|
||||||
|
#define CINIT(name,type,number) CURLMOPT_/**/name = type + number
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
/* This is the socket callback function pointer */
|
||||||
|
CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1),
|
||||||
|
|
||||||
|
/* This is the argument passed to the socket callback */
|
||||||
|
CINIT(SOCKETDATA, OBJECTPOINT, 2),
|
||||||
|
|
||||||
|
/* set to 1 to enable pipelining for this multi handle */
|
||||||
|
CINIT(PIPELINING, LONG, 3),
|
||||||
|
|
||||||
|
/* This is the timer callback function pointer */
|
||||||
|
CINIT(TIMERFUNCTION, FUNCTIONPOINT, 4),
|
||||||
|
|
||||||
|
/* This is the argument passed to the timer callback */
|
||||||
|
CINIT(TIMERDATA, OBJECTPOINT, 5),
|
||||||
|
|
||||||
|
/* maximum number of entries in the connection cache */
|
||||||
|
CINIT(MAXCONNECTS, LONG, 6),
|
||||||
|
|
||||||
|
/* maximum number of (pipelining) connections to one host */
|
||||||
|
CINIT(MAX_HOST_CONNECTIONS, LONG, 7),
|
||||||
|
|
||||||
|
/* maximum number of requests in a pipeline */
|
||||||
|
CINIT(MAX_PIPELINE_LENGTH, LONG, 8),
|
||||||
|
|
||||||
|
/* a connection with a content-length longer than this
|
||||||
|
will not be considered for pipelining */
|
||||||
|
CINIT(CONTENT_LENGTH_PENALTY_SIZE, OFF_T, 9),
|
||||||
|
|
||||||
|
/* a connection with a chunk length longer than this
|
||||||
|
will not be considered for pipelining */
|
||||||
|
CINIT(CHUNK_LENGTH_PENALTY_SIZE, OFF_T, 10),
|
||||||
|
|
||||||
|
/* a list of site names(+port) that are blacklisted from
|
||||||
|
pipelining */
|
||||||
|
CINIT(PIPELINING_SITE_BL, OBJECTPOINT, 11),
|
||||||
|
|
||||||
|
/* a list of server types that are blacklisted from
|
||||||
|
pipelining */
|
||||||
|
CINIT(PIPELINING_SERVER_BL, OBJECTPOINT, 12),
|
||||||
|
|
||||||
|
/* maximum number of open connections in total */
|
||||||
|
CINIT(MAX_TOTAL_CONNECTIONS, LONG, 13),
|
||||||
|
|
||||||
|
/* This is the server push callback function pointer */
|
||||||
|
CINIT(PUSHFUNCTION, FUNCTIONPOINT, 14),
|
||||||
|
|
||||||
|
/* This is the argument passed to the server push callback */
|
||||||
|
CINIT(PUSHDATA, OBJECTPOINT, 15),
|
||||||
|
|
||||||
|
CURLMOPT_LASTENTRY /* the last unused */
|
||||||
|
} CURLMoption;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_setopt()
|
||||||
|
*
|
||||||
|
* Desc: Sets options for the multi handle.
|
||||||
|
*
|
||||||
|
* Returns: CURLM error code.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
|
||||||
|
CURLMoption option, ...);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_multi_assign()
|
||||||
|
*
|
||||||
|
* Desc: This function sets an association in the multi handle between the
|
||||||
|
* given socket and a private pointer of the application. This is
|
||||||
|
* (only) useful for curl_multi_socket uses.
|
||||||
|
*
|
||||||
|
* Returns: CURLM error code.
|
||||||
|
*/
|
||||||
|
CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
|
||||||
|
curl_socket_t sockfd, void *sockp);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name: curl_push_callback
|
||||||
|
*
|
||||||
|
* Desc: This callback gets called when a new stream is being pushed by the
|
||||||
|
* server. It approves or denies the new stream.
|
||||||
|
*
|
||||||
|
* Returns: CURL_PUSH_OK or CURL_PUSH_DENY.
|
||||||
|
*/
|
||||||
|
#define CURL_PUSH_OK 0
|
||||||
|
#define CURL_PUSH_DENY 1
|
||||||
|
|
||||||
|
struct curl_pushheaders; /* forward declaration only */
|
||||||
|
|
||||||
|
CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h,
|
||||||
|
size_t num);
|
||||||
|
CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h,
|
||||||
|
const char *name);
|
||||||
|
|
||||||
|
typedef int (*curl_push_callback)(CURL *parent,
|
||||||
|
CURL *easy,
|
||||||
|
size_t num_headers,
|
||||||
|
struct curl_pushheaders *headers,
|
||||||
|
void *userp);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* end of extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
33
3rdparty/curl/inc/stdcheaders.h
vendored
Normal file
33
3rdparty/curl/inc/stdcheaders.h
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#ifndef __STDC_HEADERS_H
|
||||||
|
#define __STDC_HEADERS_H
|
||||||
|
/***************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
*
|
||||||
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
* copies of the Software, and permit persons to whom the Software is
|
||||||
|
* furnished to do so, under the terms of the COPYING file.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
size_t fread(void *, size_t, size_t, FILE *);
|
||||||
|
size_t fwrite(const void *, size_t, size_t, FILE *);
|
||||||
|
|
||||||
|
int strcasecmp(const char *, const char *);
|
||||||
|
int strncasecmp(const char *, const char *, size_t);
|
||||||
|
|
||||||
|
#endif /* __STDC_HEADERS_H */
|
473
3rdparty/curl/inc/system.h
vendored
Normal file
473
3rdparty/curl/inc/system.h
vendored
Normal file
@ -0,0 +1,473 @@
|
|||||||
|
#ifndef __CURL_SYSTEM_H
|
||||||
|
#define __CURL_SYSTEM_H
|
||||||
|
/***************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
*
|
||||||
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
* copies of the Software, and permit persons to whom the Software is
|
||||||
|
* furnished to do so, under the terms of the COPYING file.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Try to keep one section per platform, compiler and architecture, otherwise,
|
||||||
|
* if an existing section is reused for a different one and later on the
|
||||||
|
* original is adjusted, probably the piggybacking one can be adversely
|
||||||
|
* changed.
|
||||||
|
*
|
||||||
|
* In order to differentiate between platforms/compilers/architectures use
|
||||||
|
* only compiler built in predefined preprocessor symbols.
|
||||||
|
*
|
||||||
|
* curl_off_t
|
||||||
|
* ----------
|
||||||
|
*
|
||||||
|
* For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit
|
||||||
|
* wide signed integral data type. The width of this data type must remain
|
||||||
|
* constant and independent of any possible large file support settings.
|
||||||
|
*
|
||||||
|
* As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit
|
||||||
|
* wide signed integral data type if there is no 64-bit type.
|
||||||
|
*
|
||||||
|
* As a general rule, curl_off_t shall not be mapped to off_t. This rule shall
|
||||||
|
* only be violated if off_t is the only 64-bit data type available and the
|
||||||
|
* size of off_t is independent of large file support settings. Keep your
|
||||||
|
* build on the safe side avoiding an off_t gating. If you have a 64-bit
|
||||||
|
* off_t then take for sure that another 64-bit data type exists, dig deeper
|
||||||
|
* and you will find it.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(__DJGPP__) || defined(__GO32__)
|
||||||
|
# if defined(__DJGPP__) && (__DJGPP__ > 1)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# else
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
|
||||||
|
#elif defined(__SALFORDC__)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
|
||||||
|
#elif defined(__BORLANDC__)
|
||||||
|
# if (__BORLANDC__ < 0x520)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# else
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T i64
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ui64
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
|
||||||
|
#elif defined(__TURBOC__)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
|
||||||
|
#elif defined(__WATCOMC__)
|
||||||
|
# if defined(__386__)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T i64
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ui64
|
||||||
|
# else
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
|
||||||
|
#elif defined(__POCC__)
|
||||||
|
# if (__POCC__ < 280)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# elif defined(_MSC_VER)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T i64
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ui64
|
||||||
|
# else
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
|
||||||
|
#elif defined(__LCC__)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
|
||||||
|
#elif defined(__SYMBIAN32__)
|
||||||
|
# if defined(__EABI__) /* Treat all ARM compilers equally */
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# elif defined(__CW32__)
|
||||||
|
# pragma longlong on
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# elif defined(__VC32__)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
|
||||||
|
|
||||||
|
#elif defined(__MWERKS__)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
|
||||||
|
#elif defined(_WIN32_WCE)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T i64
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ui64
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
|
||||||
|
#elif defined(__MINGW32__)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
||||||
|
# define CURL_PULL_SYS_TYPES_H 1
|
||||||
|
# define CURL_PULL_WS2TCPIP_H 1
|
||||||
|
|
||||||
|
#elif defined(__VMS)
|
||||||
|
# if defined(__VAX)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# else
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
|
||||||
|
|
||||||
|
#elif defined(__OS400__)
|
||||||
|
# if defined(__ILEC400__)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
||||||
|
# define CURL_PULL_SYS_TYPES_H 1
|
||||||
|
# define CURL_PULL_SYS_SOCKET_H 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__MVS__)
|
||||||
|
# if defined(__IBMC__) || defined(__IBMCPP__)
|
||||||
|
# if defined(_ILP32)
|
||||||
|
# elif defined(_LP64)
|
||||||
|
# endif
|
||||||
|
# if defined(_LONG_LONG)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# elif defined(_LP64)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# else
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
||||||
|
# define CURL_PULL_SYS_TYPES_H 1
|
||||||
|
# define CURL_PULL_SYS_SOCKET_H 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__370__)
|
||||||
|
# if defined(__IBMC__) || defined(__IBMCPP__)
|
||||||
|
# if defined(_ILP32)
|
||||||
|
# elif defined(_LP64)
|
||||||
|
# endif
|
||||||
|
# if defined(_LONG_LONG)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# elif defined(_LP64)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# else
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
||||||
|
# define CURL_PULL_SYS_TYPES_H 1
|
||||||
|
# define CURL_PULL_SYS_SOCKET_H 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(TPF)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
|
||||||
|
#elif defined(__TINYC__) /* also known as tcc */
|
||||||
|
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
||||||
|
# define CURL_PULL_SYS_TYPES_H 1
|
||||||
|
# define CURL_PULL_SYS_SOCKET_H 1
|
||||||
|
|
||||||
|
#elif defined(__SUNPRO_C) /* Oracle Solaris Studio */
|
||||||
|
# if !defined(__LP64) && (defined(__ILP32) || \
|
||||||
|
defined(__i386) || defined(__sparcv8))
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# elif defined(__LP64) || \
|
||||||
|
defined(__amd64) || defined(__sparcv9)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
||||||
|
# define CURL_PULL_SYS_TYPES_H 1
|
||||||
|
# define CURL_PULL_SYS_SOCKET_H 1
|
||||||
|
|
||||||
|
/* ===================================== */
|
||||||
|
/* KEEP MSVC THE PENULTIMATE ENTRY */
|
||||||
|
/* ===================================== */
|
||||||
|
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T __int64
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "I64d"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "I64u"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T i64
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ui64
|
||||||
|
# else
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
|
||||||
|
/* ===================================== */
|
||||||
|
/* KEEP GENERIC GCC THE LAST ENTRY */
|
||||||
|
/* ===================================== */
|
||||||
|
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
# if !defined(__LP64__) && \
|
||||||
|
(defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \
|
||||||
|
defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \
|
||||||
|
defined(__sparc__) || defined(__mips__) || defined(__sh__) || \
|
||||||
|
defined(__XTENSA__) || \
|
||||||
|
(defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \
|
||||||
|
(defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L))
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
# elif defined(__LP64__) || \
|
||||||
|
defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \
|
||||||
|
(defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \
|
||||||
|
(defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L)
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# endif
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
||||||
|
# define CURL_PULL_SYS_TYPES_H 1
|
||||||
|
# define CURL_PULL_SYS_SOCKET_H 1
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* generic "safe guess" on old 32 bit style */
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "ld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "lu"
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T L
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU UL
|
||||||
|
# define CURL_TYPEOF_CURL_SOCKLEN_T int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _AIX
|
||||||
|
/* AIX needs <sys/poll.h> */
|
||||||
|
#define CURL_PULL_SYS_POLL_H
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */
|
||||||
|
/* ws2tcpip.h is required here to properly make type definitions below. */
|
||||||
|
#ifdef CURL_PULL_WS2TCPIP_H
|
||||||
|
# include <winsock2.h>
|
||||||
|
# include <windows.h>
|
||||||
|
# include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */
|
||||||
|
/* sys/types.h is required here to properly make type definitions below. */
|
||||||
|
#ifdef CURL_PULL_SYS_TYPES_H
|
||||||
|
# include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */
|
||||||
|
/* sys/socket.h is required here to properly make type definitions below. */
|
||||||
|
#ifdef CURL_PULL_SYS_SOCKET_H
|
||||||
|
# include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */
|
||||||
|
/* sys/poll.h is required here to properly make type definitions below. */
|
||||||
|
#ifdef CURL_PULL_SYS_POLL_H
|
||||||
|
# include <sys/poll.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Data type definition of curl_socklen_t. */
|
||||||
|
#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
|
||||||
|
typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Data type definition of curl_off_t. */
|
||||||
|
|
||||||
|
#ifdef CURL_TYPEOF_CURL_OFF_T
|
||||||
|
typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow
|
||||||
|
* these to be visible and exported by the external libcurl interface API,
|
||||||
|
* while also making them visible to the library internals, simply including
|
||||||
|
* curl_setup.h, without actually needing to include curl.h internally.
|
||||||
|
* If some day this section would grow big enough, all this should be moved
|
||||||
|
* to its own header file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Figure out if we can use the ## preprocessor operator, which is supported
|
||||||
|
* by ISO/ANSI C and C++. Some compilers support it without setting __STDC__
|
||||||
|
* or __cplusplus so we need to carefully check for them too.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
|
||||||
|
defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
|
||||||
|
defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
|
||||||
|
defined(__ILEC400__)
|
||||||
|
/* This compiler is believed to have an ISO compatible preprocessor */
|
||||||
|
#define CURL_ISOCPP
|
||||||
|
#else
|
||||||
|
/* This compiler is believed NOT to have an ISO compatible preprocessor */
|
||||||
|
#undef CURL_ISOCPP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macros for minimum-width signed and unsigned curl_off_t integer constants.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551)
|
||||||
|
# define __CURL_OFF_T_C_HLPR2(x) x
|
||||||
|
# define __CURL_OFF_T_C_HLPR1(x) __CURL_OFF_T_C_HLPR2(x)
|
||||||
|
# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \
|
||||||
|
__CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T)
|
||||||
|
# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \
|
||||||
|
__CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU)
|
||||||
|
#else
|
||||||
|
# ifdef CURL_ISOCPP
|
||||||
|
# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix
|
||||||
|
# else
|
||||||
|
# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix
|
||||||
|
# endif
|
||||||
|
# define __CURL_OFF_T_C_HLPR1(Val,Suffix) __CURL_OFF_T_C_HLPR2(Val,Suffix)
|
||||||
|
# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T)
|
||||||
|
# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __CURL_SYSTEM_H */
|
696
3rdparty/curl/inc/typecheck-gcc.h
vendored
Normal file
696
3rdparty/curl/inc/typecheck-gcc.h
vendored
Normal file
@ -0,0 +1,696 @@
|
|||||||
|
#ifndef __CURL_TYPECHECK_GCC_H
|
||||||
|
#define __CURL_TYPECHECK_GCC_H
|
||||||
|
/***************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
*
|
||||||
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
* copies of the Software, and permit persons to whom the Software is
|
||||||
|
* furnished to do so, under the terms of the COPYING file.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/* wraps curl_easy_setopt() with typechecking */
|
||||||
|
|
||||||
|
/* To add a new kind of warning, add an
|
||||||
|
* if(_curl_is_sometype_option(_curl_opt))
|
||||||
|
* if(!_curl_is_sometype(value))
|
||||||
|
* _curl_easy_setopt_err_sometype();
|
||||||
|
* block and define _curl_is_sometype_option, _curl_is_sometype and
|
||||||
|
* _curl_easy_setopt_err_sometype below
|
||||||
|
*
|
||||||
|
* NOTE: We use two nested 'if' statements here instead of the && operator, in
|
||||||
|
* order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x
|
||||||
|
* when compiling with -Wlogical-op.
|
||||||
|
*
|
||||||
|
* To add an option that uses the same type as an existing option, you'll just
|
||||||
|
* need to extend the appropriate _curl_*_option macro
|
||||||
|
*/
|
||||||
|
#define curl_easy_setopt(handle, option, value) \
|
||||||
|
__extension__ ({ \
|
||||||
|
__typeof__(option) _curl_opt = option; \
|
||||||
|
if(__builtin_constant_p(_curl_opt)) { \
|
||||||
|
if(_curl_is_long_option(_curl_opt)) \
|
||||||
|
if(!_curl_is_long(value)) \
|
||||||
|
_curl_easy_setopt_err_long(); \
|
||||||
|
if(_curl_is_off_t_option(_curl_opt)) \
|
||||||
|
if(!_curl_is_off_t(value)) \
|
||||||
|
_curl_easy_setopt_err_curl_off_t(); \
|
||||||
|
if(_curl_is_string_option(_curl_opt)) \
|
||||||
|
if(!_curl_is_string(value)) \
|
||||||
|
_curl_easy_setopt_err_string(); \
|
||||||
|
if(_curl_is_write_cb_option(_curl_opt)) \
|
||||||
|
if(!_curl_is_write_cb(value)) \
|
||||||
|
_curl_easy_setopt_err_write_callback(); \
|
||||||
|
if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \
|
||||||
|
if(!_curl_is_resolver_start_callback(value)) \
|
||||||
|
_curl_easy_setopt_err_resolver_start_callback(); \
|
||||||
|
if((_curl_opt) == CURLOPT_READFUNCTION) \
|
||||||
|
if(!_curl_is_read_cb(value)) \
|
||||||
|
_curl_easy_setopt_err_read_cb(); \
|
||||||
|
if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \
|
||||||
|
if(!_curl_is_ioctl_cb(value)) \
|
||||||
|
_curl_easy_setopt_err_ioctl_cb(); \
|
||||||
|
if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \
|
||||||
|
if(!_curl_is_sockopt_cb(value)) \
|
||||||
|
_curl_easy_setopt_err_sockopt_cb(); \
|
||||||
|
if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \
|
||||||
|
if(!_curl_is_opensocket_cb(value)) \
|
||||||
|
_curl_easy_setopt_err_opensocket_cb(); \
|
||||||
|
if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \
|
||||||
|
if(!_curl_is_progress_cb(value)) \
|
||||||
|
_curl_easy_setopt_err_progress_cb(); \
|
||||||
|
if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \
|
||||||
|
if(!_curl_is_debug_cb(value)) \
|
||||||
|
_curl_easy_setopt_err_debug_cb(); \
|
||||||
|
if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \
|
||||||
|
if(!_curl_is_ssl_ctx_cb(value)) \
|
||||||
|
_curl_easy_setopt_err_ssl_ctx_cb(); \
|
||||||
|
if(_curl_is_conv_cb_option(_curl_opt)) \
|
||||||
|
if(!_curl_is_conv_cb(value)) \
|
||||||
|
_curl_easy_setopt_err_conv_cb(); \
|
||||||
|
if((_curl_opt) == CURLOPT_SEEKFUNCTION) \
|
||||||
|
if(!_curl_is_seek_cb(value)) \
|
||||||
|
_curl_easy_setopt_err_seek_cb(); \
|
||||||
|
if(_curl_is_cb_data_option(_curl_opt)) \
|
||||||
|
if(!_curl_is_cb_data(value)) \
|
||||||
|
_curl_easy_setopt_err_cb_data(); \
|
||||||
|
if((_curl_opt) == CURLOPT_ERRORBUFFER) \
|
||||||
|
if(!_curl_is_error_buffer(value)) \
|
||||||
|
_curl_easy_setopt_err_error_buffer(); \
|
||||||
|
if((_curl_opt) == CURLOPT_STDERR) \
|
||||||
|
if(!_curl_is_FILE(value)) \
|
||||||
|
_curl_easy_setopt_err_FILE(); \
|
||||||
|
if(_curl_is_postfields_option(_curl_opt)) \
|
||||||
|
if(!_curl_is_postfields(value)) \
|
||||||
|
_curl_easy_setopt_err_postfields(); \
|
||||||
|
if((_curl_opt) == CURLOPT_HTTPPOST) \
|
||||||
|
if(!_curl_is_arr((value), struct curl_httppost)) \
|
||||||
|
_curl_easy_setopt_err_curl_httpost(); \
|
||||||
|
if((_curl_opt) == CURLOPT_MIMEPOST) \
|
||||||
|
if(!_curl_is_ptr((value), curl_mime)) \
|
||||||
|
_curl_easy_setopt_err_curl_mimepost(); \
|
||||||
|
if(_curl_is_slist_option(_curl_opt)) \
|
||||||
|
if(!_curl_is_arr((value), struct curl_slist)) \
|
||||||
|
_curl_easy_setopt_err_curl_slist(); \
|
||||||
|
if((_curl_opt) == CURLOPT_SHARE) \
|
||||||
|
if(!_curl_is_ptr((value), CURLSH)) \
|
||||||
|
_curl_easy_setopt_err_CURLSH(); \
|
||||||
|
} \
|
||||||
|
curl_easy_setopt(handle, _curl_opt, value); \
|
||||||
|
})
|
||||||
|
|
||||||
|
/* wraps curl_easy_getinfo() with typechecking */
|
||||||
|
/* FIXME: don't allow const pointers */
|
||||||
|
#define curl_easy_getinfo(handle, info, arg) \
|
||||||
|
__extension__ ({ \
|
||||||
|
__typeof__(info) _curl_info = info; \
|
||||||
|
if(__builtin_constant_p(_curl_info)) { \
|
||||||
|
if(_curl_is_string_info(_curl_info)) \
|
||||||
|
if(!_curl_is_arr((arg), char *)) \
|
||||||
|
_curl_easy_getinfo_err_string(); \
|
||||||
|
if(_curl_is_long_info(_curl_info)) \
|
||||||
|
if(!_curl_is_arr((arg), long)) \
|
||||||
|
_curl_easy_getinfo_err_long(); \
|
||||||
|
if(_curl_is_double_info(_curl_info)) \
|
||||||
|
if(!_curl_is_arr((arg), double)) \
|
||||||
|
_curl_easy_getinfo_err_double(); \
|
||||||
|
if(_curl_is_slist_info(_curl_info)) \
|
||||||
|
if(!_curl_is_arr((arg), struct curl_slist *)) \
|
||||||
|
_curl_easy_getinfo_err_curl_slist(); \
|
||||||
|
if(_curl_is_tlssessioninfo_info(_curl_info)) \
|
||||||
|
if(!_curl_is_arr((arg), struct curl_tlssessioninfo *)) \
|
||||||
|
_curl_easy_getinfo_err_curl_tlssesssioninfo(); \
|
||||||
|
if(_curl_is_certinfo_info(_curl_info)) \
|
||||||
|
if(!_curl_is_arr((arg), struct curl_certinfo *)) \
|
||||||
|
_curl_easy_getinfo_err_curl_certinfo(); \
|
||||||
|
if(_curl_is_socket_info(_curl_info)) \
|
||||||
|
if(!_curl_is_arr((arg), curl_socket_t)) \
|
||||||
|
_curl_easy_getinfo_err_curl_socket(); \
|
||||||
|
if(_curl_is_off_t_info(_curl_info)) \
|
||||||
|
if(!_curl_is_arr((arg), curl_off_t)) \
|
||||||
|
_curl_easy_getinfo_err_curl_off_t(); \
|
||||||
|
} \
|
||||||
|
curl_easy_getinfo(handle, _curl_info, arg); \
|
||||||
|
})
|
||||||
|
|
||||||
|
/* TODO: typechecking for curl_share_setopt() and curl_multi_setopt(),
|
||||||
|
* for now just make sure that the functions are called with three
|
||||||
|
* arguments
|
||||||
|
*/
|
||||||
|
#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
|
||||||
|
#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)
|
||||||
|
|
||||||
|
|
||||||
|
/* the actual warnings, triggered by calling the _curl_easy_setopt_err*
|
||||||
|
* functions */
|
||||||
|
|
||||||
|
/* To define a new warning, use _CURL_WARNING(identifier, "message") */
|
||||||
|
#define _CURL_WARNING(id, message) \
|
||||||
|
static void __attribute__((__warning__(message))) \
|
||||||
|
__attribute__((__unused__)) __attribute__((__noinline__)) \
|
||||||
|
id(void) { __asm__(""); }
|
||||||
|
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_long,
|
||||||
|
"curl_easy_setopt expects a long argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_curl_off_t,
|
||||||
|
"curl_easy_setopt expects a curl_off_t argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_string,
|
||||||
|
"curl_easy_setopt expects a "
|
||||||
|
"string ('char *' or char[]) argument for this option"
|
||||||
|
)
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_write_callback,
|
||||||
|
"curl_easy_setopt expects a curl_write_callback argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_resolver_start_callback,
|
||||||
|
"curl_easy_setopt expects a "
|
||||||
|
"curl_resolver_start_callback argument for this option"
|
||||||
|
)
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_read_cb,
|
||||||
|
"curl_easy_setopt expects a curl_read_callback argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_ioctl_cb,
|
||||||
|
"curl_easy_setopt expects a curl_ioctl_callback argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_sockopt_cb,
|
||||||
|
"curl_easy_setopt expects a curl_sockopt_callback argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_opensocket_cb,
|
||||||
|
"curl_easy_setopt expects a "
|
||||||
|
"curl_opensocket_callback argument for this option"
|
||||||
|
)
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_progress_cb,
|
||||||
|
"curl_easy_setopt expects a curl_progress_callback argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_debug_cb,
|
||||||
|
"curl_easy_setopt expects a curl_debug_callback argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_ssl_ctx_cb,
|
||||||
|
"curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_conv_cb,
|
||||||
|
"curl_easy_setopt expects a curl_conv_callback argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_seek_cb,
|
||||||
|
"curl_easy_setopt expects a curl_seek_callback argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_cb_data,
|
||||||
|
"curl_easy_setopt expects a "
|
||||||
|
"private data pointer as argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_error_buffer,
|
||||||
|
"curl_easy_setopt expects a "
|
||||||
|
"char buffer of CURL_ERROR_SIZE as argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_FILE,
|
||||||
|
"curl_easy_setopt expects a 'FILE *' argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_postfields,
|
||||||
|
"curl_easy_setopt expects a 'void *' or 'char *' argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_curl_httpost,
|
||||||
|
"curl_easy_setopt expects a 'struct curl_httppost *' "
|
||||||
|
"argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_curl_mimepost,
|
||||||
|
"curl_easy_setopt expects a 'curl_mime *' "
|
||||||
|
"argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_curl_slist,
|
||||||
|
"curl_easy_setopt expects a 'struct curl_slist *' argument for this option")
|
||||||
|
_CURL_WARNING(_curl_easy_setopt_err_CURLSH,
|
||||||
|
"curl_easy_setopt expects a CURLSH* argument for this option")
|
||||||
|
|
||||||
|
_CURL_WARNING(_curl_easy_getinfo_err_string,
|
||||||
|
"curl_easy_getinfo expects a pointer to 'char *' for this info")
|
||||||
|
_CURL_WARNING(_curl_easy_getinfo_err_long,
|
||||||
|
"curl_easy_getinfo expects a pointer to long for this info")
|
||||||
|
_CURL_WARNING(_curl_easy_getinfo_err_double,
|
||||||
|
"curl_easy_getinfo expects a pointer to double for this info")
|
||||||
|
_CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
|
||||||
|
"curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info")
|
||||||
|
_CURL_WARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo,
|
||||||
|
"curl_easy_getinfo expects a pointer to "
|
||||||
|
"'struct curl_tlssessioninfo *' for this info")
|
||||||
|
_CURL_WARNING(_curl_easy_getinfo_err_curl_certinfo,
|
||||||
|
"curl_easy_getinfo expects a pointer to "
|
||||||
|
"'struct curl_certinfo *' for this info")
|
||||||
|
_CURL_WARNING(_curl_easy_getinfo_err_curl_socket,
|
||||||
|
"curl_easy_getinfo expects a pointer to curl_socket_t for this info")
|
||||||
|
_CURL_WARNING(_curl_easy_getinfo_err_curl_off_t,
|
||||||
|
"curl_easy_getinfo expects a pointer to curl_off_t for this info")
|
||||||
|
|
||||||
|
/* groups of curl_easy_setops options that take the same type of argument */
|
||||||
|
|
||||||
|
/* To add a new option to one of the groups, just add
|
||||||
|
* (option) == CURLOPT_SOMETHING
|
||||||
|
* to the or-expression. If the option takes a long or curl_off_t, you don't
|
||||||
|
* have to do anything
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* evaluates to true if option takes a long argument */
|
||||||
|
#define _curl_is_long_option(option) \
|
||||||
|
(0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT)
|
||||||
|
|
||||||
|
#define _curl_is_off_t_option(option) \
|
||||||
|
((option) > CURLOPTTYPE_OFF_T)
|
||||||
|
|
||||||
|
/* evaluates to true if option takes a char* argument */
|
||||||
|
#define _curl_is_string_option(option) \
|
||||||
|
((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \
|
||||||
|
(option) == CURLOPT_ACCEPT_ENCODING || \
|
||||||
|
(option) == CURLOPT_CAINFO || \
|
||||||
|
(option) == CURLOPT_CAPATH || \
|
||||||
|
(option) == CURLOPT_COOKIE || \
|
||||||
|
(option) == CURLOPT_COOKIEFILE || \
|
||||||
|
(option) == CURLOPT_COOKIEJAR || \
|
||||||
|
(option) == CURLOPT_COOKIELIST || \
|
||||||
|
(option) == CURLOPT_CRLFILE || \
|
||||||
|
(option) == CURLOPT_CUSTOMREQUEST || \
|
||||||
|
(option) == CURLOPT_DEFAULT_PROTOCOL || \
|
||||||
|
(option) == CURLOPT_DNS_INTERFACE || \
|
||||||
|
(option) == CURLOPT_DNS_LOCAL_IP4 || \
|
||||||
|
(option) == CURLOPT_DNS_LOCAL_IP6 || \
|
||||||
|
(option) == CURLOPT_DNS_SERVERS || \
|
||||||
|
(option) == CURLOPT_EGDSOCKET || \
|
||||||
|
(option) == CURLOPT_FTPPORT || \
|
||||||
|
(option) == CURLOPT_FTP_ACCOUNT || \
|
||||||
|
(option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \
|
||||||
|
(option) == CURLOPT_INTERFACE || \
|
||||||
|
(option) == CURLOPT_ISSUERCERT || \
|
||||||
|
(option) == CURLOPT_KEYPASSWD || \
|
||||||
|
(option) == CURLOPT_KRBLEVEL || \
|
||||||
|
(option) == CURLOPT_LOGIN_OPTIONS || \
|
||||||
|
(option) == CURLOPT_MAIL_AUTH || \
|
||||||
|
(option) == CURLOPT_MAIL_FROM || \
|
||||||
|
(option) == CURLOPT_NETRC_FILE || \
|
||||||
|
(option) == CURLOPT_NOPROXY || \
|
||||||
|
(option) == CURLOPT_PASSWORD || \
|
||||||
|
(option) == CURLOPT_PINNEDPUBLICKEY || \
|
||||||
|
(option) == CURLOPT_PRE_PROXY || \
|
||||||
|
(option) == CURLOPT_PROXY || \
|
||||||
|
(option) == CURLOPT_PROXYPASSWORD || \
|
||||||
|
(option) == CURLOPT_PROXYUSERNAME || \
|
||||||
|
(option) == CURLOPT_PROXYUSERPWD || \
|
||||||
|
(option) == CURLOPT_PROXY_CAINFO || \
|
||||||
|
(option) == CURLOPT_PROXY_CAPATH || \
|
||||||
|
(option) == CURLOPT_PROXY_CRLFILE || \
|
||||||
|
(option) == CURLOPT_PROXY_KEYPASSWD || \
|
||||||
|
(option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \
|
||||||
|
(option) == CURLOPT_PROXY_SERVICE_NAME || \
|
||||||
|
(option) == CURLOPT_PROXY_SSLCERT || \
|
||||||
|
(option) == CURLOPT_PROXY_SSLCERTTYPE || \
|
||||||
|
(option) == CURLOPT_PROXY_SSLKEY || \
|
||||||
|
(option) == CURLOPT_PROXY_SSLKEYTYPE || \
|
||||||
|
(option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \
|
||||||
|
(option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \
|
||||||
|
(option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \
|
||||||
|
(option) == CURLOPT_PROXY_TLSAUTH_TYPE || \
|
||||||
|
(option) == CURLOPT_RANDOM_FILE || \
|
||||||
|
(option) == CURLOPT_RANGE || \
|
||||||
|
(option) == CURLOPT_REFERER || \
|
||||||
|
(option) == CURLOPT_RTSP_SESSION_ID || \
|
||||||
|
(option) == CURLOPT_RTSP_STREAM_URI || \
|
||||||
|
(option) == CURLOPT_RTSP_TRANSPORT || \
|
||||||
|
(option) == CURLOPT_SERVICE_NAME || \
|
||||||
|
(option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \
|
||||||
|
(option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \
|
||||||
|
(option) == CURLOPT_SSH_KNOWNHOSTS || \
|
||||||
|
(option) == CURLOPT_SSH_PRIVATE_KEYFILE || \
|
||||||
|
(option) == CURLOPT_SSH_PUBLIC_KEYFILE || \
|
||||||
|
(option) == CURLOPT_SSLCERT || \
|
||||||
|
(option) == CURLOPT_SSLCERTTYPE || \
|
||||||
|
(option) == CURLOPT_SSLENGINE || \
|
||||||
|
(option) == CURLOPT_SSLKEY || \
|
||||||
|
(option) == CURLOPT_SSLKEYTYPE || \
|
||||||
|
(option) == CURLOPT_SSL_CIPHER_LIST || \
|
||||||
|
(option) == CURLOPT_TLSAUTH_PASSWORD || \
|
||||||
|
(option) == CURLOPT_TLSAUTH_TYPE || \
|
||||||
|
(option) == CURLOPT_TLSAUTH_USERNAME || \
|
||||||
|
(option) == CURLOPT_UNIX_SOCKET_PATH || \
|
||||||
|
(option) == CURLOPT_URL || \
|
||||||
|
(option) == CURLOPT_USERAGENT || \
|
||||||
|
(option) == CURLOPT_USERNAME || \
|
||||||
|
(option) == CURLOPT_USERPWD || \
|
||||||
|
(option) == CURLOPT_XOAUTH2_BEARER || \
|
||||||
|
0)
|
||||||
|
|
||||||
|
/* evaluates to true if option takes a curl_write_callback argument */
|
||||||
|
#define _curl_is_write_cb_option(option) \
|
||||||
|
((option) == CURLOPT_HEADERFUNCTION || \
|
||||||
|
(option) == CURLOPT_WRITEFUNCTION)
|
||||||
|
|
||||||
|
/* evaluates to true if option takes a curl_conv_callback argument */
|
||||||
|
#define _curl_is_conv_cb_option(option) \
|
||||||
|
((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \
|
||||||
|
(option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \
|
||||||
|
(option) == CURLOPT_CONV_FROM_UTF8_FUNCTION)
|
||||||
|
|
||||||
|
/* evaluates to true if option takes a data argument to pass to a callback */
|
||||||
|
#define _curl_is_cb_data_option(option) \
|
||||||
|
((option) == CURLOPT_CHUNK_DATA || \
|
||||||
|
(option) == CURLOPT_CLOSESOCKETDATA || \
|
||||||
|
(option) == CURLOPT_DEBUGDATA || \
|
||||||
|
(option) == CURLOPT_FNMATCH_DATA || \
|
||||||
|
(option) == CURLOPT_HEADERDATA || \
|
||||||
|
(option) == CURLOPT_INTERLEAVEDATA || \
|
||||||
|
(option) == CURLOPT_IOCTLDATA || \
|
||||||
|
(option) == CURLOPT_OPENSOCKETDATA || \
|
||||||
|
(option) == CURLOPT_PRIVATE || \
|
||||||
|
(option) == CURLOPT_PROGRESSDATA || \
|
||||||
|
(option) == CURLOPT_READDATA || \
|
||||||
|
(option) == CURLOPT_SEEKDATA || \
|
||||||
|
(option) == CURLOPT_SOCKOPTDATA || \
|
||||||
|
(option) == CURLOPT_SSH_KEYDATA || \
|
||||||
|
(option) == CURLOPT_SSL_CTX_DATA || \
|
||||||
|
(option) == CURLOPT_WRITEDATA || \
|
||||||
|
(option) == CURLOPT_RESOLVER_START_DATA || \
|
||||||
|
0)
|
||||||
|
|
||||||
|
/* evaluates to true if option takes a POST data argument (void* or char*) */
|
||||||
|
#define _curl_is_postfields_option(option) \
|
||||||
|
((option) == CURLOPT_POSTFIELDS || \
|
||||||
|
(option) == CURLOPT_COPYPOSTFIELDS || \
|
||||||
|
0)
|
||||||
|
|
||||||
|
/* evaluates to true if option takes a struct curl_slist * argument */
|
||||||
|
#define _curl_is_slist_option(option) \
|
||||||
|
((option) == CURLOPT_HTTP200ALIASES || \
|
||||||
|
(option) == CURLOPT_HTTPHEADER || \
|
||||||
|
(option) == CURLOPT_MAIL_RCPT || \
|
||||||
|
(option) == CURLOPT_POSTQUOTE || \
|
||||||
|
(option) == CURLOPT_PREQUOTE || \
|
||||||
|
(option) == CURLOPT_PROXYHEADER || \
|
||||||
|
(option) == CURLOPT_QUOTE || \
|
||||||
|
(option) == CURLOPT_RESOLVE || \
|
||||||
|
(option) == CURLOPT_TELNETOPTIONS || \
|
||||||
|
0)
|
||||||
|
|
||||||
|
/* groups of curl_easy_getinfo infos that take the same type of argument */
|
||||||
|
|
||||||
|
/* evaluates to true if info expects a pointer to char * argument */
|
||||||
|
#define _curl_is_string_info(info) \
|
||||||
|
(CURLINFO_STRING < (info) && (info) < CURLINFO_LONG)
|
||||||
|
|
||||||
|
/* evaluates to true if info expects a pointer to long argument */
|
||||||
|
#define _curl_is_long_info(info) \
|
||||||
|
(CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE)
|
||||||
|
|
||||||
|
/* evaluates to true if info expects a pointer to double argument */
|
||||||
|
#define _curl_is_double_info(info) \
|
||||||
|
(CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST)
|
||||||
|
|
||||||
|
/* true if info expects a pointer to struct curl_slist * argument */
|
||||||
|
#define _curl_is_slist_info(info) \
|
||||||
|
(((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST))
|
||||||
|
|
||||||
|
/* true if info expects a pointer to struct curl_tlssessioninfo * argument */
|
||||||
|
#define _curl_is_tlssessioninfo_info(info) \
|
||||||
|
(((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION))
|
||||||
|
|
||||||
|
/* true if info expects a pointer to struct curl_certinfo * argument */
|
||||||
|
#define _curl_is_certinfo_info(info) ((info) == CURLINFO_CERTINFO)
|
||||||
|
|
||||||
|
/* true if info expects a pointer to struct curl_socket_t argument */
|
||||||
|
#define _curl_is_socket_info(info) \
|
||||||
|
(CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T)
|
||||||
|
|
||||||
|
/* true if info expects a pointer to curl_off_t argument */
|
||||||
|
#define _curl_is_off_t_info(info) \
|
||||||
|
(CURLINFO_OFF_T < (info))
|
||||||
|
|
||||||
|
|
||||||
|
/* typecheck helpers -- check whether given expression has requested type*/
|
||||||
|
|
||||||
|
/* For pointers, you can use the _curl_is_ptr/_curl_is_arr macros,
|
||||||
|
* otherwise define a new macro. Search for __builtin_types_compatible_p
|
||||||
|
* in the GCC manual.
|
||||||
|
* NOTE: these macros MUST NOT EVALUATE their arguments! The argument is
|
||||||
|
* the actual expression passed to the curl_easy_setopt macro. This
|
||||||
|
* means that you can only apply the sizeof and __typeof__ operators, no
|
||||||
|
* == or whatsoever.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* XXX: should evaluate to true iff expr is a pointer */
|
||||||
|
#define _curl_is_any_ptr(expr) \
|
||||||
|
(sizeof(expr) == sizeof(void *))
|
||||||
|
|
||||||
|
/* evaluates to true if expr is NULL */
|
||||||
|
/* XXX: must not evaluate expr, so this check is not accurate */
|
||||||
|
#define _curl_is_NULL(expr) \
|
||||||
|
(__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL)))
|
||||||
|
|
||||||
|
/* evaluates to true if expr is type*, const type* or NULL */
|
||||||
|
#define _curl_is_ptr(expr, type) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), type *) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), const type *))
|
||||||
|
|
||||||
|
/* evaluates to true if expr is one of type[], type*, NULL or const type* */
|
||||||
|
#define _curl_is_arr(expr, type) \
|
||||||
|
(_curl_is_ptr((expr), type) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), type []))
|
||||||
|
|
||||||
|
/* evaluates to true if expr is a string */
|
||||||
|
#define _curl_is_string(expr) \
|
||||||
|
(_curl_is_arr((expr), char) || \
|
||||||
|
_curl_is_arr((expr), signed char) || \
|
||||||
|
_curl_is_arr((expr), unsigned char))
|
||||||
|
|
||||||
|
/* evaluates to true if expr is a long (no matter the signedness)
|
||||||
|
* XXX: for now, int is also accepted (and therefore short and char, which
|
||||||
|
* are promoted to int when passed to a variadic function) */
|
||||||
|
#define _curl_is_long(expr) \
|
||||||
|
(__builtin_types_compatible_p(__typeof__(expr), long) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), signed long) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), unsigned long) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), int) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), signed int) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), unsigned int) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), short) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), signed short) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), unsigned short) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), char) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), signed char) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), unsigned char))
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_off_t */
|
||||||
|
#define _curl_is_off_t(expr) \
|
||||||
|
(__builtin_types_compatible_p(__typeof__(expr), curl_off_t))
|
||||||
|
|
||||||
|
/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */
|
||||||
|
/* XXX: also check size of an char[] array? */
|
||||||
|
#define _curl_is_error_buffer(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), char *) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(expr), char[]))
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type (const) void* or (const) FILE* */
|
||||||
|
#if 0
|
||||||
|
#define _curl_is_cb_data(expr) \
|
||||||
|
(_curl_is_ptr((expr), void) || \
|
||||||
|
_curl_is_ptr((expr), FILE))
|
||||||
|
#else /* be less strict */
|
||||||
|
#define _curl_is_cb_data(expr) \
|
||||||
|
_curl_is_any_ptr(expr)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type FILE* */
|
||||||
|
#define _curl_is_FILE(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
(__builtin_types_compatible_p(__typeof__(expr), FILE *)))
|
||||||
|
|
||||||
|
/* evaluates to true if expr can be passed as POST data (void* or char*) */
|
||||||
|
#define _curl_is_postfields(expr) \
|
||||||
|
(_curl_is_ptr((expr), void) || \
|
||||||
|
_curl_is_arr((expr), char))
|
||||||
|
|
||||||
|
/* FIXME: the whole callback checking is messy...
|
||||||
|
* The idea is to tolerate char vs. void and const vs. not const
|
||||||
|
* pointers in arguments at least
|
||||||
|
*/
|
||||||
|
/* helper: __builtin_types_compatible_p distinguishes between functions and
|
||||||
|
* function pointers, hide it */
|
||||||
|
#define _curl_callback_compatible(func, type) \
|
||||||
|
(__builtin_types_compatible_p(__typeof__(func), type) || \
|
||||||
|
__builtin_types_compatible_p(__typeof__(func) *, type))
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_resolver_start_callback */
|
||||||
|
#define _curl_is_resolver_start_callback(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
_curl_callback_compatible((expr), curl_resolver_start_callback))
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_read_callback or "similar" */
|
||||||
|
#define _curl_is_read_cb(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
_curl_callback_compatible((expr), __typeof__(fread) *) || \
|
||||||
|
_curl_callback_compatible((expr), curl_read_callback) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_read_callback1) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_read_callback2) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_read_callback3) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_read_callback4) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_read_callback5) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_read_callback6))
|
||||||
|
typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *);
|
||||||
|
typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *);
|
||||||
|
typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *);
|
||||||
|
typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *);
|
||||||
|
typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *);
|
||||||
|
typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *);
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_write_callback or "similar" */
|
||||||
|
#define _curl_is_write_cb(expr) \
|
||||||
|
(_curl_is_read_cb(expr) || \
|
||||||
|
_curl_callback_compatible((expr), __typeof__(fwrite) *) || \
|
||||||
|
_curl_callback_compatible((expr), curl_write_callback) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_write_callback1) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_write_callback2) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_write_callback3) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_write_callback4) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_write_callback5) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_write_callback6))
|
||||||
|
typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *);
|
||||||
|
typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t,
|
||||||
|
const void *);
|
||||||
|
typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *);
|
||||||
|
typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *);
|
||||||
|
typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t,
|
||||||
|
const void *);
|
||||||
|
typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *);
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */
|
||||||
|
#define _curl_is_ioctl_cb(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
_curl_callback_compatible((expr), curl_ioctl_callback) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ioctl_callback1) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ioctl_callback2) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ioctl_callback3) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ioctl_callback4))
|
||||||
|
typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *);
|
||||||
|
typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *);
|
||||||
|
typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *);
|
||||||
|
typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *);
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */
|
||||||
|
#define _curl_is_sockopt_cb(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
_curl_callback_compatible((expr), curl_sockopt_callback) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_sockopt_callback1) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_sockopt_callback2))
|
||||||
|
typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype);
|
||||||
|
typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t,
|
||||||
|
curlsocktype);
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_opensocket_callback or
|
||||||
|
"similar" */
|
||||||
|
#define _curl_is_opensocket_cb(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
_curl_callback_compatible((expr), curl_opensocket_callback) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_opensocket_callback1) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_opensocket_callback2) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_opensocket_callback3) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_opensocket_callback4))
|
||||||
|
typedef curl_socket_t (*_curl_opensocket_callback1)
|
||||||
|
(void *, curlsocktype, struct curl_sockaddr *);
|
||||||
|
typedef curl_socket_t (*_curl_opensocket_callback2)
|
||||||
|
(void *, curlsocktype, const struct curl_sockaddr *);
|
||||||
|
typedef curl_socket_t (*_curl_opensocket_callback3)
|
||||||
|
(const void *, curlsocktype, struct curl_sockaddr *);
|
||||||
|
typedef curl_socket_t (*_curl_opensocket_callback4)
|
||||||
|
(const void *, curlsocktype, const struct curl_sockaddr *);
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_progress_callback or "similar" */
|
||||||
|
#define _curl_is_progress_cb(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
_curl_callback_compatible((expr), curl_progress_callback) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_progress_callback1) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_progress_callback2))
|
||||||
|
typedef int (*_curl_progress_callback1)(void *,
|
||||||
|
double, double, double, double);
|
||||||
|
typedef int (*_curl_progress_callback2)(const void *,
|
||||||
|
double, double, double, double);
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_debug_callback or "similar" */
|
||||||
|
#define _curl_is_debug_cb(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
_curl_callback_compatible((expr), curl_debug_callback) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_debug_callback1) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_debug_callback2) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_debug_callback3) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_debug_callback4) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_debug_callback5) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_debug_callback6) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_debug_callback7) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_debug_callback8))
|
||||||
|
typedef int (*_curl_debug_callback1) (CURL *,
|
||||||
|
curl_infotype, char *, size_t, void *);
|
||||||
|
typedef int (*_curl_debug_callback2) (CURL *,
|
||||||
|
curl_infotype, char *, size_t, const void *);
|
||||||
|
typedef int (*_curl_debug_callback3) (CURL *,
|
||||||
|
curl_infotype, const char *, size_t, void *);
|
||||||
|
typedef int (*_curl_debug_callback4) (CURL *,
|
||||||
|
curl_infotype, const char *, size_t, const void *);
|
||||||
|
typedef int (*_curl_debug_callback5) (CURL *,
|
||||||
|
curl_infotype, unsigned char *, size_t, void *);
|
||||||
|
typedef int (*_curl_debug_callback6) (CURL *,
|
||||||
|
curl_infotype, unsigned char *, size_t, const void *);
|
||||||
|
typedef int (*_curl_debug_callback7) (CURL *,
|
||||||
|
curl_infotype, const unsigned char *, size_t, void *);
|
||||||
|
typedef int (*_curl_debug_callback8) (CURL *,
|
||||||
|
curl_infotype, const unsigned char *, size_t, const void *);
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */
|
||||||
|
/* this is getting even messier... */
|
||||||
|
#define _curl_is_ssl_ctx_cb(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
_curl_callback_compatible((expr), curl_ssl_ctx_callback) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ssl_ctx_callback1) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ssl_ctx_callback2) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ssl_ctx_callback3) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ssl_ctx_callback4) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ssl_ctx_callback5) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ssl_ctx_callback6) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ssl_ctx_callback7) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_ssl_ctx_callback8))
|
||||||
|
typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *);
|
||||||
|
typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *);
|
||||||
|
typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *);
|
||||||
|
typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *,
|
||||||
|
const void *);
|
||||||
|
#ifdef HEADER_SSL_H
|
||||||
|
/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX
|
||||||
|
* this will of course break if we're included before OpenSSL headers...
|
||||||
|
*/
|
||||||
|
typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX, void *);
|
||||||
|
typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX, const void *);
|
||||||
|
typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX, void *);
|
||||||
|
typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX,
|
||||||
|
const void *);
|
||||||
|
#else
|
||||||
|
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5;
|
||||||
|
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6;
|
||||||
|
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7;
|
||||||
|
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_conv_callback or "similar" */
|
||||||
|
#define _curl_is_conv_cb(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
_curl_callback_compatible((expr), curl_conv_callback) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_conv_callback1) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_conv_callback2) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_conv_callback3) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_conv_callback4))
|
||||||
|
typedef CURLcode (*_curl_conv_callback1)(char *, size_t length);
|
||||||
|
typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length);
|
||||||
|
typedef CURLcode (*_curl_conv_callback3)(void *, size_t length);
|
||||||
|
typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length);
|
||||||
|
|
||||||
|
/* evaluates to true if expr is of type curl_seek_callback or "similar" */
|
||||||
|
#define _curl_is_seek_cb(expr) \
|
||||||
|
(_curl_is_NULL(expr) || \
|
||||||
|
_curl_callback_compatible((expr), curl_seek_callback) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_seek_callback1) || \
|
||||||
|
_curl_callback_compatible((expr), _curl_seek_callback2))
|
||||||
|
typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int);
|
||||||
|
typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __CURL_TYPECHECK_GCC_H */
|
BIN
3rdparty/curl/lib/libcurl.lib
vendored
Normal file
BIN
3rdparty/curl/lib/libcurl.lib
vendored
Normal file
Binary file not shown.
BIN
3rdparty/dahua/dll/dhplay.dll
vendored
Normal file
BIN
3rdparty/dahua/dll/dhplay.dll
vendored
Normal file
Binary file not shown.
28
3rdparty/dahua/inc/avglobal.h
vendored
Normal file
28
3rdparty/dahua/inc/avglobal.h
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
#ifndef AVGLOBAL_H
|
||||||
|
#define AVGLOBAL_H
|
||||||
|
|
||||||
|
typedef int AV_int32;
|
||||||
|
typedef unsigned int AV_uint32;
|
||||||
|
|
||||||
|
#ifndef __OBJC__
|
||||||
|
typedef int AV_BOOL;
|
||||||
|
#else
|
||||||
|
typedef BOOL AV_BOOL;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef void* AV_HANDLE;
|
||||||
|
typedef unsigned char AV_BYTE;
|
||||||
|
typedef float AV_float;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
typedef __int64 AV_int64;
|
||||||
|
typedef unsigned __int64 AV_uint64;
|
||||||
|
#else
|
||||||
|
typedef long long AV_int64;
|
||||||
|
typedef unsigned long long AV_uint64;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
187
3rdparty/dahua/inc/dhassistant.h
vendored
Normal file
187
3rdparty/dahua/inc/dhassistant.h
vendored
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
|
||||||
|
#ifndef DHSYSABLE_H
|
||||||
|
#define DHSYSABLE_H
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// 查询类型
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
ABILITY_DYNAMIC_CONNECT = 1, // 查询动态多连接能力
|
||||||
|
ABILITY_WATERMARK_CFG = 17, // 水印配置能力
|
||||||
|
ABILITY_WIRELESS_CFG = 18, // wireless配置能力
|
||||||
|
ABILITY_DEVALL_INFO = 26, // 设备的能力列表
|
||||||
|
ABILITY_CARD_QUERY = 0x0100, // 卡号查询能力
|
||||||
|
ABILITY_MULTIPLAY = 0x0101, // 多画面预览能力
|
||||||
|
ABILITY_QUICK_QUERY_CFG = 0x0102, // 快速查询配置能力
|
||||||
|
ABILITY_INFRARED = 0x0121, // 无线报警能力
|
||||||
|
ABILITY_TRIGGER_MODE = 0x0131, // 报警输出触发方式能力
|
||||||
|
ABILITY_DISK_SUBAREA = 0x0141, // 网络硬盘分区能力
|
||||||
|
ABILITY_DSP_CFG = 0x0151, // 查询DSP能力
|
||||||
|
ABILITY_STREAM_MEDIA = 0x0161, // 查询SIP,RTSP能力
|
||||||
|
ABILITY_INTELLI_TRACKER = 0x0171, // 查询智能跟踪能力
|
||||||
|
} DH_SYS_ABILITY;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// 设备支持功能列表
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
EN_FTP = 0, // FTP 按位,1:传送录像文件 2:传送抓图文件
|
||||||
|
EN_SMTP, // SMTP 按位,1:报警传送文本邮件 2:报警传送图片 3:支持健康邮件功能
|
||||||
|
EN_NTP, // NTP 按位:1:调整系统时间
|
||||||
|
EN_AUTO_MAINTAIN, // 自动维护 按位:1:重启 2:关闭 3:删除文件
|
||||||
|
EN_VIDEO_COVER, // 区域遮挡 按位:1:多区域遮挡
|
||||||
|
EN_AUTO_REGISTER, // 主动注册 按位:1:注册后sdk主动登陆
|
||||||
|
EN_DHCP, // DHCP 按位:1:DHCP
|
||||||
|
EN_UPNP, // UPNP 按位:1:UPNP
|
||||||
|
EN_COMM_SNIFFER, // 串口抓包 按位:1:CommATM
|
||||||
|
EN_NET_SNIFFER, // 网络抓包 按位: 1:NetSniffer
|
||||||
|
EN_BURN, // 刻录功能 按位:1:查询刻录状态
|
||||||
|
EN_VIDEO_MATRIX, // 视频矩阵 按位:1:是否支持视频矩阵 2:是否支持SPOT视频矩阵 3:是否支持HDMI视频矩阵
|
||||||
|
EN_AUDIO_DETECT, // 音频检测 按位:1:是否支持音频检测
|
||||||
|
EN_STORAGE_STATION, // 存储位置 按位:1:Ftp服务器(Ips) 2:SMB 3:NFS 4:ISCSI 16:DISK 17:U盘
|
||||||
|
EN_IPSSEARCH, // IPS存储查询 按位:1:IPS存储查询
|
||||||
|
EN_SNAP, // 抓图 按位:1:分辨率2:帧率3:抓图方式4:抓图文件格式5:图画质量
|
||||||
|
EN_DEFAULTNIC, // 支持默认网卡查询 按位 1:支持
|
||||||
|
EN_SHOWQUALITY, // CBR模式下显示画质配置项 按位 1:支持
|
||||||
|
EN_CONFIG_IMEXPORT, // 配置导入导出功能能力 按位 1:支持
|
||||||
|
EN_LOG, // 是否支持分页方式的日志查询 按位 1:支持
|
||||||
|
EN_SCHEDULE, // 录像设置的一些能力 按位 1:冗余 2:预录 3:录像时间段
|
||||||
|
EN_NETWORK_TYPE, // 网络类型按位表示 1:以态网 2:无线局域 3:CDMA/GPRS 4:CDMA/GPRS多网卡配置
|
||||||
|
EN_MARK_IMPORTANTRECORD, // 标识重要录像 按位:1:设置重要录像标识
|
||||||
|
EN_ACFCONTROL, // 活动帧率控制 按位:1:支持活动帧率控制, 2:支持定时报警类型活动帧率控制(不支持动检),该能力与ACF能力互斥
|
||||||
|
EN_MULTIASSIOPTION, // 多路辅码流 按位:1:支持三路辅码流, 2:支持辅码流编码压缩格式独立设置
|
||||||
|
EN_DAVINCIMODULE, // 组件化模块 按位:1,时间表分开处理 2:标准I帧间隔设置
|
||||||
|
EN_GPS, // GPS功能 按位:1:Gps定位功能
|
||||||
|
EN_MULTIETHERNET, // 支持多网卡查询 按位 1:支持
|
||||||
|
EN_LOGIN_ATTRIBUTE, // Login属性 按位:1:支持Login属性查询
|
||||||
|
EN_RECORD_GENERAL, // 录像相关 按位:1,普通录像;2:报警录像;3:动态检测录像;4:本地存储;5:远程存储;6:冗余存储;7:本地紧急存储;8:支持区分主辅码流的远程存储
|
||||||
|
EN_JSON_CONFIG, // Json格式配置:按位:1支持Json格式, 2: 使用F6的NAS配置, 3: 使用F6的Raid配置, 4:使用F6的MotionDetect配置, 5:完整支持三代配置(V3),通过F6命令访问
|
||||||
|
EN_HIDE_FUNCTION, // 屏蔽功能:按位:1,屏蔽PTZ云台功能, 2: 屏蔽3G的保活时段功能
|
||||||
|
EN_DISK_DAMAGE, // 硬盘坏道信息支持能力: 按位:1,硬盘坏道信息查询支持能力
|
||||||
|
EN_PLAYBACK_SPEED_CTRL, // 支持回放网传速度控制:按位:1,支持回放加速
|
||||||
|
EN_HOLIDAYSCHEDULE, // 支持假期时间段配置:按位:1,支持假期时间段配置
|
||||||
|
EN_FETCH_MONEY_TIMEOUT, // ATM取钱超时
|
||||||
|
EN_BACKUP_VIDEO_FORMAT, // 备份支持的格式,按位:1:DAV, 2:ASF
|
||||||
|
EN_QUERY_DISK_TYPE, // 支持硬盘类型查询
|
||||||
|
EN_CONFIG_DISPLAY_OUTPUT, // 支持设备显示输出(VGA等)配置,按位: 1:画面分割轮巡配置
|
||||||
|
EN_SUBBITRATE_RECORD_CTRL, // 支持扩展码流录像控制设置, 按位:1-辅码流录像控制设置
|
||||||
|
EN_IPV6, // 支持IPV6设置, 按位:1-IPV6配置
|
||||||
|
EN_SNMP, // SNMP(简单网络管理协议)
|
||||||
|
EN_QUERY_URL, // 支持获取设备URL地址, 按位: 1-查询配置URL地址
|
||||||
|
EN_ISCSI, // ISCSI(Internet小型计算机系统接口配置)
|
||||||
|
EN_RAID, // 支持Raid功能
|
||||||
|
EN_HARDDISK_INFO, // 支持磁盘信息F5查询
|
||||||
|
EN_PICINPIC, // 支持画中画功能 按位:1,画中画设置; 2,画中画预览、录像存储、查询、下载;3,支持画中画编码配置,同时支持画中画通道查询
|
||||||
|
EN_PLAYBACK_SPEED_CTRL_SUPPORT, // 同 EN_PLAYBACK_SPEED_CTRL ,只为了兼容协议
|
||||||
|
EN_LF_XDEV, // 支持24、32、64路LF-X系列,标注这类设备特殊的编码能力计算方式
|
||||||
|
EN_DSP_ENCODE_CAP, // F5 DSP编码能力查询
|
||||||
|
EN_MULTICAST, // 组播能力查询
|
||||||
|
EM_NET_LIMIT, // 网络限制能力查询,按位,1-网络发送码流大小限
|
||||||
|
EM_COM422, // 串口422
|
||||||
|
EM_PROTOCAL_FRAMEWORK, // 是否支持三代协议框架(需要实现listMethod(),listService()),通过F6命令访问
|
||||||
|
EM_WRITE_DISK_OSD, // 刻录OSD叠加, 按位, 1-刻录OSD叠加配置
|
||||||
|
EM_DYNAMIC_MULTI_CONNECT, // 动态多连接, 按位, 1-请求视频数据应答
|
||||||
|
EM_CLOUDSERVICE, // 云服务,按位,1-支持私有云服务
|
||||||
|
EM_RECORD_INFO, // 录像信息上报, 按位, 1-录像信息主动上报, 2-支持录像帧数查询
|
||||||
|
EN_DYNAMIC_REG, // 主动注册能力,按位,1-支持动态主动注册
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
DWORD IsFucEnable[512]; // 功能列表能力集,下标对应上述的枚举值,按位表示子功能
|
||||||
|
} DH_DEV_ENABLE_INFO;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// 卡号查询能力结构体
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char IsCardQueryEnable;
|
||||||
|
char iRev[3];
|
||||||
|
} DH_CARD_QUERY_EN;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// wireless能力结构体
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char IsWirelessEnable;
|
||||||
|
char iRev[3];
|
||||||
|
} DH_WIRELESS_EN;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// 图象水印能力结构体
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char isSupportWM; // 1 支持;0 不支持
|
||||||
|
char supportWhat; // 0:文字水印;1:图片水印;2:同时支持文字水印和图片水印
|
||||||
|
char reserved[2];
|
||||||
|
} DH_WATERMAKE_EN;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// 多画面预览能力结构体
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nEnable; // 1 支持;0 不支持
|
||||||
|
DWORD dwMultiPlayMask; // 多画面预览掩码
|
||||||
|
char reserved[4]; // 保留
|
||||||
|
} DH_MULTIPLAY_EN;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// 无线报警能力结构体
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
BOOL bSupport; // 是否支持
|
||||||
|
int nAlarmInCount; // 输入个数
|
||||||
|
int nAlarmOutCount; // 输出个数
|
||||||
|
int nRemoteAddrCount; // 遥控器个数
|
||||||
|
BYTE reserved[32];
|
||||||
|
} DH_WIRELESS_ALARM_INFO;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// 网络硬盘分区能力结构体
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
BOOL bSupported; // 是否支持网络硬盘分区
|
||||||
|
int nSupportNum; // 支持分区的数目
|
||||||
|
BYTE bReserved[32]; // 保留字节
|
||||||
|
} DH_DISK_SUBAREA_EN;
|
||||||
|
|
||||||
|
// DSP能力查询,当DSP能力算法标识为2时使用。
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
BYTE bMainFrame[32]; // 以分辨率枚举值(CAPTURE_SIZE)为索引,主码流分辨率对应支持的最大帧率,如果不支持此分辨率,则值为0.
|
||||||
|
BYTE bExtraFrame_1[32]; // 辅码流1,使用同bMainFrame
|
||||||
|
BYTE bReserved[128]; // 预留给辅码流2和3.
|
||||||
|
} DH_DSP_CFG_ITEM;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nItemNum; // DH_DSP_CFG_ITEM的有效个数,等于通道数
|
||||||
|
DH_DSP_CFG_ITEM stuDspCfgItem[32]; // 主码流的信息
|
||||||
|
BYTE bReserved[128]; // 保留
|
||||||
|
} DH_DSP_CFG;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// 快速查询配置能力结构体
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char IsQuickQueryEnable; // 1是设备支持配置命令快速返回,请设置配置时间足够长以保证窄带下配置的正常读取。建议设置60S
|
||||||
|
char iRev[3];
|
||||||
|
} DH_QUICK_QUERY_CFG_EN;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nStreamType; // 0,无 1,SIP 2,RTSP
|
||||||
|
BYTE bReserved[16]; // 保留
|
||||||
|
} DH_STREAM_MEDIA_EN;
|
||||||
|
|
||||||
|
//智能球跟踪能力查询
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char IsIntelliTrackerEnable; // 大于0表示具有智能球跟踪能力
|
||||||
|
BYTE bReserved[3];
|
||||||
|
}DH_INTELLI_TRACKER_EN;
|
||||||
|
|
||||||
|
|
||||||
|
#endif // DHSYSABLE_H
|
||||||
|
|
17659
3rdparty/dahua/inc/dhconfigsdk.h
vendored
Normal file
17659
3rdparty/dahua/inc/dhconfigsdk.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
80681
3rdparty/dahua/inc/dhnetsdk.h
vendored
Normal file
80681
3rdparty/dahua/inc/dhnetsdk.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2727
3rdparty/dahua/inc/dhplay.h
vendored
Normal file
2727
3rdparty/dahua/inc/dhplay.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
3rdparty/dahua/lib/win64/dhconfigsdk.lib
vendored
Normal file
BIN
3rdparty/dahua/lib/win64/dhconfigsdk.lib
vendored
Normal file
Binary file not shown.
BIN
3rdparty/dahua/lib/win64/dhnetsdk.lib
vendored
Normal file
BIN
3rdparty/dahua/lib/win64/dhnetsdk.lib
vendored
Normal file
Binary file not shown.
BIN
3rdparty/dahua/lib/win64/dhplay.lib
vendored
Normal file
BIN
3rdparty/dahua/lib/win64/dhplay.lib
vendored
Normal file
Binary file not shown.
111
3rdparty/hikvision/inc/DataType.h
vendored
Normal file
111
3rdparty/hikvision/inc/DataType.h
vendored
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
#ifndef DATA_TYPE_H
|
||||||
|
#define DATA_TYPE_H
|
||||||
|
#define FRAME_HEAD_MAGIC 0x03211546
|
||||||
|
#define SYSTEM_SYNC_ID 2
|
||||||
|
|
||||||
|
#ifdef __LINUX__
|
||||||
|
typedef unsigned char UCHAR;
|
||||||
|
typedef unsigned char* PBYTE;
|
||||||
|
typedef char* LPTSTR;
|
||||||
|
typedef unsigned short USHORT;
|
||||||
|
typedef int HANDLE;
|
||||||
|
typedef unsigned long ULONG;
|
||||||
|
typedef unsigned long DWORD;
|
||||||
|
#endif //#ifdef __LINUX__
|
||||||
|
|
||||||
|
typedef struct tagFrameInfo{
|
||||||
|
ULONG SyncId; /* 00000000000000000000000000010b */
|
||||||
|
ULONG Magic;
|
||||||
|
USHORT FrameType; /* I frames , P frames or BBP frames Audio frames or dsp status etc */
|
||||||
|
ULONG Length; /*lenth include this header */
|
||||||
|
ULONG FrameNumber; /* serial number of this frame */
|
||||||
|
UCHAR Breakable; /* indicate if stream breakable, you could restart new file(with PktSysHeader) if true */
|
||||||
|
/*ULONG Ack;*/
|
||||||
|
ULONG PTS; /* system clock when this frames is processed */
|
||||||
|
}TMFRAME_HEADER, *PTMFRAME_HEADER;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
StandardNone = 0x80000000,
|
||||||
|
StandardNTSC = 0x00000001,
|
||||||
|
StandardPAL = 0x00000002,
|
||||||
|
StandardSECAM = 0x00000004,
|
||||||
|
} VideoStandard_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
PktError = 0,
|
||||||
|
PktIFrames = 0x0001,
|
||||||
|
PktPFrames = 0x0002,
|
||||||
|
PktBBPFrames = 0x0004,
|
||||||
|
PktAudioFrames = 0x0008,
|
||||||
|
PktMotionDetection = 0x00010,
|
||||||
|
PktDspStatus = 0x00020,
|
||||||
|
PktOrigImage = 0x00040,
|
||||||
|
PktSysHeader = 0x00080,
|
||||||
|
PktBPFrames = 0x00100,
|
||||||
|
PktSFrames = 0x00200,
|
||||||
|
PktSubIFrames = 0x00400,
|
||||||
|
PktSubPFrames = 0x00800,
|
||||||
|
PktSubBBPFrames = 0x01000,
|
||||||
|
PktSubSysHeader = 0x02000
|
||||||
|
}FrameType_t;
|
||||||
|
|
||||||
|
typedef struct tagVersion{
|
||||||
|
ULONG DspVersion, DspBuildNum;
|
||||||
|
ULONG DriverVersion, DriverBuildNum;
|
||||||
|
ULONG SDKVersion, SDKBuildNum;
|
||||||
|
}VERSION_INFO, *PVERSION_INFO;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
ENC_CIF_FORMAT = 0,
|
||||||
|
ENC_QCIF_FORMAT = 1,
|
||||||
|
ENC_2CIF_FORMAT = 2,
|
||||||
|
ENC_4CIF_FORMAT = 3,
|
||||||
|
ENC_QQCIF_FORMAT = 4,
|
||||||
|
ENC_CIFQCIF_FORMAT =5,
|
||||||
|
ENC_CIFQQCIF_FORMAT =6,
|
||||||
|
ENC_DCIF_FORMAT =7,
|
||||||
|
ENC_VGA_FORMAT=8
|
||||||
|
}PictureFormat_t;
|
||||||
|
|
||||||
|
typedef struct tagMotionData{
|
||||||
|
PictureFormat_t PicFormat;
|
||||||
|
ULONG HorizeBlocks;
|
||||||
|
ULONG VerticalBlocks;
|
||||||
|
ULONG BlockSize;
|
||||||
|
}MOTION_DATA_HEADER, *PMOTION_DATA_HEADER;
|
||||||
|
|
||||||
|
|
||||||
|
#define _OSD_BASE 0x9000 /*base address of special character*/
|
||||||
|
#define _OSD_YEAR4 (_OSD_BASE+0) /*show year time by length of 4 , for example: 2005*/
|
||||||
|
#define _OSD_YEAR2 (_OSD_BASE+1) /*show year time by length of 2, for example: 05 */
|
||||||
|
#define _OSD_MONTH3 (_OSD_BASE+2) /*show month time in English, for example: Jan*/
|
||||||
|
#define _OSD_MONTH2 (_OSD_BASE+3) /*show month time by two Arabic numerals, for example: 07*/
|
||||||
|
#define _OSD_DAY (_OSD_BASE+4) /*show day time by two Arabic numerals, for example: 31*/
|
||||||
|
#define _OSD_WEEK3 (_OSD_BASE+5) /*show week time in English: MON¡«SUN*/
|
||||||
|
#define _OSD_CWEEK1 (_OSD_BASE+6) /*show week time in Chinese GB code*/
|
||||||
|
#define _OSD_HOUR24 (_OSD_BASE+7) /*show 24 hours clock: 00¡«23 */
|
||||||
|
#define _OSD_HOUR12 (_OSD_BASE+8) /*show 12 hours clock: 00¡«12*/
|
||||||
|
#define _OSD_MINUTE (_OSD_BASE+9) /*show minute time by length of 2: 00¡«59*/
|
||||||
|
#define _OSD_SECOND (_OSD_BASE+10) /*show second time by length of 2: 00¡«59*/
|
||||||
|
#define _OSD_MILISECOND (_OSD_BASE+11) /*show millisecond time by length of 3: 000~999*/
|
||||||
|
#define _OSD_APM (_OSD_BASE+14) /*show a.m. or p.m. by length of 2 bit, AM or PM*/
|
||||||
|
|
||||||
|
//For new added APIs to set OSD: SetEncoderOsdDisplayMode, SetDecoderOsdDisplayMode and SetDisplayOsdDisplayMode in v6.0 SDK, we use new basic address of special character.
|
||||||
|
#define _OSD_BASE_EX 0x90000 /*base address of special character*/
|
||||||
|
#define _OSD_YEAR4_EX (_OSD_BASE_EX+0) /*the same as _OSD_YEAR4*/
|
||||||
|
#define _OSD_YEAR2_EX (_OSD_BASE_EX+1) /*the same as _OSD_YEAR2*/
|
||||||
|
#define _OSD_MONTH3_EX (_OSD_BASE_EX+2) /*the same as _OSD_MONTH3*/
|
||||||
|
#define _OSD_MONTH2_EX (_OSD_BASE_EX+3) /*the same as _OSD_MONTH2*/
|
||||||
|
#define _OSD_DAY_EX (_OSD_BASE_EX+4) /*the same as _OSD_DAY*/
|
||||||
|
#define _OSD_WEEK3_EX (_OSD_BASE_EX+5) /*the same as _OSD_WEEK3*/
|
||||||
|
#define _OSD_CWEEK1_EX (_OSD_BASE_EX+6) /*the same as _OSD_CWEEK1*/
|
||||||
|
#define _OSD_HOUR24_EX (_OSD_BASE_EX+7) /*the same as _OSD_HOUR24*/
|
||||||
|
#define _OSD_HOUR12_EX (_OSD_BASE_EX+8) /*the same as _OSD_HOUR12*/
|
||||||
|
#define _OSD_MINUTE_EX (_OSD_BASE_EX+9) /*the same as _OSD_MINUTE*/
|
||||||
|
#define _OSD_SECOND_EX (_OSD_BASE_EX+10) /*the same as _OSD_SECOND*/
|
||||||
|
#define _OSD_MILISECOND_EX (_OSD_BASE_EX+11) /*the same as _OSD_MILISECOND*/
|
||||||
|
#define _OSD_APM_EX (_OSD_BASE_EX+14) /*the same as _OSD_APM*/
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
451
3rdparty/hikvision/inc/DecodeCardSdk.h
vendored
Normal file
451
3rdparty/hikvision/inc/DecodeCardSdk.h
vendored
Normal file
@ -0,0 +1,451 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// DS-40xxHC/HF BOARD SYSTEM SDK //
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef DECODECARD_SDK_H
|
||||||
|
#define DECODECARD_SDK_H
|
||||||
|
|
||||||
|
#include "datatype.h"
|
||||||
|
|
||||||
|
#define DLLEXPORT_API extern "C" __declspec(dllexport)
|
||||||
|
#define ERR_WAIT_TIMEOUT 0xc0000001
|
||||||
|
#define ERR_INVALID_HANDLE 0xc0000002
|
||||||
|
#define ERR_INVALID_ARGUMENT 0xc0000003
|
||||||
|
#define ERR_DDRAW_CREATE_FAILED 0xc0000004
|
||||||
|
#define ERR_DDRAW_CAPS_FAULT 0xc0000005
|
||||||
|
#define ERR_SET_COOPERATIVELEVEL_FAILED 0xc0000006
|
||||||
|
#define ERR_PRIMARY_SURFACE_CREATE_FAILED 0xc0000007
|
||||||
|
#define ERR_GET_OVERLAY_ADDRESS_FAILED 0xc0000008
|
||||||
|
#define ERR_OVERLAY_SURFACE_CREATE_FAILED 0xc0000009
|
||||||
|
#define ERR_OVERLAY_UPDATE_FAILED 0xc000000a
|
||||||
|
#define ERR_TMMAN_FAILURE 0xc000000b
|
||||||
|
#define ERR_CHANNELMAGIC_MISMATCH 0xc000000c
|
||||||
|
#define ERR_CALLBACK_REGISTERED 0xc000000d
|
||||||
|
#define ERR_QUEUE_OVERFLOW 0xc000000e
|
||||||
|
#define ERR_STREAM_THREAD_FAILURE 0xc000000f
|
||||||
|
#define ERR_THREAD_STOP_ERROR 0xc0000010
|
||||||
|
#define ERR_NOT_SUPPORT 0xc0000011
|
||||||
|
#define ERR_OUTOF_MEMORY 0xc0000012
|
||||||
|
#define ERR_DSP_BUSY 0xc0000013
|
||||||
|
#define ERR_DATA_ERROR 0xc0000014
|
||||||
|
#define ERR_KERNEL 0xc0000016
|
||||||
|
#define ERR_OFFSCREEN_CREATE_FAILED 0xc0000017
|
||||||
|
#define ERR_MULTICLOCK_FAILURE 0xc0000018
|
||||||
|
#define ERR_INVALID_DEVICE 0xc0000019
|
||||||
|
#define ERR_INVALID_DRIVER 0xc000001a
|
||||||
|
//error code for MD card
|
||||||
|
#define HWERR_SUCCESS 0
|
||||||
|
#define HWERR_ALLOCATE_MEMORY 0xc1000001
|
||||||
|
#define HWERR_INVALID_HANDLE 0xc1000002
|
||||||
|
#define HWERR_DDRAW_CREATE_FAILED 0xc1000003
|
||||||
|
#define HWERR_DDRAW_CAPS_FAULT 0xc1000004
|
||||||
|
#define HWERR_SET_COOPERATIVELEVEL_FAILED 0xc1000005
|
||||||
|
#define HWERR_PRIMARY_SURFACE_CREATE_FAILED 0xc1000006
|
||||||
|
#define HWERR_OVERLAY_CREATE_FAILED 0xc1000007
|
||||||
|
#define HWERR_GET_OVERLAY_ADDRESS_FAILED 0xc1000008
|
||||||
|
#define HWERR_OVERLAY_UPDATE_FAILED 0xc1000009
|
||||||
|
#define HWERR_SURFACE_NULL 0xc100000a
|
||||||
|
#define HWERR_FILEHEADER_UNKNOWN 0xc100000b
|
||||||
|
#define HWERR_CREATE_FILE_FAILED 0xc100000c
|
||||||
|
#define HWERR_FILE_SIZE_ZERO 0xc100000d
|
||||||
|
#define HWERR_FILE_SIZE_INVALID 0xc100000d
|
||||||
|
#define HWERR_CREATE_OBJ_FAILED 0xc100000e
|
||||||
|
#define HWERR_CHANNELMAGIC_MISMATCH 0xc100000f
|
||||||
|
#define HWERR_PARA_OVER 0xc1000010
|
||||||
|
#define HWERR_ORDER 0xc1000011
|
||||||
|
#define HWERR_COMMAND 0xc1000012
|
||||||
|
#define HWERR_UNSUPPORTED 0xc1000013
|
||||||
|
#define HWERR_DSPOPEN 0xc1000014
|
||||||
|
#define HWERR_DSPLOAD 0xc1000015
|
||||||
|
#define HWERR_ALLOCATE_DSPMEMORY 0xc1000016
|
||||||
|
#define HWERR_DSPCHECHER 0xc1000017
|
||||||
|
#define HWERR_IMGFILE_UNKNOWN 0xc1000018
|
||||||
|
#define HWERR_INVALID_FILE 0xc1000019
|
||||||
|
//standart
|
||||||
|
#define HW_PAL 2
|
||||||
|
#define HW_NTSC 1
|
||||||
|
//jump direction
|
||||||
|
#define HW_JUMP_FORWARD 309
|
||||||
|
#define HW_JUMP_BACKWARD 310
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum tagTypeVideoFormat
|
||||||
|
{
|
||||||
|
vdfRGB8A_233 = 0x00000001,
|
||||||
|
vdfRGB8R_332 = 0x00000002,
|
||||||
|
vdfRGB15Alpha = 0x00000004,
|
||||||
|
vdfRGB16 = 0x00000008,
|
||||||
|
vdfRGB24 = 0x00000010,
|
||||||
|
vdfRGB24Alpha = 0x00000020,
|
||||||
|
|
||||||
|
vdfYUV420Planar = 0x00000040,
|
||||||
|
vdfYUV422Planar = 0x00000080,
|
||||||
|
vdfYUV411Planar = 0x00000100,
|
||||||
|
vdfYUV420Interspersed = 0x00000200,
|
||||||
|
vdfYUV422Interspersed = 0x00000400,
|
||||||
|
vdfYUV411Interspersed = 0x00000800,
|
||||||
|
vdfYUV422Sequence = 0x00001000, /* U0, Y0, V0, Y1: For VO overlay */
|
||||||
|
vdfYUV422SequenceAlpha = 0x00002000,
|
||||||
|
/* U0, Y0, V0, Y1: For VO overlay, with low bit for alpha blending */
|
||||||
|
vdfMono = 0x00004000, /* 8 bit monochrome */
|
||||||
|
|
||||||
|
vdfYUV444Planar = 0x00008000,
|
||||||
|
}TypeVideoFormat;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum _BitrateControlType_t
|
||||||
|
{
|
||||||
|
brCBR = 0,
|
||||||
|
brVBR = 1,
|
||||||
|
}BitrateControlType_t;
|
||||||
|
|
||||||
|
typedef enum _BOARD_TYPE_DS
|
||||||
|
{
|
||||||
|
DS400XM =0,
|
||||||
|
DS400XH =1,
|
||||||
|
DS4004HC =2,
|
||||||
|
DS4008HC =3,
|
||||||
|
DS4016HC =4,
|
||||||
|
DS4001HF =5,
|
||||||
|
DS4004HF =6,
|
||||||
|
DS4002MD =7,
|
||||||
|
DS4004MD =8, //4004MD
|
||||||
|
DS4016HCS =9, //4016HCS
|
||||||
|
DS4002HT =10, //4002HT
|
||||||
|
DS4004HT =11, //4004HT
|
||||||
|
DS4008HT =12, //4008HT
|
||||||
|
DS4004HC_PLUS =13, //4004HC+
|
||||||
|
DS4008HC_PLUS =14, //4008HC+
|
||||||
|
DS4016HC_PLUS =15, //4016HC+
|
||||||
|
DS4008HF =16, //4008HF
|
||||||
|
DS4008MD =17, //4008MD
|
||||||
|
DS4008HS =18, //4008HS
|
||||||
|
DS4016HS =19, //4016HS
|
||||||
|
INVALID_BOARD_TYPE =0xffffffff,
|
||||||
|
}BOARD_TYPE_DS;
|
||||||
|
|
||||||
|
#define STREAM_TYPE_VIDEO 1
|
||||||
|
#define STREAM_TYPE_AUDIO 2
|
||||||
|
#define STREAM_TYPE_AVSYNC 3
|
||||||
|
#define DRAWFUN(x) void (CALLBACK* x)(long nPort,HDC hDc,LONG nUser)
|
||||||
|
|
||||||
|
|
||||||
|
typedef void (*LOGRECORD_CALLBACK)(char *str, void *context);
|
||||||
|
typedef int (*STREAM_READ_CALLBACK)(ULONG channelNumber, void *context);
|
||||||
|
typedef int (*STREAM_DIRECT_READ_CALLBACK)(ULONG channelNumber,void *DataBuf,DWORD Length,int FrameType,void *context);
|
||||||
|
|
||||||
|
typedef struct tagChannelCapability{
|
||||||
|
UCHAR bAudioPreview;
|
||||||
|
UCHAR bAlarmIO;
|
||||||
|
UCHAR bWatchDog;
|
||||||
|
}CHANNEL_CAPABILITY, *PCHANNEL_CAPABILITY;
|
||||||
|
|
||||||
|
typedef struct tagFramsStatistics{
|
||||||
|
ULONG VideoFrames;
|
||||||
|
ULONG AudioFrames;
|
||||||
|
ULONG FramesLost;
|
||||||
|
ULONG QueueOverflow;
|
||||||
|
ULONG CurBps;
|
||||||
|
}FRAMES_STATISTICS, *PFRAMES_STATISTICS;
|
||||||
|
|
||||||
|
DLLEXPORT_API int __stdcall InitDSPs();
|
||||||
|
DLLEXPORT_API int __stdcall DeInitDSPs();
|
||||||
|
DLLEXPORT_API HANDLE __stdcall ChannelOpen(int ChannelNum);
|
||||||
|
DLLEXPORT_API int __stdcall ChannelClose(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall GetTotalChannels();
|
||||||
|
DLLEXPORT_API int __stdcall GetTotalDSPs();
|
||||||
|
DLLEXPORT_API int __stdcall StartVideoPreview(HANDLE hChannelHandle,HWND WndHandle, RECT *rect, BOOLEAN bOverlay, int VideoFormat, int FrameRate);
|
||||||
|
DLLEXPORT_API int __stdcall StopVideoPreview(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall SetVideoPara(HANDLE hChannelHandle, int Brightness, int Contrast, int Saturation, int Hue);
|
||||||
|
DLLEXPORT_API int __stdcall GetVideoPara(HANDLE hChannelHandle, VideoStandard_t *VideoStandard, int *Brightness, int *Contrast, int *Saturation, int *Hue);
|
||||||
|
DLLEXPORT_API int __stdcall GetVideoSignal(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall GetSDKVersion(PVERSION_INFO VersionInfo);
|
||||||
|
DLLEXPORT_API int __stdcall GetCapability(HANDLE hChannelHandle, CHANNEL_CAPABILITY *Capability);
|
||||||
|
DLLEXPORT_API int __stdcall GetLastErrorNum(HANDLE hChannelHandle, ULONG *DspError, ULONG *SdkError);
|
||||||
|
DLLEXPORT_API int __stdcall SetStreamType(HANDLE hChannelHandle, USHORT Type);
|
||||||
|
DLLEXPORT_API int __stdcall GetStreamType(HANDLE hChannelHandle, USHORT *StreamType);
|
||||||
|
DLLEXPORT_API int __stdcall GetFramesStatistics(HANDLE hChannelHandle, PFRAMES_STATISTICS framesStatistics);
|
||||||
|
DLLEXPORT_API int __stdcall StartMotionDetection(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall GetBoardInfo(HANDLE hChannelHandle, ULONG *BoardType, UCHAR *SerialNo);
|
||||||
|
DLLEXPORT_API int __stdcall StopMotionDetection(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall GetOriginalImage(HANDLE hChannelHandle, UCHAR *ImageBuf, ULONG *Size);
|
||||||
|
DLLEXPORT_API int __stdcall RegisterLogRecordCallback(LOGRECORD_CALLBACK LogRecordFunc, void *Context);
|
||||||
|
DLLEXPORT_API int __stdcall SetAudioPreview(HANDLE hChannelHandle, BOOL bEnable);
|
||||||
|
DLLEXPORT_API int __stdcall ReadStreamData(HANDLE hChannelHandle, void *DataBuf, DWORD *Length, int *FrameType);
|
||||||
|
DLLEXPORT_API int __stdcall RegisterMessageNotifyHandle(HWND hWnd, UINT MessageId);
|
||||||
|
DLLEXPORT_API int __stdcall StartVideoCapture(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall StopVideoCapture(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall SetIBPMode(HANDLE hChannelHandle, int KeyFrameIntervals, int BFrames, int PFrames, int FrameRate);
|
||||||
|
DLLEXPORT_API int __stdcall SetDefaultQuant(HANDLE hChannelHandle, int IQuantVal, int PQuantVal, int BQuantVal);
|
||||||
|
DLLEXPORT_API int __stdcall SetOsd(HANDLE hChannelHandle, BOOL Enable);
|
||||||
|
|
||||||
|
DLLEXPORT_API int __stdcall SetLogo(HANDLE hChannelHandle, int x, int y, int w, int h, unsigned char *yuv);
|
||||||
|
DLLEXPORT_API int __stdcall StopLogo(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall SetupMotionDetection(HANDLE hChannelHandle, RECT *RectList, int iAreas);
|
||||||
|
DLLEXPORT_API int __stdcall MotionAnalyzer(HANDLE hChannelHandle, char *MotionData, int iThreshold, int *iResult);
|
||||||
|
DLLEXPORT_API int __stdcall LoadYUVFromBmpFile(char *FileName, unsigned char *yuv, int BufLen, int *Width, int *Height);
|
||||||
|
DLLEXPORT_API int __stdcall SaveYUVToBmpFile(char *FileName, unsigned char *yuv, int Width, int Height);
|
||||||
|
DLLEXPORT_API int __stdcall CaptureIFrame(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall RegisterStreamReadCallback(STREAM_READ_CALLBACK StreamReadCallback, void *Context);
|
||||||
|
DLLEXPORT_API int __stdcall AdjustMotionDetectPrecision(HANDLE hChannelHandle,
|
||||||
|
int iGrade, int iFastMotionDetectFps,
|
||||||
|
int iSlowMotionDetectFps);
|
||||||
|
DLLEXPORT_API int __stdcall SetupBitrateControl(HANDLE hChannelHandle, ULONG MaxBps);
|
||||||
|
DLLEXPORT_API int __stdcall SetOverlayColorKey(COLORREF DestColorKey);
|
||||||
|
DLLEXPORT_API int __stdcall SetOsdDisplayMode(HANDLE hChannelHandle, int Brightness, BOOL Translucent, int parameter, USHORT *Format1, USHORT *Format2);
|
||||||
|
DLLEXPORT_API int __stdcall SetLogoDisplayMode(HANDLE hChannelHandle, COLORREF ColorKey, BOOL Translucent, int TwinkleInterval);
|
||||||
|
DLLEXPORT_API int __stdcall SetEncoderPictureFormat(HANDLE hChannelHandle, PictureFormat_t PictureFormat);
|
||||||
|
DLLEXPORT_API int __stdcall SetVideoStandard(HANDLE hChannelHandle, VideoStandard_t VideoStandard);
|
||||||
|
DLLEXPORT_API int __stdcall RestoreOverlay();
|
||||||
|
DLLEXPORT_API int __stdcall ResetDSP(int DspNumber);
|
||||||
|
DLLEXPORT_API int __stdcall GetSoundLevel(HANDLE hChannelHandle);
|
||||||
|
|
||||||
|
|
||||||
|
DLLEXPORT_API int __stdcall SetBitrateControlMode(HANDLE hChannelHandle, BitrateControlType_t brc);
|
||||||
|
DLLEXPORT_API int __stdcall SetupNotifyThreshold(HANDLE hChannelHandle, int iFramesThreshold);
|
||||||
|
|
||||||
|
DLLEXPORT_API int __stdcall SetupSubChannel(HANDLE hChannelHandle, int iSubChannel);
|
||||||
|
DLLEXPORT_API int __stdcall GetSubChannelStreamType(void *DataBuf, int FrameType);
|
||||||
|
//add for HC/HF
|
||||||
|
DLLEXPORT_API int __stdcall RegisterStreamDirectReadCallback(STREAM_DIRECT_READ_CALLBACK StreamDirectReadCallback,void *Context);
|
||||||
|
DLLEXPORT_API int __stdcall RegisterDrawFun(DWORD nport, DRAWFUN(DrawFun),LONG nUser);
|
||||||
|
DLLEXPORT_API int __stdcall SetupMask(HANDLE hChannelHandle, RECT *rectList, int iAreas);
|
||||||
|
DLLEXPORT_API int __stdcall StopMask(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall SetSubEncoderPictureFormat(HANDLE hChannelHandle, PictureFormat_t PictureFormat);
|
||||||
|
DLLEXPORT_API int __stdcall StartSubVideoCapture(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall StopSubVideoCapture(HANDLE hChannelHandle);
|
||||||
|
DLLEXPORT_API int __stdcall SetupDateTime(HANDLE hChannelHandle, SYSTEMTIME *now);
|
||||||
|
/*
|
||||||
|
以下为1.7版本新增的功能。
|
||||||
|
以后可能会根据用户的反馈进行修改和完善。
|
||||||
|
*/
|
||||||
|
//原始图像流设置
|
||||||
|
typedef void (*IMAGE_STREAM_CALLBACK)(UINT channelNumber,void *context );
|
||||||
|
DLLEXPORT_API int __stdcall SetImageStream(HANDLE hChannel,BOOL bStart,UINT fps,UINT width,UINT height,unsigned char *imageBuffer);
|
||||||
|
DLLEXPORT_API int __stdcall RegisterImageStreamCallback(IMAGE_STREAM_CALLBACK,void *context);
|
||||||
|
/*
|
||||||
|
设置视频输入位置:
|
||||||
|
(x,y)为系统所处理图像的左上角在摄像机输入的原始图像中的坐标。
|
||||||
|
x必须为2的整数倍。
|
||||||
|
(x,y)坐标的参数范围和摄像机的型号有关,如果指定的值和摄像机的输入不匹配,
|
||||||
|
可能会导致图像静止或水平、垂直方向滚动。
|
||||||
|
*/
|
||||||
|
DLLEXPORT_API int __stdcall SetInputVideoPosition(HANDLE hChannel,UINT x,UINT y);
|
||||||
|
DLLEXPORT_API int __stdcall StopRegisterDrawFun(DWORD nport);
|
||||||
|
|
||||||
|
/*
|
||||||
|
3.0
|
||||||
|
*/
|
||||||
|
#define SERIAL_NUMBER_LENGTH 12 //板卡序列号长度
|
||||||
|
typedef struct tagDS_BOARD_DETAIL
|
||||||
|
{
|
||||||
|
BOARD_TYPE_DS type; //板卡类型
|
||||||
|
BYTE sn[16]; //序列号
|
||||||
|
UINT dspCount; //板卡包含的DSP个数
|
||||||
|
UINT firstDspIndex; //板卡上第一个DSP的索引
|
||||||
|
UINT encodeChannelCount; //板卡包含的编码通道个数
|
||||||
|
UINT firstEncodeChannelIndex; //板卡上第一个编码通道的索引
|
||||||
|
UINT decodeChannelCount; //板卡包含的解码通道个数
|
||||||
|
UINT firstDecodeChannelIndex; //板卡上第一个解码通道的索引
|
||||||
|
UINT displayChannelCount; //板卡包含的视频输出通道个数
|
||||||
|
UINT firstDisplayChannelIndex; //板卡上第一个视频输出通道的索引
|
||||||
|
UINT reserved1;
|
||||||
|
UINT reserved2;
|
||||||
|
UINT reserved3;
|
||||||
|
UINT reserved4;
|
||||||
|
}DS_BOARD_DETAIL;
|
||||||
|
typedef struct tagDSP_DETAIL
|
||||||
|
{
|
||||||
|
UINT encodeChannelCount; //板卡包含的编码通道个数
|
||||||
|
UINT firstEncodeChannelIndex; //板卡上第一个编码通道的索引
|
||||||
|
UINT decodeChannelCount; //板卡包含的解码通道个数
|
||||||
|
UINT firstDecodeChannelIndex; //板卡上第一个解码通道的索引
|
||||||
|
UINT displayChannelCount; //板卡包含的视频输出通道个数
|
||||||
|
UINT firstDisplayChannelIndex; //板卡上第一个视频输出通道的索引
|
||||||
|
UINT reserved1;
|
||||||
|
UINT reserved2;
|
||||||
|
UINT reserved3;
|
||||||
|
UINT reserved4;
|
||||||
|
}DSP_DETAIL;
|
||||||
|
DLLEXPORT_API unsigned int __stdcall GetBoardCount();
|
||||||
|
DLLEXPORT_API int __stdcall GetBoardDetail(UINT boardNum,DS_BOARD_DETAIL *pBoardDetail);
|
||||||
|
DLLEXPORT_API unsigned int __stdcall GetDspCount();
|
||||||
|
DLLEXPORT_API int __stdcall GetDspDetail(UINT dspNum,DSP_DETAIL *pDspDetail);
|
||||||
|
DLLEXPORT_API unsigned int __stdcall GetEncodeChannelCount();
|
||||||
|
DLLEXPORT_API unsigned int __stdcall GetDecodeChannelCount();
|
||||||
|
DLLEXPORT_API unsigned int __stdcall GetDisplayChannelCount();
|
||||||
|
DLLEXPORT_API int __stdcall SetDefaultVideoStandard(VideoStandard_t VideoStandard);
|
||||||
|
DLLEXPORT_API int __stdcall SetVideoDetectPrecision(HANDLE hChannel,unsigned int value);
|
||||||
|
DLLEXPORT_API int __stdcall SetSubStreamType(HANDLE hChannelHandle, USHORT Type);
|
||||||
|
DLLEXPORT_API int __stdcall GetSubStreamType(HANDLE hChannelHandle, USHORT *StreamType);
|
||||||
|
|
||||||
|
#define MAX_DISPLAY_REGION 16
|
||||||
|
typedef struct tagREGION_PARAM
|
||||||
|
{
|
||||||
|
UINT left;
|
||||||
|
UINT top;
|
||||||
|
UINT width;
|
||||||
|
UINT height;
|
||||||
|
COLORREF color;
|
||||||
|
UINT param;
|
||||||
|
}REGION_PARAM;
|
||||||
|
DLLEXPORT_API int __stdcall SetDisplayStandard(UINT nDisplayChannel,VideoStandard_t VideoStandard);
|
||||||
|
DLLEXPORT_API int __stdcall SetDisplayRegion(UINT nDisplayChannel,UINT nRegionCount,REGION_PARAM *pParam,UINT nReserved);
|
||||||
|
DLLEXPORT_API int __stdcall ClearDisplayRegion(UINT nDisplayChannel,UINT nRegionFlag);
|
||||||
|
DLLEXPORT_API int __stdcall SetDisplayRegionPosition(UINT nDisplayChannel,UINT nRegion,UINT nLeft,UINT nTop);
|
||||||
|
DLLEXPORT_API int __stdcall FillDisplayRegion(UINT nDisplayChannel,UINT nRegion,unsigned char *pImage);
|
||||||
|
DLLEXPORT_API int __stdcall SetEncoderVideoExtOutput(UINT nEncodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved);
|
||||||
|
DLLEXPORT_API int __stdcall SetDecoderVideoExtOutput(UINT nDecodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved);
|
||||||
|
DLLEXPORT_API int __stdcall SetDecoderVideoOutput(UINT nDecodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved);
|
||||||
|
DLLEXPORT_API int __stdcall SetDecoderAudioOutput(UINT nDecodeChannel,BOOL bOpen,UINT nOutputChannel);
|
||||||
|
//3.1
|
||||||
|
DLLEXPORT_API int __stdcall SetDeInterlace(HANDLE hChannelHandle,UINT mode,UINT level);
|
||||||
|
DLLEXPORT_API int __stdcall SetPreviewOverlayMode(BOOL bTrue);
|
||||||
|
|
||||||
|
//DECODE functions for DS4002MD
|
||||||
|
#if defined( _WINDLL)
|
||||||
|
#define PLAYER_API extern "C"__declspec(dllexport)
|
||||||
|
#else
|
||||||
|
#define PLAYER_API extern "C" __declspec(dllimport)
|
||||||
|
#endif
|
||||||
|
typedef struct tagDISPLAY_PARA
|
||||||
|
{
|
||||||
|
long bToScreen;
|
||||||
|
long bToVideoOut;
|
||||||
|
long nLeft;
|
||||||
|
long nTop;
|
||||||
|
long nWidth;
|
||||||
|
long nHeight;
|
||||||
|
long nReserved;
|
||||||
|
}DISPLAY_PARA,*PDISPLAY_PARA;
|
||||||
|
//Version info
|
||||||
|
typedef struct tagVERSION{
|
||||||
|
ULONG DspVersion, DspBuildNum;
|
||||||
|
ULONG DriverVersion, DriverBuildNum;
|
||||||
|
ULONG SDKVersion, SDKBuildNum;
|
||||||
|
}HW_VERSION, *PHW_VERSION;
|
||||||
|
|
||||||
|
//init part
|
||||||
|
PLAYER_API int __stdcall HW_InitDirectDraw(HWND hParent,COLORREF colorKey);
|
||||||
|
PLAYER_API int __stdcall HW_ReleaseDirectDraw();
|
||||||
|
PLAYER_API int __stdcall HW_InitDecDevice(long *pDeviceTotal);
|
||||||
|
PLAYER_API int __stdcall HW_ReleaseDecDevice();
|
||||||
|
PLAYER_API int __stdcall HW_ChannelOpen(long nChannelNum,HANDLE* phChannel);
|
||||||
|
PLAYER_API int __stdcall HW_ChannelClose(HANDLE hChannel);
|
||||||
|
//open part
|
||||||
|
|
||||||
|
PLAYER_API int __stdcall HW_OpenStream(HANDLE hChannel,PBYTE pFileHeadBuf,DWORD nSize);
|
||||||
|
DLLEXPORT_API int __stdcall HW_ResetStream(HANDLE hChannel);
|
||||||
|
PLAYER_API int __stdcall HW_CloseStream(HANDLE hChannel);
|
||||||
|
PLAYER_API int __stdcall HW_InputData(HANDLE hChannel,PBYTE pBuf,DWORD nSize);
|
||||||
|
PLAYER_API int __stdcall HW_OpenFile(HANDLE hChannel,LPTSTR sFileName);
|
||||||
|
PLAYER_API int __stdcall HW_CloseFile(HANDLE hChannel);
|
||||||
|
|
||||||
|
//play part
|
||||||
|
PLAYER_API int __stdcall HW_SetDisplayPara(HANDLE hChannel,DISPLAY_PARA *pPara);
|
||||||
|
PLAYER_API int __stdcall HW_Play(HANDLE hChannel);
|
||||||
|
PLAYER_API int __stdcall HW_Stop(HANDLE hChannel);
|
||||||
|
PLAYER_API int __stdcall HW_Pause(HANDLE hChannel,ULONG bPause);
|
||||||
|
|
||||||
|
//sound part
|
||||||
|
PLAYER_API int __stdcall HW_PlaySound(HANDLE hChannel);
|
||||||
|
PLAYER_API int __stdcall HW_StopSound(HANDLE hChannel);
|
||||||
|
PLAYER_API int __stdcall HW_SetVolume(HANDLE hChannel,ULONG nVolume);
|
||||||
|
//overlay part
|
||||||
|
PLAYER_API int __stdcall HW_RefreshSurface();
|
||||||
|
PLAYER_API int __stdcall HW_RestoreSurface();
|
||||||
|
PLAYER_API int __stdcall HW_ClearSurface();
|
||||||
|
PLAYER_API int __stdcall HW_ZoomOverlay(RECT* pSrcClientRect, RECT* pDecScreenRect);
|
||||||
|
//cut file
|
||||||
|
PLAYER_API int __stdcall HW_StartCapFile(HANDLE hChannel,LPTSTR sFileName);
|
||||||
|
PLAYER_API int __stdcall HW_StopCapFile(HANDLE hChannel);
|
||||||
|
//capture picture
|
||||||
|
PLAYER_API int __stdcall HW_GetYV12Image(HANDLE hChannel, PBYTE pBuffer, ULONG nSize);
|
||||||
|
PLAYER_API int __stdcall HW_GetPictureSize(HANDLE hChannel,ULONG* pWidth, ULONG* pHeight);
|
||||||
|
PLAYER_API int __stdcall HW_ConvertToBmpFile(BYTE * pBuf,ULONG nSize,ULONG nWidth,ULONG nHeight,char *sFileName,ULONG nReserved);
|
||||||
|
//setting and getting part
|
||||||
|
PLAYER_API int __stdcall HW_Jump(HANDLE hChannel,ULONG nDirection);
|
||||||
|
PLAYER_API int __stdcall HW_SetJumpInterval(HANDLE hChannel,ULONG nSecond);
|
||||||
|
PLAYER_API int __stdcall HW_GetSpeed(HANDLE hChannel,long *pSpeed);
|
||||||
|
PLAYER_API int __stdcall HW_SetSpeed(HANDLE hChannel,long nSpeed);
|
||||||
|
PLAYER_API int __stdcall HW_SetPlayPos(HANDLE hChannel,ULONG nPos);
|
||||||
|
PLAYER_API int __stdcall HW_GetPlayPos(HANDLE hChannel,ULONG* pPos);
|
||||||
|
PLAYER_API int __stdcall HW_GetVersion(PHW_VERSION pVersion);
|
||||||
|
PLAYER_API int __stdcall HW_GetCurrentFrameRate(HANDLE hChannel,ULONG* pFrameRate);
|
||||||
|
PLAYER_API int __stdcall HW_GetCurrentFrameNum(HANDLE hChannel,ULONG* pFrameNum);
|
||||||
|
PLAYER_API int __stdcall HW_GetFileTotalFrames(HANDLE hChannel,ULONG* pTotalFrames);
|
||||||
|
PLAYER_API int __stdcall HW_GetFileTime(HANDLE hChannel, ULONG* pFileTime);
|
||||||
|
PLAYER_API int __stdcall HW_GetCurrentFrameTime(HANDLE hChannel,ULONG* pFrameTime);
|
||||||
|
PLAYER_API int __stdcall HW_GetPlayedFrames(HANDLE hChannel,ULONG *pDecVFrames);
|
||||||
|
PLAYER_API int __stdcall HW_GetDeviceSerialNo(HANDLE hChannel,ULONG *pDeviceSerialNo);
|
||||||
|
PLAYER_API int __stdcall HW_SetFileEndMsg(HANDLE hChannel,HWND hWnd,UINT nMsg);
|
||||||
|
PLAYER_API int __stdcall HW_SetStreamOpenMode(HANDLE hChannel,ULONG nMode);
|
||||||
|
PLAYER_API int __stdcall HW_GetStreamOpenMode(HANDLE hChannel,ULONG *pMode);
|
||||||
|
PLAYER_API int __stdcall HW_SetVideoOutStandard(HANDLE hChannel,ULONG nStandard);
|
||||||
|
PLAYER_API int __stdcall HW_SetDspDeadlockMsg(HWND hWnd,UINT nMsg);
|
||||||
|
PLAYER_API int __stdcall HW_GetChannelNum(long nDspNum,long *pChannelNum,ULONG nNumsToGet,ULONG * pNumsGotten);
|
||||||
|
PLAYER_API int __stdcall HW_ResetDsp(long nDspNum);
|
||||||
|
PLAYER_API int __stdcall HW_SetAudioPreview(HANDLE hChannel, BOOL bEnable);
|
||||||
|
//////////////////////////////////////////////
|
||||||
|
|
||||||
|
PLAYER_API int __stdcall HW_OpenStreamEx(HANDLE hChannel,PBYTE pFileHeadBuf,DWORD nSize);
|
||||||
|
PLAYER_API int __stdcall HW_CloseStreamEx(HANDLE hChannel);
|
||||||
|
PLAYER_API int __stdcall HW_InputVideoData(HANDLE hChannel,PBYTE pBuf,DWORD nSize);
|
||||||
|
PLAYER_API int __stdcall HW_InputAudioData(HANDLE hChannel,PBYTE pBuf,DWORD nSize);
|
||||||
|
|
||||||
|
//4.0
|
||||||
|
PLAYER_API int __stdcall SetOsdDisplayModeEx(HANDLE hChannelHandle,int color,BOOL Translucent,int param,int nLineCount,USHORT **Format);
|
||||||
|
typedef void (*MOTION_DETECTION_CALLBACK)(ULONG channelNumber,BOOL bMotionDetected,void *context);
|
||||||
|
PLAYER_API int __stdcall SetupMotionDetectionEx(HANDLE hChannelHandle,int iGrade,int iFastMotionDetectFps,
|
||||||
|
int iSlowMotionDetectFps,UINT delay,RECT *RectList, int iAreas,
|
||||||
|
MOTION_DETECTION_CALLBACK MotionDetectionCallback,int reserved);
|
||||||
|
PLAYER_API int __stdcall GetJpegImage(HANDLE hChannelHandle,UCHAR *ImageBuf,ULONG *Size,UINT nQuality);
|
||||||
|
//WatchDog
|
||||||
|
PLAYER_API int __stdcall SetWatchDog(UINT boardNumber,BOOL bEnable);
|
||||||
|
//4.1
|
||||||
|
typedef void (*FILE_REF_DONE_CALLBACK)(UINT nChannel,UINT nSize);
|
||||||
|
PLAYER_API int __stdcall HW_SetFileRef(HANDLE hChannel,BOOL bEnable,FILE_REF_DONE_CALLBACK FileRefDoneCallback);
|
||||||
|
PLAYER_API int __stdcall HW_LocateByAbsoluteTime(HANDLE hChannel,SYSTEMTIME time);
|
||||||
|
PLAYER_API int __stdcall HW_LocateByFrameNumber(HANDLE hChannel,UINT frmNum);
|
||||||
|
PLAYER_API int __stdcall HW_GetCurrentAbsoluteTime(HANDLE hChannel,SYSTEMTIME *pTime);
|
||||||
|
PLAYER_API int __stdcall HW_GetFileAbsoluteTime(HANDLE hChannel,SYSTEMTIME *pStartTime,SYSTEMTIME *pEndTime);
|
||||||
|
//4.2
|
||||||
|
DLLEXPORT_API int __stdcall HW_ImportFileRef(HANDLE hChannel,char *pBuffer,UINT nSize);
|
||||||
|
DLLEXPORT_API int __stdcall HW_ExportFileRef(HANDLE hChannel,char *pBuffer,UINT nSize);
|
||||||
|
DLLEXPORT_API int __stdcall SetDisplayVideoCapture(UINT nDisplayChannel,BOOL bStart,UINT fps,UINT width,UINT height,unsigned char *imageBuffer);
|
||||||
|
DLLEXPORT_API int __stdcall RegisterDisplayVideoCaptureCallback(IMAGE_STREAM_CALLBACK DisplayVideoCaptureCallback,void *context);
|
||||||
|
DLLEXPORT_API int __stdcall SetDisplayVideoBrightness(UINT chan,int Brightness);
|
||||||
|
DLLEXPORT_API int __stdcall SetChannelStreamCRC(HANDLE hChannel,BOOL bEnable);
|
||||||
|
DLLEXPORT_API int __stdcall SetSubChannelStreamCRC(HANDLE hChannel,BOOL bEnable);
|
||||||
|
DLLEXPORT_API int __stdcall HW_SetDecoderPostProcess(HANDLE hChannel,UINT param);
|
||||||
|
//
|
||||||
|
typedef void (*DECODER_VIDEO_CAPTURE_CALLBACK)(UINT nChannelNumber,void *DataBuf,UINT width,UINT height,UINT nFrameNum,UINT nFrameTime,SYSTEMTIME *pFrameAbsoluteTime,void *context);
|
||||||
|
DLLEXPORT_API int __stdcall RegisterDecoderVideoCaptureCallback(DECODER_VIDEO_CAPTURE_CALLBACK DecoderVideoCaptureCallback,void *context);
|
||||||
|
DLLEXPORT_API int __stdcall HW_SetDecoderVideoCapture(HANDLE hChannel,BOOL bStart,UINT param);
|
||||||
|
DLLEXPORT_API int __stdcall HW_InputDataByFrame(HANDLE hChannel,PBYTE pBuf,DWORD nSize);
|
||||||
|
/*
|
||||||
|
人脸抓拍接口:仅供测试、评估,以后可能会做修改。
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
short x,y,width,height;
|
||||||
|
}FACE_AREA_DEMO;
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
FACE_AREA_DEMO faceArea;
|
||||||
|
FACE_AREA_DEMO leftEyeArea;
|
||||||
|
FACE_AREA_DEMO rightEyeArea;
|
||||||
|
FACE_AREA_DEMO leftPupilArea;
|
||||||
|
FACE_AREA_DEMO rightPupilArea;
|
||||||
|
FACE_AREA_DEMO noseArea;
|
||||||
|
FACE_AREA_DEMO mouthArea;
|
||||||
|
}FACE_INFO_DEMO;
|
||||||
|
typedef void (*FACE_DETECTION_DEMO_CALLBACK)(UINT nChannel,UINT nFaceCount,FACE_INFO_DEMO *pFaceInfo,
|
||||||
|
char *pData,UINT nDataSize,UINT nImageWidth,UINT nImageHeight);
|
||||||
|
|
||||||
|
DLLEXPORT_API int __stdcall SetFaceDetectionDemo(HANDLE hChannelHandle,BOOL bEnable,
|
||||||
|
UINT nFrameInterval,FACE_DETECTION_DEMO_CALLBACK pFunc,
|
||||||
|
BOOL bCompress,UINT nCompressQuality,BOOL bLocateEyePos);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
52612
3rdparty/hikvision/inc/HCNetSDK.h
vendored
Normal file
52612
3rdparty/hikvision/inc/HCNetSDK.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
760
3rdparty/hikvision/inc/plaympeg4.h
vendored
Normal file
760
3rdparty/hikvision/inc/plaympeg4.h
vendored
Normal file
@ -0,0 +1,760 @@
|
|||||||
|
#ifndef _PLAYM4_H_
|
||||||
|
#define _PLAYM4_H_
|
||||||
|
|
||||||
|
#if defined( _WINDLL)
|
||||||
|
#define PLAYM4_API extern "C" __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
#define PLAYM4_API extern "C" __declspec(dllimport)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//Max channel numbers
|
||||||
|
#define PLAYM4_MAX_SUPPORTS 500
|
||||||
|
//Wave coef range;
|
||||||
|
#define MIN_WAVE_COEF -100
|
||||||
|
#define MAX_WAVE_COEF 100
|
||||||
|
|
||||||
|
//Timer type
|
||||||
|
#define TIMER_1 1 //Only 16 timers for every process.Default TIMER;
|
||||||
|
#define TIMER_2 2 //Not limit;But the precision less than TIMER_1;
|
||||||
|
|
||||||
|
//BUFFER AND DATA TYPE
|
||||||
|
#define BUF_VIDEO_SRC (1) //mixed input,total src buffer size;splited input,video src buffer size
|
||||||
|
#define BUF_AUDIO_SRC (2) //mixed input,not defined;splited input,audio src buffer size
|
||||||
|
#define BUF_VIDEO_RENDER (3) //video render node count
|
||||||
|
#define BUF_AUDIO_RENDER (4) //audio render node count
|
||||||
|
#define BUF_VIDEO_DECODED (5) //video decoded node count to render
|
||||||
|
#define BUF_AUDIO_DECODED (6) //audio decoded node count to render
|
||||||
|
#define BUF_DISPLAY_NODE (7) //display node
|
||||||
|
|
||||||
|
//Error code
|
||||||
|
#define PLAYM4_NOERROR 0 //no error
|
||||||
|
#define PLAYM4_PARA_OVER 1 //input parameter is invalid;
|
||||||
|
#define PLAYM4_ORDER_ERROR 2 //The order of the function to be called is error.
|
||||||
|
#define PLAYM4_TIMER_ERROR 3 //Create multimedia clock failed;
|
||||||
|
#define PLAYM4_DEC_VIDEO_ERROR 4 //Decode video data failed.
|
||||||
|
#define PLAYM4_DEC_AUDIO_ERROR 5 //Decode audio data failed.
|
||||||
|
#define PLAYM4_ALLOC_MEMORY_ERROR 6 //Allocate memory failed.
|
||||||
|
#define PLAYM4_OPEN_FILE_ERROR 7 //Open the file failed.
|
||||||
|
#define PLAYM4_CREATE_OBJ_ERROR 8 //Create thread or event failed
|
||||||
|
#define PLAYM4_CREATE_DDRAW_ERROR 9 //Create DirectDraw object failed.
|
||||||
|
#define PLAYM4_CREATE_OFFSCREEN_ERROR 10 //failed when creating off-screen surface.
|
||||||
|
#define PLAYM4_BUF_OVER 11 //buffer is overflow
|
||||||
|
#define PLAYM4_CREATE_SOUND_ERROR 12 //failed when creating audio device.
|
||||||
|
#define PLAYM4_SET_VOLUME_ERROR 13 //Set volume failed
|
||||||
|
#define PLAYM4_SUPPORT_FILE_ONLY 14 //The function only support play file.
|
||||||
|
#define PLAYM4_SUPPORT_STREAM_ONLY 15 //The function only support play stream.
|
||||||
|
#define PLAYM4_SYS_NOT_SUPPORT 16 //System not support.
|
||||||
|
#define PLAYM4_FILEHEADER_UNKNOWN 17 //No file header.
|
||||||
|
#define PLAYM4_VERSION_INCORRECT 18 //The version of decoder and encoder is not adapted.
|
||||||
|
#define PLAYM4_INIT_DECODER_ERROR 19 //Initialize decoder failed.
|
||||||
|
#define PLAYM4_CHECK_FILE_ERROR 20 //The file data is unknown.
|
||||||
|
#define PLAYM4_INIT_TIMER_ERROR 21 //Initialize multimedia clock failed.
|
||||||
|
#define PLAYM4_BLT_ERROR 22 //Blt failed.
|
||||||
|
#define PLAYM4_UPDATE_ERROR 23 //Update failed.
|
||||||
|
#define PLAYM4_OPEN_FILE_ERROR_MULTI 24 //openfile error, streamtype is multi
|
||||||
|
#define PLAYM4_OPEN_FILE_ERROR_VIDEO 25 //openfile error, streamtype is video
|
||||||
|
#define PLAYM4_JPEG_COMPRESS_ERROR 26 //JPEG compress error
|
||||||
|
#define PLAYM4_EXTRACT_NOT_SUPPORT 27 //Don't support the version of this file.
|
||||||
|
#define PLAYM4_EXTRACT_DATA_ERROR 28 //extract video data failed.
|
||||||
|
#define PLAYM4_SECRET_KEY_ERROR 29 //Secret key is error //add 20071218
|
||||||
|
#define PLAYM4_DECODE_KEYFRAME_ERROR 30 //add by hy 20090318
|
||||||
|
#define PLAYM4_NEED_MORE_DATA 31 //add by hy 20100617
|
||||||
|
#define PLAYM4_INVALID_PORT 32 //add by cj 20100913
|
||||||
|
#define PLAYM4_NOT_FIND 33 //add by cj 20110428
|
||||||
|
#define PLAYM4_NEED_LARGER_BUFFER 34 //add by pzj 20130528
|
||||||
|
#define PLAYM4_FAIL_UNKNOWN 99 //Fail, but the reason is unknown;
|
||||||
|
|
||||||
|
//鱼眼功能错误码
|
||||||
|
#define PLAYM4_FEC_ERR_ENABLEFAIL 100 // 鱼眼模块加载失败
|
||||||
|
#define PLAYM4_FEC_ERR_NOTENABLE 101 // 鱼眼模块没有加载
|
||||||
|
#define PLAYM4_FEC_ERR_NOSUBPORT 102 // 子端口没有分配
|
||||||
|
#define PLAYM4_FEC_ERR_PARAMNOTINIT 103 // 没有初始化对应端口的参数
|
||||||
|
#define PLAYM4_FEC_ERR_SUBPORTOVER 104 // 子端口已经用完
|
||||||
|
#define PLAYM4_FEC_ERR_EFFECTNOTSUPPORT 105 // 该安装方式下这种效果不支持
|
||||||
|
#define PLAYM4_FEC_ERR_INVALIDWND 106 // 非法的窗口
|
||||||
|
#define PLAYM4_FEC_ERR_PTZOVERFLOW 107 // PTZ位置越界
|
||||||
|
#define PLAYM4_FEC_ERR_RADIUSINVALID 108 // 圆心参数非法
|
||||||
|
#define PLAYM4_FEC_ERR_UPDATENOTSUPPORT 109 // 指定的安装方式和矫正效果,该参数更新不支持
|
||||||
|
#define PLAYM4_FEC_ERR_NOPLAYPORT 110 // 播放库端口没有启用
|
||||||
|
#define PLAYM4_FEC_ERR_PARAMVALID 111 // 参数为空
|
||||||
|
#define PLAYM4_FEC_ERR_INVALIDPORT 112 // 非法子端口
|
||||||
|
#define PLAYM4_FEC_ERR_PTZZOOMOVER 113 // PTZ矫正范围越界
|
||||||
|
#define PLAYM4_FEC_ERR_OVERMAXPORT 114 // 矫正通道饱和,最大支持的矫正通道为四个
|
||||||
|
#define PLAYM4_FEC_ERR_ENABLED 115 //该端口已经启用了鱼眼模块
|
||||||
|
#define PLAYM4_FEC_ERR_D3DACCENOTENABLE 116 // D3D加速没有开启
|
||||||
|
|
||||||
|
|
||||||
|
//Max display regions.
|
||||||
|
#define MAX_DISPLAY_WND 4
|
||||||
|
|
||||||
|
//Display type
|
||||||
|
#define DISPLAY_NORMAL 0x00000001
|
||||||
|
#define DISPLAY_QUARTER 0x00000002
|
||||||
|
#define DISPLAY_YC_SCALE 0x00000004 //add by gb 20091116
|
||||||
|
#define DISPLAY_NOTEARING 0x00000008
|
||||||
|
//Display buffers
|
||||||
|
#define MAX_DIS_FRAMES 50
|
||||||
|
#define MIN_DIS_FRAMES 1
|
||||||
|
|
||||||
|
//Locate by
|
||||||
|
#define BY_FRAMENUM 1
|
||||||
|
#define BY_FRAMETIME 2
|
||||||
|
|
||||||
|
//Source buffer
|
||||||
|
#define SOURCE_BUF_MAX 1024*100000
|
||||||
|
#define SOURCE_BUF_MIN 1024*50
|
||||||
|
|
||||||
|
//Stream type
|
||||||
|
#define STREAME_REALTIME 0
|
||||||
|
#define STREAME_FILE 1
|
||||||
|
|
||||||
|
//frame type
|
||||||
|
#define T_AUDIO16 101
|
||||||
|
#define T_AUDIO8 100
|
||||||
|
#define T_UYVY 1
|
||||||
|
#define T_YV12 3
|
||||||
|
#define T_RGB32 7
|
||||||
|
|
||||||
|
//capability
|
||||||
|
#define SUPPORT_DDRAW 1
|
||||||
|
#define SUPPORT_BLT 2
|
||||||
|
#define SUPPORT_BLTFOURCC 4
|
||||||
|
#define SUPPORT_BLTSHRINKX 8
|
||||||
|
#define SUPPORT_BLTSHRINKY 16
|
||||||
|
#define SUPPORT_BLTSTRETCHX 32
|
||||||
|
#define SUPPORT_BLTSTRETCHY 64
|
||||||
|
#define SUPPORT_SSE 128
|
||||||
|
#define SUPPORT_MMX 256
|
||||||
|
|
||||||
|
// 以下宏定义用于HIK_MEDIAINFO结构
|
||||||
|
#define FOURCC_HKMI 0x484B4D49 // "HKMI" HIK_MEDIAINFO结构标记
|
||||||
|
// 系统封装格式
|
||||||
|
#define SYSTEM_NULL 0x0 // 没有系统层,纯音频流或视频流
|
||||||
|
#define SYSTEM_HIK 0x1 // 海康文件层
|
||||||
|
#define SYSTEM_MPEG2_PS 0x2 // PS封装
|
||||||
|
#define SYSTEM_MPEG2_TS 0x3 // TS封装
|
||||||
|
#define SYSTEM_RTP 0x4 // rtp封装
|
||||||
|
#define SYSTEM_RTPHIK 0x401 // rtp封装
|
||||||
|
|
||||||
|
// 视频编码类型
|
||||||
|
#define VIDEO_NULL 0x0 // 没有视频
|
||||||
|
#define VIDEO_H264 0x1 // 海康H.264
|
||||||
|
#define VIDEO_MPEG4 0x3 // 标准MPEG4
|
||||||
|
#define VIDEO_MJPEG 0x4
|
||||||
|
#define VIDEO_AVC264 0x0100
|
||||||
|
|
||||||
|
// 音频编码类型
|
||||||
|
#define AUDIO_NULL 0x0000 // 没有音频
|
||||||
|
#define AUDIO_ADPCM 0x1000 // ADPCM
|
||||||
|
#define AUDIO_MPEG 0x2000 // MPEG 系列音频,解码器能自适应各种MPEG音频
|
||||||
|
#define AUDIO_AAC 0X2001 // AAC 编码
|
||||||
|
// G系列音频
|
||||||
|
#define AUDIO_RAW_DATA8 0x7000 //采样率为8k的原始数据
|
||||||
|
#define AUDIO_RAW_UDATA16 0x7001 //采样率为16k的原始数据,即L16
|
||||||
|
#define AUDIO_G711_U 0x7110
|
||||||
|
#define AUDIO_G711_A 0x7111
|
||||||
|
#define AUDIO_G722_1 0x7221
|
||||||
|
#define AUDIO_G723_1 0x7231
|
||||||
|
#define AUDIO_G726_U 0x7260
|
||||||
|
#define AUDIO_G726_A 0x7261
|
||||||
|
#define AUDIO_G726_16 0x7262
|
||||||
|
#define AUDIO_G729 0x7290
|
||||||
|
#define AUDIO_AMR_NB 0x3000
|
||||||
|
|
||||||
|
#define SYNCDATA_VEH 1 //同步数据:车载信息
|
||||||
|
#define SYNCDATA_IVS 2 //同步数据:智能信息
|
||||||
|
|
||||||
|
//motion flow type
|
||||||
|
#define MOTION_FLOW_NONE 0
|
||||||
|
#define MOTION_FLOW_CPU 1
|
||||||
|
#define MOTION_FLOW_GPU 2
|
||||||
|
|
||||||
|
//音视频加密类型
|
||||||
|
#define ENCRYPT_AES_3R_VIDEO 1
|
||||||
|
#define ENCRYPT_AES_10R_VIDEO 2
|
||||||
|
#define ENCRYPT_AES_3R_AUDIO 1
|
||||||
|
#define ENCRYPT_AES_10R_AUDIO 2
|
||||||
|
|
||||||
|
//Frame position
|
||||||
|
typedef struct{
|
||||||
|
long nFilePos;
|
||||||
|
long nFrameNum;
|
||||||
|
long nFrameTime;
|
||||||
|
long nErrorFrameNum;
|
||||||
|
SYSTEMTIME *pErrorTime;
|
||||||
|
long nErrorLostFrameNum;
|
||||||
|
long nErrorFrameSize;
|
||||||
|
}FRAME_POS,*PFRAME_POS;
|
||||||
|
|
||||||
|
//Frame Info
|
||||||
|
typedef struct{
|
||||||
|
long nWidth;
|
||||||
|
long nHeight;
|
||||||
|
long nStamp;
|
||||||
|
long nType;
|
||||||
|
long nFrameRate;
|
||||||
|
DWORD dwFrameNum;
|
||||||
|
}FRAME_INFO;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
long nPort; //通道号
|
||||||
|
char *pBuf; //返回的第一路图像数据指针
|
||||||
|
unsigned int nBufLen; //返回的第一路图像数据大小
|
||||||
|
char *pBuf1; //返回的第二路图像数据指针
|
||||||
|
unsigned int nBufLen1; //返回的第二路图像数据大小
|
||||||
|
char *pBuf2; //返回的第三路图像数据指针
|
||||||
|
unsigned int nBufLen2; //返回的第三路图像数据大小
|
||||||
|
unsigned int nWidth; //画面宽
|
||||||
|
unsigned int nHeight; //画面高
|
||||||
|
unsigned int nStamp; //时标信息,单位毫秒
|
||||||
|
unsigned int nType; //数据类型
|
||||||
|
void *pUser; //用户数据
|
||||||
|
unsigned int reserved[4]; //保留
|
||||||
|
}DISPLAY_INFO_YUV;
|
||||||
|
|
||||||
|
//Frame
|
||||||
|
typedef struct{
|
||||||
|
char *pDataBuf;
|
||||||
|
long nSize;
|
||||||
|
long nFrameNum;
|
||||||
|
BOOL bIsAudio;
|
||||||
|
long nReserved;
|
||||||
|
}FRAME_TYPE;
|
||||||
|
|
||||||
|
//Watermark Info //add by gb 080119
|
||||||
|
typedef struct{
|
||||||
|
char *pDataBuf;
|
||||||
|
long nSize;
|
||||||
|
long nFrameNum;
|
||||||
|
BOOL bRsaRight;
|
||||||
|
long nReserved;
|
||||||
|
}WATERMARK_INFO;
|
||||||
|
|
||||||
|
typedef struct SYNCDATA_INFO
|
||||||
|
{
|
||||||
|
DWORD dwDataType; //和码流数据同步的附属信息类型,目前有:智能信息,车载信息
|
||||||
|
DWORD dwDataLen; //附属信息数据长度
|
||||||
|
BYTE* pData; //指向附属信息数据结构的指针,比如IVS_INFO结构
|
||||||
|
} SYNCDATA_INFO;
|
||||||
|
|
||||||
|
#ifndef _HIK_MEDIAINFO_FLAG_
|
||||||
|
#define _HIK_MEDIAINFO_FLAG_
|
||||||
|
typedef struct _HIK_MEDIAINFO_ // modified by gb 080425
|
||||||
|
{
|
||||||
|
unsigned int media_fourcc; // "HKMI": 0x484B4D49 Hikvision Media Information
|
||||||
|
unsigned short media_version; // 版本号:指本信息结构版本号,目前为0x0101,即1.01版本,01:主版本号;01:子版本号。
|
||||||
|
unsigned short device_id; // 设备ID,便于跟随/分析
|
||||||
|
|
||||||
|
unsigned short system_format; // 系统封装层
|
||||||
|
unsigned short video_format; // 视频编码类型
|
||||||
|
|
||||||
|
unsigned short audio_format; // 音频编码类型
|
||||||
|
unsigned char audio_channels; // 通道数
|
||||||
|
unsigned char audio_bits_per_sample; // 样位率
|
||||||
|
unsigned int audio_samplesrate; // 采样率
|
||||||
|
unsigned int audio_bitrate; // 压缩音频码率,单位:bit
|
||||||
|
|
||||||
|
unsigned int reserved[4]; // 保留
|
||||||
|
}HIK_MEDIAINFO;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
long nPort;
|
||||||
|
char * pBuf;
|
||||||
|
long nBufLen;
|
||||||
|
long nWidth;
|
||||||
|
long nHeight;
|
||||||
|
long nStamp;
|
||||||
|
long nType;
|
||||||
|
long nUser;
|
||||||
|
}DISPLAY_INFO;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
long nPort;
|
||||||
|
char *pVideoBuf;
|
||||||
|
long nVideoBufLen;
|
||||||
|
char *pPriBuf;
|
||||||
|
long nPriBufLen;
|
||||||
|
long nWidth;
|
||||||
|
long nHeight;
|
||||||
|
long nStamp;
|
||||||
|
long nType;
|
||||||
|
long nUser;
|
||||||
|
}DISPLAY_INFOEX;
|
||||||
|
|
||||||
|
typedef struct PLAYM4_SYSTEM_TIME //绝对时间
|
||||||
|
{
|
||||||
|
DWORD dwYear; //年
|
||||||
|
DWORD dwMon; //月
|
||||||
|
DWORD dwDay; //日
|
||||||
|
DWORD dwHour; //时
|
||||||
|
DWORD dwMin; //分
|
||||||
|
DWORD dwSec; //秒
|
||||||
|
DWORD dwMs; //毫秒
|
||||||
|
} PLAYM4_SYSTEM_TIME;
|
||||||
|
|
||||||
|
//ENCRYPT Info
|
||||||
|
typedef struct{
|
||||||
|
long nVideoEncryptType; //视频加密类型
|
||||||
|
long nAudioEncryptType; //音频加密类型
|
||||||
|
long nSetSecretKey; //是否设置,1表示设置密钥,0表示没有设置密钥
|
||||||
|
}ENCRYPT_INFO;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//API
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
////////////////ver 1.0///////////////////////////////////////
|
||||||
|
//Initialize DirecDraw.Now invalid.
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_InitDDraw(HWND hWnd);
|
||||||
|
//Release directDraw; Now invalid.
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_RealeseDDraw();
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_OpenFile(LONG nPort,LPSTR sFileName);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_CloseFile(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_Play(LONG nPort, HWND hWnd);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_Stop(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_Pause(LONG nPort,DWORD nPause);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_Fast(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_Slow(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_OneByOne(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetPlayPos(LONG nPort,float fRelativePos);
|
||||||
|
PLAYM4_API float __stdcall PlayM4_GetPlayPos(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetFileEndMsg(LONG nPort,HWND hWnd,UINT nMsg);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetVolume(LONG nPort,WORD nVolume);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_StopSound();
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_PlaySound(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_OpenStream(LONG nPort,PBYTE pFileHeadBuf,DWORD nSize,DWORD nBufPoolSize);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_InputData(LONG nPort,PBYTE pBuf,DWORD nSize);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_CloseStream(LONG nPort);
|
||||||
|
PLAYM4_API int __stdcall PlayM4_GetCaps();
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetFileTime(LONG nPort);
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetPlayedTime(LONG nPort);
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetPlayedFrames(LONG nPort);
|
||||||
|
|
||||||
|
//23
|
||||||
|
////////////////ver 2.0 added///////////////////////////////////////
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDecCallBack(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2));
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDisplayCallBackYUV(LONG nPort, void (CALLBACK* DisplayCBFun)(DISPLAY_INFO_YUV *pstDisplayInfo), BOOL bTrue, void* pUser);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDisplayCallBack(LONG nPort,void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long nReserved));
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_ConvertToBmpFile(char * pBuf,long nSize,long nWidth,long nHeight,long nType,char *sFileName);
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetFileTotalFrames(LONG nPort);
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetCurrentFrameRate(LONG nPort);
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetPlayedTimeEx(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetPlayedTimeEx(LONG nPort,DWORD nTime);
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetCurrentFrameNum(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetStreamOpenMode(LONG nPort,DWORD nMode);
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetFileHeadLength();
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetSdkVersion();
|
||||||
|
//11
|
||||||
|
////////////////ver 2.2 added///////////////////////////////////////
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetLastError(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_RefreshPlay(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetOverlayMode(LONG nPort,BOOL bOverlay,COLORREF colorKey);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetPictureSize(LONG nPort,LONG *pWidth,LONG *pHeight);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetPicQuality(LONG nPort,BOOL bHighQuality);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_PlaySoundShare(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_StopSoundShare(LONG nPort);
|
||||||
|
//7
|
||||||
|
////////////////ver 2.4 added///////////////////////////////////////
|
||||||
|
PLAYM4_API LONG __stdcall PlayM4_GetStreamOpenMode(LONG nPort);
|
||||||
|
PLAYM4_API LONG __stdcall PlayM4_GetOverlayMode(LONG nPort);
|
||||||
|
PLAYM4_API COLORREF __stdcall PlayM4_GetColorKey(LONG nPort);
|
||||||
|
PLAYM4_API WORD __stdcall PlayM4_GetVolume(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetPictureQuality(LONG nPort,BOOL *bHighQuality);
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetSourceBufferRemain(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_ResetSourceBuffer(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetSourceBufCallBack(LONG nPort,DWORD nThreShold,void (CALLBACK * SourceBufCallBack)(long nPort,DWORD nBufSize,DWORD dwUser,void*pResvered),DWORD dwUser,void *pReserved);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_ResetSourceBufFlag(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDisplayBuf(LONG nPort,DWORD nNum);
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetDisplayBuf(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_OneByOneBack(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetFileRefCallBack(LONG nPort, void (__stdcall *pFileRefDone)(DWORD nPort,DWORD nUser),DWORD nUser);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetCurrentFrameNum(LONG nPort,DWORD nFrameNum);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetNextKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos);
|
||||||
|
#if (WINVER >= 0x0400)
|
||||||
|
//Note: These funtion must be builded under win2000 or above with Microsoft Platform sdk.
|
||||||
|
// You can download the sdk from "http://www.microsoft.com/msdownload/platformsdk/sdkupdate/";
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_InitDDrawDevice();
|
||||||
|
PLAYM4_API void __stdcall PlayM4_ReleaseDDrawDevice();
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetDDrawDeviceTotalNums();
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDDrawDevice(LONG nPort,DWORD nDeviceNum);
|
||||||
|
//PLAYM4_API BOOL __stdcall PlayM4_GetDDrawDeviceInfo(DWORD nDeviceNum,LPSTR lpDriverDescription,DWORD nDespLen,LPSTR lpDriverName ,DWORD nNameLen,HMONITOR *hhMonitor);
|
||||||
|
PLAYM4_API int __stdcall PlayM4_GetCapsEx(DWORD nDDrawDeviceNum);
|
||||||
|
#endif
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_ThrowBFrameNum(LONG nPort,DWORD nNum);
|
||||||
|
//23
|
||||||
|
////////////////ver 2.5 added///////////////////////////////////////
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDisplayType(LONG nPort,LONG nType);
|
||||||
|
PLAYM4_API long __stdcall PlayM4_GetDisplayType(LONG nPort);
|
||||||
|
//2
|
||||||
|
////////////////ver 3.0 added///////////////////////////////////////
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDecCBStream(LONG nPort,DWORD nStream);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDisplayRegion(LONG nPort,DWORD nRegionNum, RECT *pSrcRect, HWND hDestWnd, BOOL bEnable);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_RefreshPlayEx(LONG nPort,DWORD nRegionNum);
|
||||||
|
#if (WINVER >= 0x0400)
|
||||||
|
//Note: The funtion must be builded under win2000 or above with Microsoft Platform sdk.
|
||||||
|
// You can download the sdk from http://www.microsoft.com/msdownload/platformsdk/sdkupdate/;
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDDrawDeviceEx(LONG nPort,DWORD nRegionNum,DWORD nDeviceNum);
|
||||||
|
#endif
|
||||||
|
//4
|
||||||
|
/////////////////v3.2 added/////////////////////////////////////////
|
||||||
|
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetRefValue(LONG nPort,BYTE *pBuffer, DWORD *pSize);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetRefValue(LONG nPort,BYTE *pBuffer, DWORD nSize);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_OpenStreamEx(LONG nPort,PBYTE pFileHeadBuf,DWORD nSize,DWORD nBufPoolSize);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_CloseStreamEx(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_InputVideoData(LONG nPort,PBYTE pBuf,DWORD nSize);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_InputAudioData(LONG nPort,PBYTE pBuf,DWORD nSize);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_RegisterDrawFun(LONG nPort,void (CALLBACK* DrawFun)(long nPort,HDC hDc,LONG nUser),LONG nUser);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_RigisterDrawFun(LONG nPort,void (CALLBACK* DrawFun)(long nPort,HDC hDc,LONG nUser),LONG nUser);
|
||||||
|
//8
|
||||||
|
//////////////////v3.4/////////////////////////////////////////////////////
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetTimerType(LONG nPort,DWORD nTimerType,DWORD nReserved);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetTimerType(LONG nPort,DWORD *pTimerType,DWORD *pReserved);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_ResetBuffer(LONG nPort,DWORD nBufType);
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetBufferValue(LONG nPort,DWORD nBufType);
|
||||||
|
|
||||||
|
//////////////////V3.6/////////////////////////////////////////////////////////
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_AdjustWaveAudio(LONG nPort,LONG nCoefficient);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetVerifyCallBack(LONG nPort, DWORD nBeginTime, DWORD nEndTime, void (__stdcall * funVerify)(long nPort, FRAME_POS * pFilePos, DWORD bIsVideo, DWORD nUser), DWORD nUser);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetAudioCallBack(LONG nPort, void (__stdcall * funAudio)(long nPort, char * pAudioBuf, long nSize, long nStamp, long nType, long nUser), long nUser);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetEncTypeChangeCallBack(LONG nPort,void(CALLBACK *funEncChange)(long nPort,long nUser),long nUser);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetColor(LONG nPort, DWORD nRegionNum, int nBrightness, int nContrast, int nSaturation, int nHue);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetColor(LONG nPort, DWORD nRegionNum, int *pBrightness, int *pContrast, int *pSaturation, int *pHue);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetEncChangeMsg(LONG nPort,HWND hWnd,UINT nMsg);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetOriginalFrameCallBack(LONG nPort, BOOL bIsChange,BOOL bNormalSpeed,long nStartFrameNum,long nStartStamp,long nFileHeader,void(CALLBACK *funGetOrignalFrame)(long nPort,FRAME_TYPE *frameType, long nUser),long nUser);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetFileSpecialAttr(LONG nPort, DWORD *pTimeStamp,DWORD *pFileNum ,DWORD *pReserved);
|
||||||
|
PLAYM4_API DWORD __stdcall PlayM4_GetSpecialData(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetCheckWatermarkCallBack(LONG nPort,void(CALLBACK* funCheckWatermark)(long nPort,WATERMARK_INFO* pWatermarkInfo,DWORD nUser),DWORD nUser);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetImageSharpen(LONG nPort,DWORD nLevel);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDecodeFrameType(LONG nPort,DWORD nFrameType);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetPlayMode(LONG nPort,BOOL bNormal);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetOverlayFlipMode(LONG nPort,BOOL bTrue);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetOverlayPriInfoFlag(LONG nPort, DWORD nIntelType, BOOL bTrue,const char *pFontPath);
|
||||||
|
|
||||||
|
//PLAYM4_API DWORD __stdcall PlayM4_GetAbsFrameNum(LONG nPort);
|
||||||
|
|
||||||
|
//////////////////V4.7.0.0//////////////////////////////////////////////////////
|
||||||
|
////convert yuv to jpeg
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_ConvertToJpegFile(char * pBuf,long nSize,long nWidth,long nHeight,long nType,char *sFileName);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetJpegQuality(long nQuality);
|
||||||
|
//set deflash
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDeflash(LONG nPort,BOOL bDefalsh);
|
||||||
|
//PLAYM4_API BOOL __stdcall PlayM4_SetDecCallBackEx(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2), char* pDest, long nDestSize);
|
||||||
|
//////////////////V4.8.0.0/////////////////////////////////////////////////////////
|
||||||
|
//check discontinuous frame number as error data?
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_CheckDiscontinuousFrameNum(LONG nPort, BOOL bCheck);
|
||||||
|
//get bmp or jpeg
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetBMP(LONG nPort,PBYTE pBitmap,DWORD nBufSize,DWORD* pBmpSize);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize);
|
||||||
|
//dec call back mend
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDecCallBackMend(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nUser,long nReserved2), long nUser);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetSecretKey(LONG nPort, LONG lKeyType, char *pSecretKey, LONG lKeyLen);
|
||||||
|
|
||||||
|
// add by gb 2007-12-23
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetFileEndCallback(LONG nPort, void(CALLBACK*FileEndCallback)(long nPort, void *pUser), void *pUser);
|
||||||
|
|
||||||
|
// add by gb 080131 version 4.9.0.1
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetPort(LONG* nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_FreePort(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDisplayCallBackEx(LONG nPort,void (CALLBACK* DisplayCBFun)(DISPLAY_INFO *pstDisplayInfo), long nUser);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SkipErrorData(LONG nPort, BOOL bSkip);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetDecCallBackExMend(LONG nPort, void (CALLBACK* DecCBFun)(long nPort, char* pBuf, long nSize, FRAME_INFO* pFrameInfo,
|
||||||
|
long nUser, long nReserved2), char* pDest, long nDestSize, long nUser);
|
||||||
|
//reverse play add by chenjie 110609
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_ReversePlay(LONG nPort);
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetSystemTime(LONG nPort, PLAYM4_SYSTEM_TIME *pstSystemTime);
|
||||||
|
|
||||||
|
//PLAYM4_API BOOL __stdcall PlayM4_SetDecodeERC(long nPort, unsigned int nLevel);
|
||||||
|
|
||||||
|
#ifndef PLAYM4_SESSION_INFO_TAG
|
||||||
|
#define PLAYM4_SESSION_INFO_TAG
|
||||||
|
//nProtocolType
|
||||||
|
#define PLAYM4_PROTOCOL_RTSP 1
|
||||||
|
//nSessionInfoType
|
||||||
|
#define PLAYM4_SESSION_INFO_SDP 1
|
||||||
|
|
||||||
|
typedef struct _PLAYM4_SESSION_INFO_ //交互信息结构
|
||||||
|
{
|
||||||
|
int nSessionInfoType; //交互信息类型,比如SDP,比如海康私有信息头
|
||||||
|
int nSessionInfoLen; //交互信息长度
|
||||||
|
unsigned char* pSessionInfoData; //交互信息数据
|
||||||
|
|
||||||
|
} PLAYM4_SESSION_INFO;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_OpenStreamAdvanced(LONG nPort, int nProtocolType, PLAYM4_SESSION_INFO* pstSessionInfo, DWORD nBufPoolSize);
|
||||||
|
|
||||||
|
#define R_ANGLE_0 -1 //不旋转
|
||||||
|
#define R_ANGLE_L90 0 //向左旋转90度
|
||||||
|
#define R_ANGLE_R90 1 //向右旋转90度
|
||||||
|
#define R_ANGLE_180 2 //旋转180度
|
||||||
|
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetRotateAngle(LONG nPort, DWORD nRegionNum, DWORD dwType);
|
||||||
|
|
||||||
|
#ifndef PLAYM4_ADDITION_INFO_TAG
|
||||||
|
#define PLAYM4_ADDITION_INFO_TAG
|
||||||
|
typedef struct _PLAYM4_ADDITION_INFO_ //交互信息结构
|
||||||
|
{
|
||||||
|
BYTE* pData; //附件数据
|
||||||
|
DWORD dwDatalen; //附件数据长度
|
||||||
|
DWORD dwDataType; //数据类型
|
||||||
|
DWORD dwTimeStamp; //相对时间戳
|
||||||
|
} PLAYM4_ADDITION_INFO;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//dwGroupIndex 暂约定取值0~3,第一版本取消同步只能同个closestream处理
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetSycGroup(LONG nPort, DWORD dwGroupIndex);
|
||||||
|
//暂不实现此函数,同个组设置的起始时间不一致,以最小的时间作为播放起点,同一组可只设一路
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetSycStartTime(LONG nPort, PLAYM4_SYSTEM_TIME *pstSystemTime);
|
||||||
|
|
||||||
|
|
||||||
|
// 以下实现鱼眼相关的接口
|
||||||
|
#ifndef FISH_EYE_TAG
|
||||||
|
#define FISH_EYE_TAG
|
||||||
|
|
||||||
|
// 安装类型
|
||||||
|
typedef enum tagFECPlaceType
|
||||||
|
{
|
||||||
|
FEC_PLACE_WALL = 0x1, // 壁装方式 (法线水平)
|
||||||
|
FEC_PLACE_FLOOR = 0x2, // 地面安装 (法线向上)
|
||||||
|
FEC_PLACE_CEILING = 0x3, // 顶装方式 (法线向下)
|
||||||
|
|
||||||
|
}FECPLACETYPE;
|
||||||
|
|
||||||
|
typedef enum tagFECCorrectType
|
||||||
|
{
|
||||||
|
FEC_CORRECT_PTZ = 0x100, // PTZ
|
||||||
|
FEC_CORRECT_180 = 0x200, // 180度矫正 (对应2P)
|
||||||
|
FEC_CORRECT_360 = 0x300, // 360全景矫正 (对应1P)
|
||||||
|
FEC_CORRECT_LAT = 0x400 //纬度展开
|
||||||
|
|
||||||
|
}FECCORRECTTYPE;
|
||||||
|
|
||||||
|
typedef struct tagCycleParam
|
||||||
|
{
|
||||||
|
float fRadiusLeft; // 圆的最左边X坐标
|
||||||
|
float fRadiusRight; // 圆的最右边X坐标
|
||||||
|
float fRadiusTop; // 圆的最上边Y坐标
|
||||||
|
float fRadiusBottom; // 圆的最下边Y坐标
|
||||||
|
|
||||||
|
}CYCLEPARAM;
|
||||||
|
|
||||||
|
typedef struct tagPTZParam
|
||||||
|
{
|
||||||
|
float fPTZPositionX; // PTZ 显示的中心位置 X坐标
|
||||||
|
float fPTZPositionY; // PTZ 显示的中心位置 Y坐标
|
||||||
|
|
||||||
|
}PTZPARAM;
|
||||||
|
|
||||||
|
|
||||||
|
// 错误码
|
||||||
|
/*********************************************
|
||||||
|
|
||||||
|
|
||||||
|
********************************************/
|
||||||
|
|
||||||
|
|
||||||
|
// 更新标记变量定义
|
||||||
|
|
||||||
|
|
||||||
|
#define FEC_UPDATE_RADIUS 0x1
|
||||||
|
#define FEC_UPDATE_PTZZOOM 0x2
|
||||||
|
#define FEC_UPDATE_WIDESCANOFFSET 0x4
|
||||||
|
#define FEC_UPDATE_PTZPARAM 0x8
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagFECParam
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
unsigned int nUpDateType; // 更新的类型
|
||||||
|
|
||||||
|
unsigned int nPlaceAndCorrect; // 安装方式和矫正方式,只能用于获取,SetParam的时候无效,该值表示安装方式和矫正方式的和
|
||||||
|
|
||||||
|
PTZPARAM stPTZParam; // PTZ 校正的参数
|
||||||
|
|
||||||
|
CYCLEPARAM stCycleParam; // 鱼眼图像圆心参数
|
||||||
|
|
||||||
|
float fZoom; // PTZ 显示的范围参数
|
||||||
|
|
||||||
|
float fWideScanOffset; // 180或者360度校正的偏移角度
|
||||||
|
|
||||||
|
int nResver[16]; // 保留字段
|
||||||
|
|
||||||
|
}FISHEYEPARAM;
|
||||||
|
|
||||||
|
typedef void (__stdcall * FISHEYE_CallBack )( void* pUser , unsigned int nSubPort , unsigned int nCBType , void * hDC , unsigned int nWidth , unsigned int nHeight);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
// 启用鱼眼
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_FEC_Enable(LONG nPort);
|
||||||
|
|
||||||
|
// 关闭鱼眼模块
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_FEC_Disable(LONG nPort);
|
||||||
|
|
||||||
|
// 获取鱼眼矫正处理子端口 [1~31]
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_FEC_GetPort(LONG nPort, unsigned int* nSubPort,FECPLACETYPE emPlaceType,FECCORRECTTYPE emCorrectType);
|
||||||
|
|
||||||
|
// 删除鱼眼矫正处理子端口
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_FEC_DelPort(LONG nPort , unsigned int nSubPort);
|
||||||
|
|
||||||
|
// 设置鱼眼矫正参数
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_FEC_SetParam(LONG nPort , unsigned int nSubPort , FISHEYEPARAM * pPara);
|
||||||
|
|
||||||
|
// 获取鱼眼矫正参数
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_FEC_GetParam(LONG nPort , unsigned int nSubPort , FISHEYEPARAM * pPara);
|
||||||
|
|
||||||
|
// 设置显示窗口,可以随时切换
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_FEC_SetWnd(LONG nPort , unsigned int nSubPort , void * hWnd);
|
||||||
|
|
||||||
|
// 设置鱼眼窗口的绘图回调
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_FEC_SetCallBack(LONG nPort , unsigned int nSubPort , FISHEYE_CallBack cbFunc , void * pUser);
|
||||||
|
|
||||||
|
//motionflow
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_MotionFlow(LONG nPort, DWORD dwAdjustType);
|
||||||
|
|
||||||
|
|
||||||
|
//图像增强相关
|
||||||
|
#ifndef PLAYM4_HIKVIE_TAG
|
||||||
|
#define PLAYM4_HIKVIE_TAG
|
||||||
|
|
||||||
|
typedef struct _PLAYM4_VIE_DYNPARAM_
|
||||||
|
{
|
||||||
|
int moduFlag; //启用的算法处理模块,在PLAYM4_VIE_MODULES中定义
|
||||||
|
//如 PLAYM4_VIE_MODU_ADJ | PLAYM4_VIE_MODU_EHAN
|
||||||
|
//模块启用后,必须设置相应的参数;
|
||||||
|
//PLAYM4_VIE_MODU_ADJ
|
||||||
|
int brightVal; //亮度调节值,[-255, 255]
|
||||||
|
int contrastVal; //对比度调节值,[-256, 255]
|
||||||
|
int colorVal; //饱和度调节值,[-256, 255]
|
||||||
|
//PLAYM4_VIE_MODU_EHAN
|
||||||
|
int toneScale; //滤波范围,[0, 100]
|
||||||
|
int toneGain; //对比度调节,全局对比度增益值,[-256, 255]
|
||||||
|
int toneOffset; //亮度调节,亮度平均值偏移,[-255, 255]
|
||||||
|
int toneColor; //颜色调节,颜色保真值,[-256, 255]
|
||||||
|
//PLAYM4_VIE_MODU_DEHAZE
|
||||||
|
int dehazeLevel; //去雾强度,[0, 255]
|
||||||
|
int dehazeTrans; //透射值,[0, 255]
|
||||||
|
int dehazeBright; //亮度补偿,[0, 255]
|
||||||
|
//PLAYM4_VIE_MODU_DENOISE
|
||||||
|
int denoiseLevel; //去噪强度,[0, 255]
|
||||||
|
//PLAYM4_VIE_MODU_SHARPEN
|
||||||
|
int usmAmount; //锐化强度,[0, 255]
|
||||||
|
int usmRadius; //锐化半径,[1, 15]
|
||||||
|
int usmThreshold; //锐化阈值,[0, 255]
|
||||||
|
//PLAYM4_VIE_MODU_DEBLOCK
|
||||||
|
int deblockLevel; //去块强度,[0, 100]
|
||||||
|
//PLAYM4_VIE_MODU_LENS
|
||||||
|
int lensWarp; //畸变量,[-256, 255]
|
||||||
|
int lensZoom; //缩放量,[-256, 255]
|
||||||
|
//PLAYM4_VIE_MODU_CRB
|
||||||
|
//无响应参数
|
||||||
|
} PLAYM4_VIE_PARACONFIG;
|
||||||
|
|
||||||
|
typedef enum _PLAYM4_VIE_MODULES
|
||||||
|
{
|
||||||
|
PLAYM4_VIE_MODU_ADJ = 0x00000001, //图像基本调节
|
||||||
|
PLAYM4_VIE_MODU_EHAN = 0x00000002, //局部增强模块
|
||||||
|
PLAYM4_VIE_MODU_DEHAZE = 0x00000004, //去雾模块
|
||||||
|
PLAYM4_VIE_MODU_DENOISE = 0x00000008, //去噪模块
|
||||||
|
PLAYM4_VIE_MODU_SHARPEN = 0x00000010, //锐化模块
|
||||||
|
PLAYM4_VIE_MODU_DEBLOCK = 0x00000020, //去块滤波模块
|
||||||
|
PLAYM4_VIE_MODU_CRB = 0x00000040, //色彩平衡模块
|
||||||
|
PLAYM4_VIE_MODU_LENS = 0x00000080, //镜头畸变矫正模块
|
||||||
|
}PLAYM4_VIE_MODULES;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//设置关闭/开启模块
|
||||||
|
//dwModuFlag对应PLAYM4_VIE_MODULES宏,可组合
|
||||||
|
//先设置模块开启,再设置模块参数;期间采用默认的参数;
|
||||||
|
//关闭模块后,上次设置的参数清空
|
||||||
|
//其他接口调用,必须在该接口开启模块后;否则,返回错误
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_VIE_SetModuConfig(LONG lPort,int nModuFlag,BOOL bEnable);
|
||||||
|
|
||||||
|
//设置图像增强区域,NULL全图;超过全图,采用全图;最小区域16*16像素
|
||||||
|
//可支持设置区域,最多比较说4个,第一个版本可以只支持一个。多个区域要求不能重叠,有重叠就报错
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_VIE_SetRegion(LONG lPort,LONG lRegNum,RECT* pRect);
|
||||||
|
|
||||||
|
//获取开启模块
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_VIE_GetModuConfig(LONG lPort,int* pdwModuFlag);
|
||||||
|
|
||||||
|
//设置参数
|
||||||
|
//未开启模块的参数设置被忽略
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_VIE_SetParaConfig(LONG lPort,PLAYM4_VIE_PARACONFIG* pParaConfig);
|
||||||
|
|
||||||
|
//获取开启模块的参数
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_VIE_GetParaConfig(LONG lPort,PLAYM4_VIE_PARACONFIG* pParaConfig);
|
||||||
|
|
||||||
|
//音视频同步接口
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SyncToAudio(LONG nPort, BOOL bSyncToAudio);
|
||||||
|
|
||||||
|
// 私有信息模块类型
|
||||||
|
typedef enum _PLAYM4_PRIDATA_RENDER
|
||||||
|
{
|
||||||
|
PLAYM4_RENDER_ANA_INTEL_DATA = 0x00000001, //智能分析
|
||||||
|
PLAYM4_RENDER_MD = 0x00000002, //移动侦测
|
||||||
|
PLAYM4_RENDER_ADD_POS = 0x00000004, //POS信息后叠加
|
||||||
|
PLAYM4_RENDER_ADD_PIC = 0x00000008, //图片叠加
|
||||||
|
PLAYM4_RENDER_FIRE_DETCET = 0x00000010, //热成像信息
|
||||||
|
PLAYM4_RENDER_TEM = 0x00000020, //温度信息
|
||||||
|
PLAYM4_RENDER_TRACK_TEM = 0x00000040, //轨迹信息
|
||||||
|
PLAYM4_RENDER_THERMAL = 0x00000080 //废气检测和烟火屏蔽信息
|
||||||
|
}PLAYM4_PRIDATA_RENDER;
|
||||||
|
|
||||||
|
typedef enum _PLAYM4_THERMAL_FLAG
|
||||||
|
{
|
||||||
|
PLAYM4_THERMAL_FIREMASK = 0x00000001, //烟火屏蔽
|
||||||
|
PLAYM4_THERMAL_RULEGAS = 0x00000002, //规则废气检测
|
||||||
|
PLAYM4_THERMAL_TARGETGAS = 0x00000004 //目标废气检测
|
||||||
|
}PLAYM4_THERMAL_FLAG;
|
||||||
|
|
||||||
|
typedef enum _PLAYM4_FIRE_ALARM{
|
||||||
|
PLAYM4_FIRE_FRAME_DIS = 0x00000001, //火点框显示
|
||||||
|
PLAYM4_FIRE_MAX_TEMP = 0x00000002, //最高温度
|
||||||
|
PLAYM4_FIRE_MAX_TEMP_POSITION = 0x00000004, //最高温度位置显示
|
||||||
|
PLAYM4_FIRE_DISTANCE = 0x00000008, //最高温度距离}PLAYM4_FIRE_ALARM
|
||||||
|
}PLAYM4_FIRE_ALARM;
|
||||||
|
|
||||||
|
typedef enum _PLAYM4_TEM_FLAG{
|
||||||
|
PLAYM4_TEM_REGION_BOX = 0x00000001, //框测温
|
||||||
|
PLAYM4_TEM_REGION_LINE = 0x00000002, //线测温
|
||||||
|
PLAYM4_TEM_REGION_POINT = 0x00000004, //点测温}PLAYM4_TEM_FLAG
|
||||||
|
}PLAYM4_TEM_FLAG;
|
||||||
|
|
||||||
|
typedef enum _PLAYM4_TRACK_FLAG
|
||||||
|
{
|
||||||
|
PLAYM4_TRACK_PEOPLE = 0x00000001, //人轨迹
|
||||||
|
PLAYM4_TRACK_VEHICLE = 0x00000002, //车轨迹
|
||||||
|
}PLAYM4_TRACK_FLAG;
|
||||||
|
|
||||||
|
typedef struct TI_PTZ_INFO_
|
||||||
|
{
|
||||||
|
unsigned short dwDefVer; //结构体版本
|
||||||
|
unsigned short dwLength; //PTZ_info长度,以8字节为单位
|
||||||
|
DWORD dwP; //P(0~3600)
|
||||||
|
DWORD dwT; //T(0~3600)
|
||||||
|
DWORD dwZ; //Z(0~3600)
|
||||||
|
BYTE chFSMState; //跟随状态
|
||||||
|
BYTE bClearFocusState; //聚焦清晰状态(0,1)
|
||||||
|
BYTE reserved[6]; //6个字节保留
|
||||||
|
}PTZ_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
// 智能信息开关
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_RenderPrivateData(LONG nPort, int nIntelType, BOOL bTrue);
|
||||||
|
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_RenderPrivateDataEx(LONG nPort, int nIntelType, int nSubType, BOOL bTrue);
|
||||||
|
|
||||||
|
// 加密码流回调,nType=0表示码流加密标记位发生变化就回调,nType=1表示码流有加密位发生回调
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_SetEncryptTypeCallBack(LONG nPort, DWORD nType,
|
||||||
|
void (CALLBACK* EncryptTypeCBFun)(long nPort, ENCRYPT_INFO* pEncryptInfo, long nUser, long nReserved2), long nUser);
|
||||||
|
//lType: 1 表示获取当前显示帧PTZ信息。以特定结构体形式存储在pInfo内,plLen返回长度信息
|
||||||
|
PLAYM4_API BOOL __stdcall PlayM4_GetStreamAdditionalInfo(LONG nPort, LONG lType, BYTE* pInfo, LONG* plLen);
|
||||||
|
|
||||||
|
|
||||||
|
#endif //_PLAYM4_H_
|
BIN
3rdparty/hikvision/lib/win64/GdiPlus.lib
vendored
Normal file
BIN
3rdparty/hikvision/lib/win64/GdiPlus.lib
vendored
Normal file
Binary file not shown.
BIN
3rdparty/hikvision/lib/win64/HCCore.lib
vendored
Normal file
BIN
3rdparty/hikvision/lib/win64/HCCore.lib
vendored
Normal file
Binary file not shown.
BIN
3rdparty/hikvision/lib/win64/HCNetSDK.lib
vendored
Normal file
BIN
3rdparty/hikvision/lib/win64/HCNetSDK.lib
vendored
Normal file
Binary file not shown.
BIN
3rdparty/hikvision/lib/win64/PlayCtrl.lib
vendored
Normal file
BIN
3rdparty/hikvision/lib/win64/PlayCtrl.lib
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_aruco454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_aruco454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_barcode454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_barcode454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_bgsegm454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_bgsegm454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_bioinspired454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_bioinspired454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_calib3d454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_calib3d454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_ccalib454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_ccalib454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_core454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_core454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_datasets454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_datasets454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_dnn454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_dnn454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_dnn_objdetect454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_dnn_objdetect454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_dnn_superres454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_dnn_superres454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_dpm454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_dpm454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_face454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_face454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_features2d454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_features2d454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_flann454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_flann454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_fuzzy454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_fuzzy454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_gapi454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_gapi454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_hfs454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_hfs454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_highgui454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_highgui454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_img_hash454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_img_hash454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_imgcodecs454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_imgcodecs454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_imgproc454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_imgproc454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_intensity_transform454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_intensity_transform454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_line_descriptor454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_line_descriptor454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_mcc454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_mcc454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_ml454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_ml454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_objdetect454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_objdetect454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_optflow454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_optflow454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_phase_unwrapping454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_phase_unwrapping454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_photo454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_photo454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_plot454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_plot454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_quality454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_quality454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_rapid454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_rapid454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_reg454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_reg454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_rgbd454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_rgbd454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_saliency454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_saliency454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_shape454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_shape454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_stereo454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_stereo454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_stitching454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_stitching454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_structured_light454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_structured_light454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_superres454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_superres454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_surface_matching454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_surface_matching454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_text454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_text454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_tracking454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_tracking454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_video454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_video454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_videoio454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_videoio454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_videoio_ffmpeg454_64.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_videoio_ffmpeg454_64.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_videostab454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_videostab454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_wechat_qrcode454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_wechat_qrcode454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_xfeatures2d454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_xfeatures2d454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_ximgproc454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_ximgproc454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_xobjdetect454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_xobjdetect454.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/opencv/dll/opencv_xphoto454.dll
vendored
Normal file
BIN
3rdparty/opencv/dll/opencv_xphoto454.dll
vendored
Normal file
Binary file not shown.
616
3rdparty/opencv/inc/opencv2/aruco.hpp
vendored
Normal file
616
3rdparty/opencv/inc/opencv2/aruco.hpp
vendored
Normal file
@ -0,0 +1,616 @@
|
|||||||
|
/*
|
||||||
|
By downloading, copying, installing or using the software you agree to this
|
||||||
|
license. If you do not agree to this license, do not download, install,
|
||||||
|
copy or use the software.
|
||||||
|
|
||||||
|
License Agreement
|
||||||
|
For Open Source Computer Vision Library
|
||||||
|
(3-clause BSD License)
|
||||||
|
|
||||||
|
Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
|
Third party copyrights are property of their respective owners.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the names of the copyright holders nor the names of the contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
|
||||||
|
This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
any express or implied warranties, including, but not limited to, the implied
|
||||||
|
warranties of merchantability and fitness for a particular purpose are
|
||||||
|
disclaimed. In no event shall copyright holders or contributors be liable for
|
||||||
|
any direct, indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
(including, but not limited to, procurement of substitute goods or services;
|
||||||
|
loss of use, data, or profits; or business interruption) however caused
|
||||||
|
and on any theory of liability, whether in contract, strict liability,
|
||||||
|
or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
the use of this software, even if advised of the possibility of such damage.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __OPENCV_ARUCO_HPP__
|
||||||
|
#define __OPENCV_ARUCO_HPP__
|
||||||
|
|
||||||
|
#include <opencv2/core.hpp>
|
||||||
|
#include <vector>
|
||||||
|
#include "opencv2/aruco/dictionary.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @defgroup aruco ArUco Marker Detection
|
||||||
|
* This module is dedicated to square fiducial markers (also known as Augmented Reality Markers)
|
||||||
|
* These markers are useful for easy, fast and robust camera pose estimation.ç
|
||||||
|
*
|
||||||
|
* The main functionalities are:
|
||||||
|
* - Detection of markers in an image
|
||||||
|
* - Pose estimation from a single marker or from a board/set of markers
|
||||||
|
* - Detection of ChArUco board for high subpixel accuracy
|
||||||
|
* - Camera calibration from both, ArUco boards and ChArUco boards.
|
||||||
|
* - Detection of ChArUco diamond markers
|
||||||
|
* The samples directory includes easy examples of how to use the module.
|
||||||
|
*
|
||||||
|
* The implementation is based on the ArUco Library by R. Muñoz-Salinas and S. Garrido-Jurado @cite Aruco2014.
|
||||||
|
*
|
||||||
|
* Markers can also be detected based on the AprilTag 2 @cite wang2016iros fiducial detection method.
|
||||||
|
*
|
||||||
|
* @sa S. Garrido-Jurado, R. Muñoz-Salinas, F. J. Madrid-Cuevas, and M. J. Marín-Jiménez. 2014.
|
||||||
|
* "Automatic generation and detection of highly reliable fiducial markers under occlusion".
|
||||||
|
* Pattern Recogn. 47, 6 (June 2014), 2280-2292. DOI=10.1016/j.patcog.2014.01.005
|
||||||
|
*
|
||||||
|
* @sa http://www.uco.es/investiga/grupos/ava/node/26
|
||||||
|
*
|
||||||
|
* This module has been originally developed by Sergio Garrido-Jurado as a project
|
||||||
|
* for Google Summer of Code 2015 (GSoC 15).
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace cv {
|
||||||
|
namespace aruco {
|
||||||
|
|
||||||
|
//! @addtogroup aruco
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
enum CornerRefineMethod{
|
||||||
|
CORNER_REFINE_NONE, ///< Tag and corners detection based on the ArUco approach
|
||||||
|
CORNER_REFINE_SUBPIX, ///< ArUco approach and refine the corners locations using corner subpixel accuracy
|
||||||
|
CORNER_REFINE_CONTOUR, ///< ArUco approach and refine the corners locations using the contour-points line fitting
|
||||||
|
CORNER_REFINE_APRILTAG, ///< Tag and corners detection based on the AprilTag 2 approach @cite wang2016iros
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Parameters for the detectMarker process:
|
||||||
|
* - adaptiveThreshWinSizeMin: minimum window size for adaptive thresholding before finding
|
||||||
|
* contours (default 3).
|
||||||
|
* - adaptiveThreshWinSizeMax: maximum window size for adaptive thresholding before finding
|
||||||
|
* contours (default 23).
|
||||||
|
* - adaptiveThreshWinSizeStep: increments from adaptiveThreshWinSizeMin to adaptiveThreshWinSizeMax
|
||||||
|
* during the thresholding (default 10).
|
||||||
|
* - adaptiveThreshConstant: constant for adaptive thresholding before finding contours (default 7)
|
||||||
|
* - minMarkerPerimeterRate: determine minimum perimeter for marker contour to be detected. This
|
||||||
|
* is defined as a rate respect to the maximum dimension of the input image (default 0.03).
|
||||||
|
* - maxMarkerPerimeterRate: determine maximum perimeter for marker contour to be detected. This
|
||||||
|
* is defined as a rate respect to the maximum dimension of the input image (default 4.0).
|
||||||
|
* - polygonalApproxAccuracyRate: minimum accuracy during the polygonal approximation process to
|
||||||
|
* determine which contours are squares. (default 0.03)
|
||||||
|
* - minCornerDistanceRate: minimum distance between corners for detected markers relative to its
|
||||||
|
* perimeter (default 0.05)
|
||||||
|
* - minDistanceToBorder: minimum distance of any corner to the image border for detected markers
|
||||||
|
* (in pixels) (default 3)
|
||||||
|
* - minMarkerDistanceRate: minimum mean distance beetween two marker corners to be considered
|
||||||
|
* similar, so that the smaller one is removed. The rate is relative to the smaller perimeter
|
||||||
|
* of the two markers (default 0.05).
|
||||||
|
* - cornerRefinementMethod: corner refinement method. (CORNER_REFINE_NONE, no refinement.
|
||||||
|
* CORNER_REFINE_SUBPIX, do subpixel refinement. CORNER_REFINE_CONTOUR use contour-Points,
|
||||||
|
* CORNER_REFINE_APRILTAG use the AprilTag2 approach). (default CORNER_REFINE_NONE)
|
||||||
|
* - cornerRefinementWinSize: window size for the corner refinement process (in pixels) (default 5).
|
||||||
|
* - cornerRefinementMaxIterations: maximum number of iterations for stop criteria of the corner
|
||||||
|
* refinement process (default 30).
|
||||||
|
* - cornerRefinementMinAccuracy: minimum error for the stop cristeria of the corner refinement
|
||||||
|
* process (default: 0.1)
|
||||||
|
* - markerBorderBits: number of bits of the marker border, i.e. marker border width (default 1).
|
||||||
|
* - perspectiveRemovePixelPerCell: number of bits (per dimension) for each cell of the marker
|
||||||
|
* when removing the perspective (default 4).
|
||||||
|
* - perspectiveRemoveIgnoredMarginPerCell: width of the margin of pixels on each cell not
|
||||||
|
* considered for the determination of the cell bit. Represents the rate respect to the total
|
||||||
|
* size of the cell, i.e. perspectiveRemovePixelPerCell (default 0.13)
|
||||||
|
* - maxErroneousBitsInBorderRate: maximum number of accepted erroneous bits in the border (i.e.
|
||||||
|
* number of allowed white bits in the border). Represented as a rate respect to the total
|
||||||
|
* number of bits per marker (default 0.35).
|
||||||
|
* - minOtsuStdDev: minimun standard deviation in pixels values during the decodification step to
|
||||||
|
* apply Otsu thresholding (otherwise, all the bits are set to 0 or 1 depending on mean higher
|
||||||
|
* than 128 or not) (default 5.0)
|
||||||
|
* - errorCorrectionRate error correction rate respect to the maximun error correction capability
|
||||||
|
* for each dictionary. (default 0.6).
|
||||||
|
* - aprilTagMinClusterPixels: reject quads containing too few pixels. (default 5)
|
||||||
|
* - aprilTagMaxNmaxima: how many corner candidates to consider when segmenting a group of pixels into a quad. (default 10)
|
||||||
|
* - aprilTagCriticalRad: Reject quads where pairs of edges have angles that are close to straight or close to
|
||||||
|
* 180 degrees. Zero means that no quads are rejected. (In radians) (default 10*PI/180)
|
||||||
|
* - aprilTagMaxLineFitMse: When fitting lines to the contours, what is the maximum mean squared error
|
||||||
|
* allowed? This is useful in rejecting contours that are far from being quad shaped; rejecting
|
||||||
|
* these quads "early" saves expensive decoding processing. (default 10.0)
|
||||||
|
* - aprilTagMinWhiteBlackDiff: When we build our model of black & white pixels, we add an extra check that
|
||||||
|
* the white model must be (overall) brighter than the black model. How much brighter? (in pixel values, [0,255]). (default 5)
|
||||||
|
* - aprilTagDeglitch: should the thresholded image be deglitched? Only useful for very noisy images. (default 0)
|
||||||
|
* - aprilTagQuadDecimate: Detection of quads can be done on a lower-resolution image, improving speed at a
|
||||||
|
* cost of pose accuracy and a slight decrease in detection rate. Decoding the binary payload is still
|
||||||
|
* done at full resolution. (default 0.0)
|
||||||
|
* - aprilTagQuadSigma: What Gaussian blur should be applied to the segmented image (used for quad detection?)
|
||||||
|
* Parameter is the standard deviation in pixels. Very noisy images benefit from non-zero values (e.g. 0.8). (default 0.0)
|
||||||
|
* - detectInvertedMarker: to check if there is a white marker. In order to generate a "white" marker just
|
||||||
|
* invert a normal marker by using a tilde, ~markerImage. (default false)
|
||||||
|
*/
|
||||||
|
struct CV_EXPORTS_W DetectorParameters {
|
||||||
|
|
||||||
|
DetectorParameters();
|
||||||
|
|
||||||
|
CV_WRAP static Ptr<DetectorParameters> create();
|
||||||
|
|
||||||
|
CV_PROP_RW int adaptiveThreshWinSizeMin;
|
||||||
|
CV_PROP_RW int adaptiveThreshWinSizeMax;
|
||||||
|
CV_PROP_RW int adaptiveThreshWinSizeStep;
|
||||||
|
CV_PROP_RW double adaptiveThreshConstant;
|
||||||
|
CV_PROP_RW double minMarkerPerimeterRate;
|
||||||
|
CV_PROP_RW double maxMarkerPerimeterRate;
|
||||||
|
CV_PROP_RW double polygonalApproxAccuracyRate;
|
||||||
|
CV_PROP_RW double minCornerDistanceRate;
|
||||||
|
CV_PROP_RW int minDistanceToBorder;
|
||||||
|
CV_PROP_RW double minMarkerDistanceRate;
|
||||||
|
CV_PROP_RW int cornerRefinementMethod;
|
||||||
|
CV_PROP_RW int cornerRefinementWinSize;
|
||||||
|
CV_PROP_RW int cornerRefinementMaxIterations;
|
||||||
|
CV_PROP_RW double cornerRefinementMinAccuracy;
|
||||||
|
CV_PROP_RW int markerBorderBits;
|
||||||
|
CV_PROP_RW int perspectiveRemovePixelPerCell;
|
||||||
|
CV_PROP_RW double perspectiveRemoveIgnoredMarginPerCell;
|
||||||
|
CV_PROP_RW double maxErroneousBitsInBorderRate;
|
||||||
|
CV_PROP_RW double minOtsuStdDev;
|
||||||
|
CV_PROP_RW double errorCorrectionRate;
|
||||||
|
|
||||||
|
// April :: User-configurable parameters.
|
||||||
|
CV_PROP_RW float aprilTagQuadDecimate;
|
||||||
|
CV_PROP_RW float aprilTagQuadSigma;
|
||||||
|
|
||||||
|
// April :: Internal variables
|
||||||
|
CV_PROP_RW int aprilTagMinClusterPixels;
|
||||||
|
CV_PROP_RW int aprilTagMaxNmaxima;
|
||||||
|
CV_PROP_RW float aprilTagCriticalRad;
|
||||||
|
CV_PROP_RW float aprilTagMaxLineFitMse;
|
||||||
|
CV_PROP_RW int aprilTagMinWhiteBlackDiff;
|
||||||
|
CV_PROP_RW int aprilTagDeglitch;
|
||||||
|
|
||||||
|
// to detect white (inverted) markers
|
||||||
|
CV_PROP_RW bool detectInvertedMarker;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Basic marker detection
|
||||||
|
*
|
||||||
|
* @param image input image
|
||||||
|
* @param dictionary indicates the type of markers that will be searched
|
||||||
|
* @param corners vector of detected marker corners. For each marker, its four corners
|
||||||
|
* are provided, (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers,
|
||||||
|
* the dimensions of this array is Nx4. The order of the corners is clockwise.
|
||||||
|
* @param ids vector of identifiers of the detected markers. The identifier is of type int
|
||||||
|
* (e.g. std::vector<int>). For N detected markers, the size of ids is also N.
|
||||||
|
* The identifiers have the same order than the markers in the imgPoints array.
|
||||||
|
* @param parameters marker detection parameters
|
||||||
|
* @param rejectedImgPoints contains the imgPoints of those squares whose inner code has not a
|
||||||
|
* correct codification. Useful for debugging purposes.
|
||||||
|
* @param cameraMatrix optional input 3x3 floating-point camera matrix
|
||||||
|
* \f$A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\f$
|
||||||
|
* @param distCoeff optional vector of distortion coefficients
|
||||||
|
* \f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\f$ of 4, 5, 8 or 12 elements
|
||||||
|
*
|
||||||
|
* Performs marker detection in the input image. Only markers included in the specific dictionary
|
||||||
|
* are searched. For each detected marker, it returns the 2D position of its corner in the image
|
||||||
|
* and its corresponding identifier.
|
||||||
|
* Note that this function does not perform pose estimation.
|
||||||
|
* @sa estimatePoseSingleMarkers, estimatePoseBoard
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void detectMarkers(InputArray image, const Ptr<Dictionary> &dictionary, OutputArrayOfArrays corners,
|
||||||
|
OutputArray ids, const Ptr<DetectorParameters> ¶meters = DetectorParameters::create(),
|
||||||
|
OutputArrayOfArrays rejectedImgPoints = noArray(), InputArray cameraMatrix= noArray(), InputArray distCoeff= noArray());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Pose estimation for single markers
|
||||||
|
*
|
||||||
|
* @param corners vector of already detected markers corners. For each marker, its four corners
|
||||||
|
* are provided, (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers,
|
||||||
|
* the dimensions of this array should be Nx4. The order of the corners should be clockwise.
|
||||||
|
* @sa detectMarkers
|
||||||
|
* @param markerLength the length of the markers' side. The returning translation vectors will
|
||||||
|
* be in the same unit. Normally, unit is meters.
|
||||||
|
* @param cameraMatrix input 3x3 floating-point camera matrix
|
||||||
|
* \f$A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\f$
|
||||||
|
* @param distCoeffs vector of distortion coefficients
|
||||||
|
* \f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\f$ of 4, 5, 8 or 12 elements
|
||||||
|
* @param rvecs array of output rotation vectors (@sa Rodrigues) (e.g. std::vector<cv::Vec3d>).
|
||||||
|
* Each element in rvecs corresponds to the specific marker in imgPoints.
|
||||||
|
* @param tvecs array of output translation vectors (e.g. std::vector<cv::Vec3d>).
|
||||||
|
* Each element in tvecs corresponds to the specific marker in imgPoints.
|
||||||
|
* @param _objPoints array of object points of all the marker corners
|
||||||
|
*
|
||||||
|
* This function receives the detected markers and returns their pose estimation respect to
|
||||||
|
* the camera individually. So for each marker, one rotation and translation vector is returned.
|
||||||
|
* The returned transformation is the one that transforms points from each marker coordinate system
|
||||||
|
* to the camera coordinate system.
|
||||||
|
* The marker corrdinate system is centered on the middle of the marker, with the Z axis
|
||||||
|
* perpendicular to the marker plane.
|
||||||
|
* The coordinates of the four corners of the marker in its own coordinate system are:
|
||||||
|
* (-markerLength/2, markerLength/2, 0), (markerLength/2, markerLength/2, 0),
|
||||||
|
* (markerLength/2, -markerLength/2, 0), (-markerLength/2, -markerLength/2, 0)
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void estimatePoseSingleMarkers(InputArrayOfArrays corners, float markerLength,
|
||||||
|
InputArray cameraMatrix, InputArray distCoeffs,
|
||||||
|
OutputArray rvecs, OutputArray tvecs, OutputArray _objPoints = noArray());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Board of markers
|
||||||
|
*
|
||||||
|
* A board is a set of markers in the 3D space with a common coordinate system.
|
||||||
|
* The common form of a board of marker is a planar (2D) board, however any 3D layout can be used.
|
||||||
|
* A Board object is composed by:
|
||||||
|
* - The object points of the marker corners, i.e. their coordinates respect to the board system.
|
||||||
|
* - The dictionary which indicates the type of markers of the board
|
||||||
|
* - The identifier of all the markers in the board.
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W Board {
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Provide way to create Board by passing necessary data. Specially needed in Python.
|
||||||
|
*
|
||||||
|
* @param objPoints array of object points of all the marker corners in the board
|
||||||
|
* @param dictionary the dictionary of markers employed for this board
|
||||||
|
* @param ids vector of the identifiers of the markers in the board
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
CV_WRAP static Ptr<Board> create(InputArrayOfArrays objPoints, const Ptr<Dictionary> &dictionary, InputArray ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set ids vector
|
||||||
|
*
|
||||||
|
* @param ids vector of the identifiers of the markers in the board (should be the same size
|
||||||
|
* as objPoints)
|
||||||
|
*
|
||||||
|
* Recommended way to set ids vector, which will fail if the size of ids does not match size
|
||||||
|
* of objPoints.
|
||||||
|
*/
|
||||||
|
CV_WRAP void setIds(InputArray ids);
|
||||||
|
|
||||||
|
/// array of object points of all the marker corners in the board
|
||||||
|
/// each marker include its 4 corners in CCW order. For M markers, the size is Mx4.
|
||||||
|
CV_PROP std::vector< std::vector< Point3f > > objPoints;
|
||||||
|
|
||||||
|
/// the dictionary of markers employed for this board
|
||||||
|
CV_PROP Ptr<Dictionary> dictionary;
|
||||||
|
|
||||||
|
/// vector of the identifiers of the markers in the board (same size than objPoints)
|
||||||
|
/// The identifiers refers to the board dictionary
|
||||||
|
CV_PROP_RW std::vector< int > ids;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Planar board with grid arrangement of markers
|
||||||
|
* More common type of board. All markers are placed in the same plane in a grid arrangement.
|
||||||
|
* The board can be drawn using drawPlanarBoard() function (@sa drawPlanarBoard)
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W GridBoard : public Board {
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Draw a GridBoard
|
||||||
|
*
|
||||||
|
* @param outSize size of the output image in pixels.
|
||||||
|
* @param img output image with the board. The size of this image will be outSize
|
||||||
|
* and the board will be on the center, keeping the board proportions.
|
||||||
|
* @param marginSize minimum margins (in pixels) of the board in the output image
|
||||||
|
* @param borderBits width of the marker borders.
|
||||||
|
*
|
||||||
|
* This function return the image of the GridBoard, ready to be printed.
|
||||||
|
*/
|
||||||
|
CV_WRAP void draw(Size outSize, OutputArray img, int marginSize = 0, int borderBits = 1);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Create a GridBoard object
|
||||||
|
*
|
||||||
|
* @param markersX number of markers in X direction
|
||||||
|
* @param markersY number of markers in Y direction
|
||||||
|
* @param markerLength marker side length (normally in meters)
|
||||||
|
* @param markerSeparation separation between two markers (same unit as markerLength)
|
||||||
|
* @param dictionary dictionary of markers indicating the type of markers
|
||||||
|
* @param firstMarker id of first marker in dictionary to use on board.
|
||||||
|
* @return the output GridBoard object
|
||||||
|
*
|
||||||
|
* This functions creates a GridBoard object given the number of markers in each direction and
|
||||||
|
* the marker size and marker separation.
|
||||||
|
*/
|
||||||
|
CV_WRAP static Ptr<GridBoard> create(int markersX, int markersY, float markerLength,
|
||||||
|
float markerSeparation, const Ptr<Dictionary> &dictionary, int firstMarker = 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
CV_WRAP Size getGridSize() const { return Size(_markersX, _markersY); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
CV_WRAP float getMarkerLength() const { return _markerLength; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
CV_WRAP float getMarkerSeparation() const { return _markerSeparation; }
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
// number of markers in X and Y directions
|
||||||
|
int _markersX, _markersY;
|
||||||
|
|
||||||
|
// marker side length (normally in meters)
|
||||||
|
float _markerLength;
|
||||||
|
|
||||||
|
// separation between markers in the grid
|
||||||
|
float _markerSeparation;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Pose estimation for a board of markers
|
||||||
|
*
|
||||||
|
* @param corners vector of already detected markers corners. For each marker, its four corners
|
||||||
|
* are provided, (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers, the
|
||||||
|
* dimensions of this array should be Nx4. The order of the corners should be clockwise.
|
||||||
|
* @param ids list of identifiers for each marker in corners
|
||||||
|
* @param board layout of markers in the board. The layout is composed by the marker identifiers
|
||||||
|
* and the positions of each marker corner in the board reference system.
|
||||||
|
* @param cameraMatrix input 3x3 floating-point camera matrix
|
||||||
|
* \f$A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\f$
|
||||||
|
* @param distCoeffs vector of distortion coefficients
|
||||||
|
* \f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\f$ of 4, 5, 8 or 12 elements
|
||||||
|
* @param rvec Output vector (e.g. cv::Mat) corresponding to the rotation vector of the board
|
||||||
|
* (see cv::Rodrigues). Used as initial guess if not empty.
|
||||||
|
* @param tvec Output vector (e.g. cv::Mat) corresponding to the translation vector of the board.
|
||||||
|
* @param useExtrinsicGuess defines whether initial guess for \b rvec and \b tvec will be used or not.
|
||||||
|
* Used as initial guess if not empty.
|
||||||
|
*
|
||||||
|
* This function receives the detected markers and returns the pose of a marker board composed
|
||||||
|
* by those markers.
|
||||||
|
* A Board of marker has a single world coordinate system which is defined by the board layout.
|
||||||
|
* The returned transformation is the one that transforms points from the board coordinate system
|
||||||
|
* to the camera coordinate system.
|
||||||
|
* Input markers that are not included in the board layout are ignored.
|
||||||
|
* The function returns the number of markers from the input employed for the board pose estimation.
|
||||||
|
* Note that returning a 0 means the pose has not been estimated.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W int estimatePoseBoard(InputArrayOfArrays corners, InputArray ids, const Ptr<Board> &board,
|
||||||
|
InputArray cameraMatrix, InputArray distCoeffs, InputOutputArray rvec,
|
||||||
|
InputOutputArray tvec, bool useExtrinsicGuess = false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Refind not detected markers based on the already detected and the board layout
|
||||||
|
*
|
||||||
|
* @param image input image
|
||||||
|
* @param board layout of markers in the board.
|
||||||
|
* @param detectedCorners vector of already detected marker corners.
|
||||||
|
* @param detectedIds vector of already detected marker identifiers.
|
||||||
|
* @param rejectedCorners vector of rejected candidates during the marker detection process.
|
||||||
|
* @param cameraMatrix optional input 3x3 floating-point camera matrix
|
||||||
|
* \f$A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\f$
|
||||||
|
* @param distCoeffs optional vector of distortion coefficients
|
||||||
|
* \f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\f$ of 4, 5, 8 or 12 elements
|
||||||
|
* @param minRepDistance minimum distance between the corners of the rejected candidate and the
|
||||||
|
* reprojected marker in order to consider it as a correspondence.
|
||||||
|
* @param errorCorrectionRate rate of allowed erroneous bits respect to the error correction
|
||||||
|
* capability of the used dictionary. -1 ignores the error correction step.
|
||||||
|
* @param checkAllOrders Consider the four posible corner orders in the rejectedCorners array.
|
||||||
|
* If it set to false, only the provided corner order is considered (default true).
|
||||||
|
* @param recoveredIdxs Optional array to returns the indexes of the recovered candidates in the
|
||||||
|
* original rejectedCorners array.
|
||||||
|
* @param parameters marker detection parameters
|
||||||
|
*
|
||||||
|
* This function tries to find markers that were not detected in the basic detecMarkers function.
|
||||||
|
* First, based on the current detected marker and the board layout, the function interpolates
|
||||||
|
* the position of the missing markers. Then it tries to find correspondence between the reprojected
|
||||||
|
* markers and the rejected candidates based on the minRepDistance and errorCorrectionRate
|
||||||
|
* parameters.
|
||||||
|
* If camera parameters and distortion coefficients are provided, missing markers are reprojected
|
||||||
|
* using projectPoint function. If not, missing marker projections are interpolated using global
|
||||||
|
* homography, and all the marker corners in the board must have the same Z coordinate.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void refineDetectedMarkers(
|
||||||
|
InputArray image,const Ptr<Board> &board, InputOutputArrayOfArrays detectedCorners,
|
||||||
|
InputOutputArray detectedIds, InputOutputArrayOfArrays rejectedCorners,
|
||||||
|
InputArray cameraMatrix = noArray(), InputArray distCoeffs = noArray(),
|
||||||
|
float minRepDistance = 10.f, float errorCorrectionRate = 3.f, bool checkAllOrders = true,
|
||||||
|
OutputArray recoveredIdxs = noArray(), const Ptr<DetectorParameters> ¶meters = DetectorParameters::create());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Draw detected markers in image
|
||||||
|
*
|
||||||
|
* @param image input/output image. It must have 1 or 3 channels. The number of channels is not
|
||||||
|
* altered.
|
||||||
|
* @param corners positions of marker corners on input image.
|
||||||
|
* (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers, the dimensions of
|
||||||
|
* this array should be Nx4. The order of the corners should be clockwise.
|
||||||
|
* @param ids vector of identifiers for markers in markersCorners .
|
||||||
|
* Optional, if not provided, ids are not painted.
|
||||||
|
* @param borderColor color of marker borders. Rest of colors (text color and first corner color)
|
||||||
|
* are calculated based on this one to improve visualization.
|
||||||
|
*
|
||||||
|
* Given an array of detected marker corners and its corresponding ids, this functions draws
|
||||||
|
* the markers in the image. The marker borders are painted and the markers identifiers if provided.
|
||||||
|
* Useful for debugging purposes.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void drawDetectedMarkers(InputOutputArray image, InputArrayOfArrays corners,
|
||||||
|
InputArray ids = noArray(),
|
||||||
|
Scalar borderColor = Scalar(0, 255, 0));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Draw coordinate system axis from pose estimation
|
||||||
|
*
|
||||||
|
* @param image input/output image. It must have 1 or 3 channels. The number of channels is not
|
||||||
|
* altered.
|
||||||
|
* @param cameraMatrix input 3x3 floating-point camera matrix
|
||||||
|
* \f$A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\f$
|
||||||
|
* @param distCoeffs vector of distortion coefficients
|
||||||
|
* \f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\f$ of 4, 5, 8 or 12 elements
|
||||||
|
* @param rvec rotation vector of the coordinate system that will be drawn. (@sa Rodrigues).
|
||||||
|
* @param tvec translation vector of the coordinate system that will be drawn.
|
||||||
|
* @param length length of the painted axis in the same unit than tvec (usually in meters)
|
||||||
|
*
|
||||||
|
* Given the pose estimation of a marker or board, this function draws the axis of the world
|
||||||
|
* coordinate system, i.e. the system centered on the marker/board. Useful for debugging purposes.
|
||||||
|
*
|
||||||
|
* @deprecated use cv::drawFrameAxes
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void drawAxis(InputOutputArray image, InputArray cameraMatrix, InputArray distCoeffs,
|
||||||
|
InputArray rvec, InputArray tvec, float length);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Draw a canonical marker image
|
||||||
|
*
|
||||||
|
* @param dictionary dictionary of markers indicating the type of markers
|
||||||
|
* @param id identifier of the marker that will be returned. It has to be a valid id
|
||||||
|
* in the specified dictionary.
|
||||||
|
* @param sidePixels size of the image in pixels
|
||||||
|
* @param img output image with the marker
|
||||||
|
* @param borderBits width of the marker border.
|
||||||
|
*
|
||||||
|
* This function returns a marker image in its canonical form (i.e. ready to be printed)
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void drawMarker(const Ptr<Dictionary> &dictionary, int id, int sidePixels, OutputArray img,
|
||||||
|
int borderBits = 1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Draw a planar board
|
||||||
|
* @sa _drawPlanarBoardImpl
|
||||||
|
*
|
||||||
|
* @param board layout of the board that will be drawn. The board should be planar,
|
||||||
|
* z coordinate is ignored
|
||||||
|
* @param outSize size of the output image in pixels.
|
||||||
|
* @param img output image with the board. The size of this image will be outSize
|
||||||
|
* and the board will be on the center, keeping the board proportions.
|
||||||
|
* @param marginSize minimum margins (in pixels) of the board in the output image
|
||||||
|
* @param borderBits width of the marker borders.
|
||||||
|
*
|
||||||
|
* This function return the image of a planar board, ready to be printed. It assumes
|
||||||
|
* the Board layout specified is planar by ignoring the z coordinates of the object points.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void drawPlanarBoard(const Ptr<Board> &board, Size outSize, OutputArray img,
|
||||||
|
int marginSize = 0, int borderBits = 1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Implementation of drawPlanarBoard that accepts a raw Board pointer.
|
||||||
|
*/
|
||||||
|
void _drawPlanarBoardImpl(Board *board, Size outSize, OutputArray img,
|
||||||
|
int marginSize = 0, int borderBits = 1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Calibrate a camera using aruco markers
|
||||||
|
*
|
||||||
|
* @param corners vector of detected marker corners in all frames.
|
||||||
|
* The corners should have the same format returned by detectMarkers (see #detectMarkers).
|
||||||
|
* @param ids list of identifiers for each marker in corners
|
||||||
|
* @param counter number of markers in each frame so that corners and ids can be split
|
||||||
|
* @param board Marker Board layout
|
||||||
|
* @param imageSize Size of the image used only to initialize the intrinsic camera matrix.
|
||||||
|
* @param cameraMatrix Output 3x3 floating-point camera matrix
|
||||||
|
* \f$A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\f$ . If CV\_CALIB\_USE\_INTRINSIC\_GUESS
|
||||||
|
* and/or CV_CALIB_FIX_ASPECT_RATIO are specified, some or all of fx, fy, cx, cy must be
|
||||||
|
* initialized before calling the function.
|
||||||
|
* @param distCoeffs Output vector of distortion coefficients
|
||||||
|
* \f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\f$ of 4, 5, 8 or 12 elements
|
||||||
|
* @param rvecs Output vector of rotation vectors (see Rodrigues ) estimated for each board view
|
||||||
|
* (e.g. std::vector<cv::Mat>>). That is, each k-th rotation vector together with the corresponding
|
||||||
|
* k-th translation vector (see the next output parameter description) brings the board pattern
|
||||||
|
* from the model coordinate space (in which object points are specified) to the world coordinate
|
||||||
|
* space, that is, a real position of the board pattern in the k-th pattern view (k=0.. *M* -1).
|
||||||
|
* @param tvecs Output vector of translation vectors estimated for each pattern view.
|
||||||
|
* @param stdDeviationsIntrinsics Output vector of standard deviations estimated for intrinsic parameters.
|
||||||
|
* Order of deviations values:
|
||||||
|
* \f$(f_x, f_y, c_x, c_y, k_1, k_2, p_1, p_2, k_3, k_4, k_5, k_6 , s_1, s_2, s_3,
|
||||||
|
* s_4, \tau_x, \tau_y)\f$ If one of parameters is not estimated, it's deviation is equals to zero.
|
||||||
|
* @param stdDeviationsExtrinsics Output vector of standard deviations estimated for extrinsic parameters.
|
||||||
|
* Order of deviations values: \f$(R_1, T_1, \dotsc , R_M, T_M)\f$ where M is number of pattern views,
|
||||||
|
* \f$R_i, T_i\f$ are concatenated 1x3 vectors.
|
||||||
|
* @param perViewErrors Output vector of average re-projection errors estimated for each pattern view.
|
||||||
|
* @param flags flags Different flags for the calibration process (see #calibrateCamera for details).
|
||||||
|
* @param criteria Termination criteria for the iterative optimization algorithm.
|
||||||
|
*
|
||||||
|
* This function calibrates a camera using an Aruco Board. The function receives a list of
|
||||||
|
* detected markers from several views of the Board. The process is similar to the chessboard
|
||||||
|
* calibration in calibrateCamera(). The function returns the final re-projection error.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_AS(calibrateCameraArucoExtended) double calibrateCameraAruco(
|
||||||
|
InputArrayOfArrays corners, InputArray ids, InputArray counter, const Ptr<Board> &board,
|
||||||
|
Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs,
|
||||||
|
OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs,
|
||||||
|
OutputArray stdDeviationsIntrinsics, OutputArray stdDeviationsExtrinsics,
|
||||||
|
OutputArray perViewErrors, int flags = 0,
|
||||||
|
TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 30, DBL_EPSILON));
|
||||||
|
|
||||||
|
|
||||||
|
/** @brief It's the same function as #calibrateCameraAruco but without calibration error estimation.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W double calibrateCameraAruco(
|
||||||
|
InputArrayOfArrays corners, InputArray ids, InputArray counter, const Ptr<Board> &board,
|
||||||
|
Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs,
|
||||||
|
OutputArrayOfArrays rvecs = noArray(), OutputArrayOfArrays tvecs = noArray(), int flags = 0,
|
||||||
|
TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 30, DBL_EPSILON));
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Given a board configuration and a set of detected markers, returns the corresponding
|
||||||
|
* image points and object points to call solvePnP
|
||||||
|
*
|
||||||
|
* @param board Marker board layout.
|
||||||
|
* @param detectedCorners List of detected marker corners of the board.
|
||||||
|
* @param detectedIds List of identifiers for each marker.
|
||||||
|
* @param objPoints Vector of vectors of board marker points in the board coordinate space.
|
||||||
|
* @param imgPoints Vector of vectors of the projections of board marker corner points.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void getBoardObjectAndImagePoints(const Ptr<Board> &board, InputArrayOfArrays detectedCorners,
|
||||||
|
InputArray detectedIds, OutputArray objPoints, OutputArray imgPoints);
|
||||||
|
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
353
3rdparty/opencv/inc/opencv2/aruco/charuco.hpp
vendored
Normal file
353
3rdparty/opencv/inc/opencv2/aruco/charuco.hpp
vendored
Normal file
@ -0,0 +1,353 @@
|
|||||||
|
/*
|
||||||
|
By downloading, copying, installing or using the software you agree to this
|
||||||
|
license. If you do not agree to this license, do not download, install,
|
||||||
|
copy or use the software.
|
||||||
|
|
||||||
|
License Agreement
|
||||||
|
For Open Source Computer Vision Library
|
||||||
|
(3-clause BSD License)
|
||||||
|
|
||||||
|
Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
|
Third party copyrights are property of their respective owners.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the names of the copyright holders nor the names of the contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
|
||||||
|
This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
any express or implied warranties, including, but not limited to, the implied
|
||||||
|
warranties of merchantability and fitness for a particular purpose are
|
||||||
|
disclaimed. In no event shall copyright holders or contributors be liable for
|
||||||
|
any direct, indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
(including, but not limited to, procurement of substitute goods or services;
|
||||||
|
loss of use, data, or profits; or business interruption) however caused
|
||||||
|
and on any theory of liability, whether in contract, strict liability,
|
||||||
|
or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
the use of this software, even if advised of the possibility of such damage.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __OPENCV_CHARUCO_HPP__
|
||||||
|
#define __OPENCV_CHARUCO_HPP__
|
||||||
|
|
||||||
|
#include <opencv2/core.hpp>
|
||||||
|
#include <vector>
|
||||||
|
#include <opencv2/aruco.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
namespace cv {
|
||||||
|
namespace aruco {
|
||||||
|
|
||||||
|
//! @addtogroup aruco
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ChArUco board
|
||||||
|
* Specific class for ChArUco boards. A ChArUco board is a planar board where the markers are placed
|
||||||
|
* inside the white squares of a chessboard. The benefits of ChArUco boards is that they provide
|
||||||
|
* both, ArUco markers versatility and chessboard corner precision, which is important for
|
||||||
|
* calibration and pose estimation.
|
||||||
|
* This class also allows the easy creation and drawing of ChArUco boards.
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W CharucoBoard : public Board {
|
||||||
|
|
||||||
|
public:
|
||||||
|
// vector of chessboard 3D corners precalculated
|
||||||
|
CV_PROP std::vector< Point3f > chessboardCorners;
|
||||||
|
|
||||||
|
// for each charuco corner, nearest marker id and nearest marker corner id of each marker
|
||||||
|
CV_PROP std::vector< std::vector< int > > nearestMarkerIdx;
|
||||||
|
CV_PROP std::vector< std::vector< int > > nearestMarkerCorners;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Draw a ChArUco board
|
||||||
|
*
|
||||||
|
* @param outSize size of the output image in pixels.
|
||||||
|
* @param img output image with the board. The size of this image will be outSize
|
||||||
|
* and the board will be on the center, keeping the board proportions.
|
||||||
|
* @param marginSize minimum margins (in pixels) of the board in the output image
|
||||||
|
* @param borderBits width of the marker borders.
|
||||||
|
*
|
||||||
|
* This function return the image of the ChArUco board, ready to be printed.
|
||||||
|
*/
|
||||||
|
CV_WRAP void draw(Size outSize, OutputArray img, int marginSize = 0, int borderBits = 1);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Create a CharucoBoard object
|
||||||
|
*
|
||||||
|
* @param squaresX number of chessboard squares in X direction
|
||||||
|
* @param squaresY number of chessboard squares in Y direction
|
||||||
|
* @param squareLength chessboard square side length (normally in meters)
|
||||||
|
* @param markerLength marker side length (same unit than squareLength)
|
||||||
|
* @param dictionary dictionary of markers indicating the type of markers.
|
||||||
|
* The first markers in the dictionary are used to fill the white chessboard squares.
|
||||||
|
* @return the output CharucoBoard object
|
||||||
|
*
|
||||||
|
* This functions creates a CharucoBoard object given the number of squares in each direction
|
||||||
|
* and the size of the markers and chessboard squares.
|
||||||
|
*/
|
||||||
|
CV_WRAP static Ptr<CharucoBoard> create(int squaresX, int squaresY, float squareLength,
|
||||||
|
float markerLength, const Ptr<Dictionary> &dictionary);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
CV_WRAP Size getChessboardSize() const { return Size(_squaresX, _squaresY); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
CV_WRAP float getSquareLength() const { return _squareLength; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
CV_WRAP float getMarkerLength() const { return _markerLength; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
void _getNearestMarkerCorners();
|
||||||
|
|
||||||
|
// number of markers in X and Y directions
|
||||||
|
int _squaresX, _squaresY;
|
||||||
|
|
||||||
|
// size of chessboard squares side (normally in meters)
|
||||||
|
float _squareLength;
|
||||||
|
|
||||||
|
// marker side length (normally in meters)
|
||||||
|
float _markerLength;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Interpolate position of ChArUco board corners
|
||||||
|
* @param markerCorners vector of already detected markers corners. For each marker, its four
|
||||||
|
* corners are provided, (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers, the
|
||||||
|
* dimensions of this array should be Nx4. The order of the corners should be clockwise.
|
||||||
|
* @param markerIds list of identifiers for each marker in corners
|
||||||
|
* @param image input image necesary for corner refinement. Note that markers are not detected and
|
||||||
|
* should be sent in corners and ids parameters.
|
||||||
|
* @param board layout of ChArUco board.
|
||||||
|
* @param charucoCorners interpolated chessboard corners
|
||||||
|
* @param charucoIds interpolated chessboard corners identifiers
|
||||||
|
* @param cameraMatrix optional 3x3 floating-point camera matrix
|
||||||
|
* \f$A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\f$
|
||||||
|
* @param distCoeffs optional vector of distortion coefficients
|
||||||
|
* \f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\f$ of 4, 5, 8 or 12 elements
|
||||||
|
* @param minMarkers number of adjacent markers that must be detected to return a charuco corner
|
||||||
|
*
|
||||||
|
* This function receives the detected markers and returns the 2D position of the chessboard corners
|
||||||
|
* from a ChArUco board using the detected Aruco markers. If camera parameters are provided,
|
||||||
|
* the process is based in an approximated pose estimation, else it is based on local homography.
|
||||||
|
* Only visible corners are returned. For each corner, its corresponding identifier is
|
||||||
|
* also returned in charucoIds.
|
||||||
|
* The function returns the number of interpolated corners.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W int interpolateCornersCharuco(InputArrayOfArrays markerCorners, InputArray markerIds,
|
||||||
|
InputArray image, const Ptr<CharucoBoard> &board,
|
||||||
|
OutputArray charucoCorners, OutputArray charucoIds,
|
||||||
|
InputArray cameraMatrix = noArray(),
|
||||||
|
InputArray distCoeffs = noArray(), int minMarkers = 2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Pose estimation for a ChArUco board given some of their corners
|
||||||
|
* @param charucoCorners vector of detected charuco corners
|
||||||
|
* @param charucoIds list of identifiers for each corner in charucoCorners
|
||||||
|
* @param board layout of ChArUco board.
|
||||||
|
* @param cameraMatrix input 3x3 floating-point camera matrix
|
||||||
|
* \f$A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\f$
|
||||||
|
* @param distCoeffs vector of distortion coefficients
|
||||||
|
* \f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\f$ of 4, 5, 8 or 12 elements
|
||||||
|
* @param rvec Output vector (e.g. cv::Mat) corresponding to the rotation vector of the board
|
||||||
|
* (see cv::Rodrigues).
|
||||||
|
* @param tvec Output vector (e.g. cv::Mat) corresponding to the translation vector of the board.
|
||||||
|
* @param useExtrinsicGuess defines whether initial guess for \b rvec and \b tvec will be used or not.
|
||||||
|
*
|
||||||
|
* This function estimates a Charuco board pose from some detected corners.
|
||||||
|
* The function checks if the input corners are enough and valid to perform pose estimation.
|
||||||
|
* If pose estimation is valid, returns true, else returns false.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W bool estimatePoseCharucoBoard(InputArray charucoCorners, InputArray charucoIds,
|
||||||
|
const Ptr<CharucoBoard> &board, InputArray cameraMatrix,
|
||||||
|
InputArray distCoeffs, InputOutputArray rvec,
|
||||||
|
InputOutputArray tvec, bool useExtrinsicGuess = false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Draws a set of Charuco corners
|
||||||
|
* @param image input/output image. It must have 1 or 3 channels. The number of channels is not
|
||||||
|
* altered.
|
||||||
|
* @param charucoCorners vector of detected charuco corners
|
||||||
|
* @param charucoIds list of identifiers for each corner in charucoCorners
|
||||||
|
* @param cornerColor color of the square surrounding each corner
|
||||||
|
*
|
||||||
|
* This function draws a set of detected Charuco corners. If identifiers vector is provided, it also
|
||||||
|
* draws the id of each corner.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void drawDetectedCornersCharuco(InputOutputArray image, InputArray charucoCorners,
|
||||||
|
InputArray charucoIds = noArray(),
|
||||||
|
Scalar cornerColor = Scalar(255, 0, 0));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Calibrate a camera using Charuco corners
|
||||||
|
*
|
||||||
|
* @param charucoCorners vector of detected charuco corners per frame
|
||||||
|
* @param charucoIds list of identifiers for each corner in charucoCorners per frame
|
||||||
|
* @param board Marker Board layout
|
||||||
|
* @param imageSize input image size
|
||||||
|
* @param cameraMatrix Output 3x3 floating-point camera matrix
|
||||||
|
* \f$A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\f$ . If CV\_CALIB\_USE\_INTRINSIC\_GUESS
|
||||||
|
* and/or CV_CALIB_FIX_ASPECT_RATIO are specified, some or all of fx, fy, cx, cy must be
|
||||||
|
* initialized before calling the function.
|
||||||
|
* @param distCoeffs Output vector of distortion coefficients
|
||||||
|
* \f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\f$ of 4, 5, 8 or 12 elements
|
||||||
|
* @param rvecs Output vector of rotation vectors (see Rodrigues ) estimated for each board view
|
||||||
|
* (e.g. std::vector<cv::Mat>>). That is, each k-th rotation vector together with the corresponding
|
||||||
|
* k-th translation vector (see the next output parameter description) brings the board pattern
|
||||||
|
* from the model coordinate space (in which object points are specified) to the world coordinate
|
||||||
|
* space, that is, a real position of the board pattern in the k-th pattern view (k=0.. *M* -1).
|
||||||
|
* @param tvecs Output vector of translation vectors estimated for each pattern view.
|
||||||
|
* @param stdDeviationsIntrinsics Output vector of standard deviations estimated for intrinsic parameters.
|
||||||
|
* Order of deviations values:
|
||||||
|
* \f$(f_x, f_y, c_x, c_y, k_1, k_2, p_1, p_2, k_3, k_4, k_5, k_6 , s_1, s_2, s_3,
|
||||||
|
* s_4, \tau_x, \tau_y)\f$ If one of parameters is not estimated, it's deviation is equals to zero.
|
||||||
|
* @param stdDeviationsExtrinsics Output vector of standard deviations estimated for extrinsic parameters.
|
||||||
|
* Order of deviations values: \f$(R_1, T_1, \dotsc , R_M, T_M)\f$ where M is number of pattern views,
|
||||||
|
* \f$R_i, T_i\f$ are concatenated 1x3 vectors.
|
||||||
|
* @param perViewErrors Output vector of average re-projection errors estimated for each pattern view.
|
||||||
|
* @param flags flags Different flags for the calibration process (see #calibrateCamera for details).
|
||||||
|
* @param criteria Termination criteria for the iterative optimization algorithm.
|
||||||
|
*
|
||||||
|
* This function calibrates a camera using a set of corners of a Charuco Board. The function
|
||||||
|
* receives a list of detected corners and its identifiers from several views of the Board.
|
||||||
|
* The function returns the final re-projection error.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_AS(calibrateCameraCharucoExtended) double calibrateCameraCharuco(
|
||||||
|
InputArrayOfArrays charucoCorners, InputArrayOfArrays charucoIds, const Ptr<CharucoBoard> &board,
|
||||||
|
Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs,
|
||||||
|
OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs,
|
||||||
|
OutputArray stdDeviationsIntrinsics, OutputArray stdDeviationsExtrinsics,
|
||||||
|
OutputArray perViewErrors, int flags = 0,
|
||||||
|
TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 30, DBL_EPSILON));
|
||||||
|
|
||||||
|
/** @brief It's the same function as #calibrateCameraCharuco but without calibration error estimation.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W double calibrateCameraCharuco(
|
||||||
|
InputArrayOfArrays charucoCorners, InputArrayOfArrays charucoIds, const Ptr<CharucoBoard> &board,
|
||||||
|
Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs,
|
||||||
|
OutputArrayOfArrays rvecs = noArray(), OutputArrayOfArrays tvecs = noArray(), int flags = 0,
|
||||||
|
TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 30, DBL_EPSILON));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Detect ChArUco Diamond markers
|
||||||
|
*
|
||||||
|
* @param image input image necessary for corner subpixel.
|
||||||
|
* @param markerCorners list of detected marker corners from detectMarkers function.
|
||||||
|
* @param markerIds list of marker ids in markerCorners.
|
||||||
|
* @param squareMarkerLengthRate rate between square and marker length:
|
||||||
|
* squareMarkerLengthRate = squareLength/markerLength. The real units are not necessary.
|
||||||
|
* @param diamondCorners output list of detected diamond corners (4 corners per diamond). The order
|
||||||
|
* is the same than in marker corners: top left, top right, bottom right and bottom left. Similar
|
||||||
|
* format than the corners returned by detectMarkers (e.g std::vector<std::vector<cv::Point2f> > ).
|
||||||
|
* @param diamondIds ids of the diamonds in diamondCorners. The id of each diamond is in fact of
|
||||||
|
* type Vec4i, so each diamond has 4 ids, which are the ids of the aruco markers composing the
|
||||||
|
* diamond.
|
||||||
|
* @param cameraMatrix Optional camera calibration matrix.
|
||||||
|
* @param distCoeffs Optional camera distortion coefficients.
|
||||||
|
*
|
||||||
|
* This function detects Diamond markers from the previous detected ArUco markers. The diamonds
|
||||||
|
* are returned in the diamondCorners and diamondIds parameters. If camera calibration parameters
|
||||||
|
* are provided, the diamond search is based on reprojection. If not, diamond search is based on
|
||||||
|
* homography. Homography is faster than reprojection but can slightly reduce the detection rate.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void detectCharucoDiamond(InputArray image, InputArrayOfArrays markerCorners,
|
||||||
|
InputArray markerIds, float squareMarkerLengthRate,
|
||||||
|
OutputArrayOfArrays diamondCorners, OutputArray diamondIds,
|
||||||
|
InputArray cameraMatrix = noArray(),
|
||||||
|
InputArray distCoeffs = noArray());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Draw a set of detected ChArUco Diamond markers
|
||||||
|
*
|
||||||
|
* @param image input/output image. It must have 1 or 3 channels. The number of channels is not
|
||||||
|
* altered.
|
||||||
|
* @param diamondCorners positions of diamond corners in the same format returned by
|
||||||
|
* detectCharucoDiamond(). (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers,
|
||||||
|
* the dimensions of this array should be Nx4. The order of the corners should be clockwise.
|
||||||
|
* @param diamondIds vector of identifiers for diamonds in diamondCorners, in the same format
|
||||||
|
* returned by detectCharucoDiamond() (e.g. std::vector<Vec4i>).
|
||||||
|
* Optional, if not provided, ids are not painted.
|
||||||
|
* @param borderColor color of marker borders. Rest of colors (text color and first corner color)
|
||||||
|
* are calculated based on this one.
|
||||||
|
*
|
||||||
|
* Given an array of detected diamonds, this functions draws them in the image. The marker borders
|
||||||
|
* are painted and the markers identifiers if provided.
|
||||||
|
* Useful for debugging purposes.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void drawDetectedDiamonds(InputOutputArray image, InputArrayOfArrays diamondCorners,
|
||||||
|
InputArray diamondIds = noArray(),
|
||||||
|
Scalar borderColor = Scalar(0, 0, 255));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Draw a ChArUco Diamond marker
|
||||||
|
*
|
||||||
|
* @param dictionary dictionary of markers indicating the type of markers.
|
||||||
|
* @param ids list of 4 ids for each ArUco marker in the ChArUco marker.
|
||||||
|
* @param squareLength size of the chessboard squares in pixels.
|
||||||
|
* @param markerLength size of the markers in pixels.
|
||||||
|
* @param img output image with the marker. The size of this image will be
|
||||||
|
* 3*squareLength + 2*marginSize,.
|
||||||
|
* @param marginSize minimum margins (in pixels) of the marker in the output image
|
||||||
|
* @param borderBits width of the marker borders.
|
||||||
|
*
|
||||||
|
* This function return the image of a ChArUco marker, ready to be printed.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void drawCharucoDiamond(const Ptr<Dictionary> &dictionary, Vec4i ids, int squareLength,
|
||||||
|
int markerLength, OutputArray img, int marginSize = 0,
|
||||||
|
int borderBits = 1);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief test whether the ChArUco markers are collinear
|
||||||
|
*
|
||||||
|
* @param _board layout of ChArUco board.
|
||||||
|
* @param _charucoIds list of identifiers for each corner in charucoCorners per frame.
|
||||||
|
* @return bool value, 1 (true) if detected corners form a line, 0 (false) if they do not.
|
||||||
|
solvePnP, calibration functions will fail if the corners are collinear (true).
|
||||||
|
*
|
||||||
|
* The number of ids in charucoIDs should be <= the number of chessboard corners in the board. This functions checks whether the charuco corners are on a straight line (returns true, if so), or not (false). Axis parallel, as well as diagonal and other straight lines detected. Degenerate cases: for number of charucoIDs <= 2, the function returns true.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W bool testCharucoCornersCollinear(const Ptr<CharucoBoard> &_board,
|
||||||
|
InputArray _charucoIds);
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
212
3rdparty/opencv/inc/opencv2/aruco/dictionary.hpp
vendored
Normal file
212
3rdparty/opencv/inc/opencv2/aruco/dictionary.hpp
vendored
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
/*
|
||||||
|
By downloading, copying, installing or using the software you agree to this
|
||||||
|
license. If you do not agree to this license, do not download, install,
|
||||||
|
copy or use the software.
|
||||||
|
|
||||||
|
License Agreement
|
||||||
|
For Open Source Computer Vision Library
|
||||||
|
(3-clause BSD License)
|
||||||
|
|
||||||
|
Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
|
Third party copyrights are property of their respective owners.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the names of the copyright holders nor the names of the contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
|
||||||
|
This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
any express or implied warranties, including, but not limited to, the implied
|
||||||
|
warranties of merchantability and fitness for a particular purpose are
|
||||||
|
disclaimed. In no event shall copyright holders or contributors be liable for
|
||||||
|
any direct, indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
(including, but not limited to, procurement of substitute goods or services;
|
||||||
|
loss of use, data, or profits; or business interruption) however caused
|
||||||
|
and on any theory of liability, whether in contract, strict liability,
|
||||||
|
or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
the use of this software, even if advised of the possibility of such damage.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __OPENCV_DICTIONARY_HPP__
|
||||||
|
#define __OPENCV_DICTIONARY_HPP__
|
||||||
|
|
||||||
|
#include <opencv2/core.hpp>
|
||||||
|
|
||||||
|
namespace cv {
|
||||||
|
namespace aruco {
|
||||||
|
|
||||||
|
//! @addtogroup aruco
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Dictionary/Set of markers. It contains the inner codification
|
||||||
|
*
|
||||||
|
* bytesList contains the marker codewords where
|
||||||
|
* - bytesList.rows is the dictionary size
|
||||||
|
* - each marker is encoded using `nbytes = ceil(markerSize*markerSize/8.)`
|
||||||
|
* - each row contains all 4 rotations of the marker, so its length is `4*nbytes`
|
||||||
|
*
|
||||||
|
* `bytesList.ptr(i)[k*nbytes + j]` is then the j-th byte of i-th marker, in its k-th rotation.
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W Dictionary {
|
||||||
|
|
||||||
|
public:
|
||||||
|
CV_PROP_RW Mat bytesList; // marker code information
|
||||||
|
CV_PROP_RW int markerSize; // number of bits per dimension
|
||||||
|
CV_PROP_RW int maxCorrectionBits; // maximum number of bits that can be corrected
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
Dictionary(const Mat &_bytesList = Mat(), int _markerSize = 0, int _maxcorr = 0);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Dictionary(const Dictionary &_dictionary);
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
Dictionary(const Ptr<Dictionary> &_dictionary);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see generateCustomDictionary
|
||||||
|
*/
|
||||||
|
CV_WRAP_AS(create) static Ptr<Dictionary> create(int nMarkers, int markerSize, int randomSeed=0);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see generateCustomDictionary
|
||||||
|
*/
|
||||||
|
CV_WRAP_AS(create_from) static Ptr<Dictionary> create(int nMarkers, int markerSize,
|
||||||
|
const Ptr<Dictionary> &baseDictionary, int randomSeed=0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see getPredefinedDictionary
|
||||||
|
*/
|
||||||
|
CV_WRAP static Ptr<Dictionary> get(int dict);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Given a matrix of bits. Returns whether if marker is identified or not.
|
||||||
|
* It returns by reference the correct id (if any) and the correct rotation
|
||||||
|
*/
|
||||||
|
bool identify(const Mat &onlyBits, int &idx, int &rotation, double maxCorrectionRate) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the distance of the input bits to the specific id. If allRotations is true,
|
||||||
|
* the four posible bits rotation are considered
|
||||||
|
*/
|
||||||
|
int getDistanceToId(InputArray bits, int id, bool allRotations = true) const;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Draw a canonical marker image
|
||||||
|
*/
|
||||||
|
CV_WRAP void drawMarker(int id, int sidePixels, OutputArray _img, int borderBits = 1) const;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Transform matrix of bits to list of bytes in the 4 rotations
|
||||||
|
*/
|
||||||
|
CV_WRAP static Mat getByteListFromBits(const Mat &bits);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Transform list of bytes to matrix of bits
|
||||||
|
*/
|
||||||
|
CV_WRAP static Mat getBitsFromByteList(const Mat &byteList, int markerSize);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Predefined markers dictionaries/sets
|
||||||
|
* Each dictionary indicates the number of bits and the number of markers contained
|
||||||
|
* - DICT_ARUCO_ORIGINAL: standard ArUco Library Markers. 1024 markers, 5x5 bits, 0 minimum
|
||||||
|
distance
|
||||||
|
*/
|
||||||
|
enum PREDEFINED_DICTIONARY_NAME {
|
||||||
|
DICT_4X4_50 = 0,
|
||||||
|
DICT_4X4_100,
|
||||||
|
DICT_4X4_250,
|
||||||
|
DICT_4X4_1000,
|
||||||
|
DICT_5X5_50,
|
||||||
|
DICT_5X5_100,
|
||||||
|
DICT_5X5_250,
|
||||||
|
DICT_5X5_1000,
|
||||||
|
DICT_6X6_50,
|
||||||
|
DICT_6X6_100,
|
||||||
|
DICT_6X6_250,
|
||||||
|
DICT_6X6_1000,
|
||||||
|
DICT_7X7_50,
|
||||||
|
DICT_7X7_100,
|
||||||
|
DICT_7X7_250,
|
||||||
|
DICT_7X7_1000,
|
||||||
|
DICT_ARUCO_ORIGINAL,
|
||||||
|
DICT_APRILTAG_16h5, ///< 4x4 bits, minimum hamming distance between any two codes = 5, 30 codes
|
||||||
|
DICT_APRILTAG_25h9, ///< 5x5 bits, minimum hamming distance between any two codes = 9, 35 codes
|
||||||
|
DICT_APRILTAG_36h10, ///< 6x6 bits, minimum hamming distance between any two codes = 10, 2320 codes
|
||||||
|
DICT_APRILTAG_36h11 ///< 6x6 bits, minimum hamming distance between any two codes = 11, 587 codes
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns one of the predefined dictionaries defined in PREDEFINED_DICTIONARY_NAME
|
||||||
|
*/
|
||||||
|
CV_EXPORTS Ptr<Dictionary> getPredefinedDictionary(PREDEFINED_DICTIONARY_NAME name);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns one of the predefined dictionaries referenced by DICT_*.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W Ptr<Dictionary> getPredefinedDictionary(int dict);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see generateCustomDictionary
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_AS(custom_dictionary) Ptr<Dictionary> generateCustomDictionary(
|
||||||
|
int nMarkers,
|
||||||
|
int markerSize,
|
||||||
|
int randomSeed=0);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Generates a new customizable marker dictionary
|
||||||
|
*
|
||||||
|
* @param nMarkers number of markers in the dictionary
|
||||||
|
* @param markerSize number of bits per dimension of each markers
|
||||||
|
* @param baseDictionary Include the markers in this dictionary at the beginning (optional)
|
||||||
|
* @param randomSeed a user supplied seed for theRNG()
|
||||||
|
*
|
||||||
|
* This function creates a new dictionary composed by nMarkers markers and each markers composed
|
||||||
|
* by markerSize x markerSize bits. If baseDictionary is provided, its markers are directly
|
||||||
|
* included and the rest are generated based on them. If the size of baseDictionary is higher
|
||||||
|
* than nMarkers, only the first nMarkers in baseDictionary are taken and no new marker is added.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_AS(custom_dictionary_from) Ptr<Dictionary> generateCustomDictionary(
|
||||||
|
int nMarkers,
|
||||||
|
int markerSize,
|
||||||
|
const Ptr<Dictionary> &baseDictionary,
|
||||||
|
int randomSeed=0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
101
3rdparty/opencv/inc/opencv2/barcode.hpp
vendored
Normal file
101
3rdparty/opencv/inc/opencv2/barcode.hpp
vendored
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
// This file is part of OpenCV project.
|
||||||
|
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
||||||
|
// of this distribution and at http://opencv.org/license.html.
|
||||||
|
// Copyright (c) 2020-2021 darkliang wangberlinT Certseeds
|
||||||
|
|
||||||
|
#ifndef __OPENCV_BARCODE_HPP__
|
||||||
|
#define __OPENCV_BARCODE_HPP__
|
||||||
|
|
||||||
|
#include <opencv2/core.hpp>
|
||||||
|
#include <ostream>
|
||||||
|
|
||||||
|
/** @defgroup barcode Barcode detecting and decoding methods
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace cv {
|
||||||
|
namespace barcode {
|
||||||
|
|
||||||
|
//! @addtogroup barcode
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
enum BarcodeType
|
||||||
|
{
|
||||||
|
NONE, EAN_8, EAN_13, UPC_A, UPC_E, UPC_EAN_EXTENSION
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline std::ostream &operator<<(std::ostream &out, const BarcodeType &barcode_type)
|
||||||
|
{
|
||||||
|
switch (barcode_type)
|
||||||
|
{
|
||||||
|
case BarcodeType::EAN_8:
|
||||||
|
out << "EAN_8";
|
||||||
|
break;
|
||||||
|
case BarcodeType::EAN_13:
|
||||||
|
out << "EAN_13";
|
||||||
|
break;
|
||||||
|
case BarcodeType::UPC_E:
|
||||||
|
out << "UPC_E";
|
||||||
|
break;
|
||||||
|
case BarcodeType::UPC_A:
|
||||||
|
out << "UPC_A";
|
||||||
|
break;
|
||||||
|
case BarcodeType::UPC_EAN_EXTENSION:
|
||||||
|
out << "UPC_EAN_EXTENSION";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
out << "NONE";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
class CV_EXPORTS_W BarcodeDetector
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Initialize the BarcodeDetector.
|
||||||
|
* @param prototxt_path prototxt file path for the super resolution model
|
||||||
|
* @param model_path model file path for the super resolution model
|
||||||
|
*/
|
||||||
|
CV_WRAP BarcodeDetector(const std::string &prototxt_path = "", const std::string &model_path = "");
|
||||||
|
|
||||||
|
~BarcodeDetector();
|
||||||
|
|
||||||
|
/** @brief Detects Barcode in image and returns the rectangle(s) containing the code.
|
||||||
|
*
|
||||||
|
* @param img grayscale or color (BGR) image containing (or not) Barcode.
|
||||||
|
* @param points Output vector of vector of vertices of the minimum-area rotated rectangle containing the codes.
|
||||||
|
* For N detected barcodes, the dimensions of this array should be [N][4].
|
||||||
|
* Order of four points in vector< Point2f> is bottomLeft, topLeft, topRight, bottomRight.
|
||||||
|
*/
|
||||||
|
CV_WRAP bool detect(InputArray img, OutputArray points) const;
|
||||||
|
|
||||||
|
/** @brief Decodes barcode in image once it's found by the detect() method.
|
||||||
|
*
|
||||||
|
* @param img grayscale or color (BGR) image containing bar code.
|
||||||
|
* @param points vector of rotated rectangle vertices found by detect() method (or some other algorithm).
|
||||||
|
* For N detected barcodes, the dimensions of this array should be [N][4].
|
||||||
|
* Order of four points in vector<Point2f> is bottomLeft, topLeft, topRight, bottomRight.
|
||||||
|
* @param decoded_info UTF8-encoded output vector of string or empty vector of string if the codes cannot be decoded.
|
||||||
|
* @param decoded_type vector of BarcodeType, specifies the type of these barcodes
|
||||||
|
*/
|
||||||
|
CV_WRAP bool decode(InputArray img, InputArray points, CV_OUT std::vector<std::string> &decoded_info, CV_OUT
|
||||||
|
std::vector<BarcodeType> &decoded_type) const;
|
||||||
|
|
||||||
|
/** @brief Both detects and decodes barcode
|
||||||
|
|
||||||
|
* @param img grayscale or color (BGR) image containing barcode.
|
||||||
|
* @param decoded_info UTF8-encoded output vector of string(s) or empty vector of string if the codes cannot be decoded.
|
||||||
|
* @param decoded_type vector of BarcodeType, specifies the type of these barcodes
|
||||||
|
* @param points optional output vector of vertices of the found barcode rectangle. Will be empty if not found.
|
||||||
|
*/
|
||||||
|
CV_WRAP bool detectAndDecode(InputArray img, CV_OUT std::vector<std::string> &decoded_info, CV_OUT
|
||||||
|
std::vector<BarcodeType> &decoded_type, OutputArray points = noArray()) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
struct Impl;
|
||||||
|
Ptr<Impl> p;
|
||||||
|
};
|
||||||
|
//! @}
|
||||||
|
}
|
||||||
|
} // cv::barcode::
|
||||||
|
#endif //__OPENCV_BARCODE_HPP__
|
380
3rdparty/opencv/inc/opencv2/bgsegm.hpp
vendored
Normal file
380
3rdparty/opencv/inc/opencv2/bgsegm.hpp
vendored
Normal file
@ -0,0 +1,380 @@
|
|||||||
|
/*
|
||||||
|
By downloading, copying, installing or using the software you agree to this
|
||||||
|
license. If you do not agree to this license, do not download, install,
|
||||||
|
copy or use the software.
|
||||||
|
|
||||||
|
|
||||||
|
License Agreement
|
||||||
|
For Open Source Computer Vision Library
|
||||||
|
(3-clause BSD License)
|
||||||
|
|
||||||
|
Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
|
Third party copyrights are property of their respective owners.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the names of the copyright holders nor the names of the contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
|
||||||
|
This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
any express or implied warranties, including, but not limited to, the implied
|
||||||
|
warranties of merchantability and fitness for a particular purpose are
|
||||||
|
disclaimed. In no event shall copyright holders or contributors be liable for
|
||||||
|
any direct, indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
(including, but not limited to, procurement of substitute goods or services;
|
||||||
|
loss of use, data, or profits; or business interruption) however caused
|
||||||
|
and on any theory of liability, whether in contract, strict liability,
|
||||||
|
or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
the use of this software, even if advised of the possibility of such damage.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __OPENCV_BGSEGM_HPP__
|
||||||
|
#define __OPENCV_BGSEGM_HPP__
|
||||||
|
|
||||||
|
#include "opencv2/video.hpp"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
/** @defgroup bgsegm Improved Background-Foreground Segmentation Methods
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace cv
|
||||||
|
{
|
||||||
|
namespace bgsegm
|
||||||
|
{
|
||||||
|
|
||||||
|
//! @addtogroup bgsegm
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Gaussian Mixture-based Background/Foreground Segmentation Algorithm.
|
||||||
|
|
||||||
|
The class implements the algorithm described in @cite KB2001 .
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W BackgroundSubtractorMOG : public BackgroundSubtractor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CV_WRAP virtual int getHistory() const = 0;
|
||||||
|
CV_WRAP virtual void setHistory(int nframes) = 0;
|
||||||
|
|
||||||
|
CV_WRAP virtual int getNMixtures() const = 0;
|
||||||
|
CV_WRAP virtual void setNMixtures(int nmix) = 0;
|
||||||
|
|
||||||
|
CV_WRAP virtual double getBackgroundRatio() const = 0;
|
||||||
|
CV_WRAP virtual void setBackgroundRatio(double backgroundRatio) = 0;
|
||||||
|
|
||||||
|
CV_WRAP virtual double getNoiseSigma() const = 0;
|
||||||
|
CV_WRAP virtual void setNoiseSigma(double noiseSigma) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @brief Creates mixture-of-gaussian background subtractor
|
||||||
|
|
||||||
|
@param history Length of the history.
|
||||||
|
@param nmixtures Number of Gaussian mixtures.
|
||||||
|
@param backgroundRatio Background ratio.
|
||||||
|
@param noiseSigma Noise strength (standard deviation of the brightness or each color channel). 0
|
||||||
|
means some automatic value.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W Ptr<BackgroundSubtractorMOG>
|
||||||
|
createBackgroundSubtractorMOG(int history=200, int nmixtures=5,
|
||||||
|
double backgroundRatio=0.7, double noiseSigma=0);
|
||||||
|
|
||||||
|
|
||||||
|
/** @brief Background Subtractor module based on the algorithm given in @cite Gold2012 .
|
||||||
|
|
||||||
|
Takes a series of images and returns a sequence of mask (8UC1)
|
||||||
|
images of the same size, where 255 indicates Foreground and 0 represents Background.
|
||||||
|
This class implements an algorithm described in "Visual Tracking of Human Visitors under
|
||||||
|
Variable-Lighting Conditions for a Responsive Audio Art Installation," A. Godbehere,
|
||||||
|
A. Matsukawa, K. Goldberg, American Control Conference, Montreal, June 2012.
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W BackgroundSubtractorGMG : public BackgroundSubtractor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/** @brief Returns total number of distinct colors to maintain in histogram.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual int getMaxFeatures() const = 0;
|
||||||
|
/** @brief Sets total number of distinct colors to maintain in histogram.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setMaxFeatures(int maxFeatures) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns the learning rate of the algorithm.
|
||||||
|
|
||||||
|
It lies between 0.0 and 1.0. It determines how quickly features are "forgotten" from
|
||||||
|
histograms.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual double getDefaultLearningRate() const = 0;
|
||||||
|
/** @brief Sets the learning rate of the algorithm.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setDefaultLearningRate(double lr) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns the number of frames used to initialize background model.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual int getNumFrames() const = 0;
|
||||||
|
/** @brief Sets the number of frames used to initialize background model.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setNumFrames(int nframes) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns the parameter used for quantization of color-space.
|
||||||
|
|
||||||
|
It is the number of discrete levels in each channel to be used in histograms.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual int getQuantizationLevels() const = 0;
|
||||||
|
/** @brief Sets the parameter used for quantization of color-space
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setQuantizationLevels(int nlevels) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns the prior probability that each individual pixel is a background pixel.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual double getBackgroundPrior() const = 0;
|
||||||
|
/** @brief Sets the prior probability that each individual pixel is a background pixel.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setBackgroundPrior(double bgprior) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns the kernel radius used for morphological operations
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual int getSmoothingRadius() const = 0;
|
||||||
|
/** @brief Sets the kernel radius used for morphological operations
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setSmoothingRadius(int radius) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns the value of decision threshold.
|
||||||
|
|
||||||
|
Decision value is the value above which pixel is determined to be FG.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual double getDecisionThreshold() const = 0;
|
||||||
|
/** @brief Sets the value of decision threshold.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setDecisionThreshold(double thresh) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns the status of background model update
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual bool getUpdateBackgroundModel() const = 0;
|
||||||
|
/** @brief Sets the status of background model update
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setUpdateBackgroundModel(bool update) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns the minimum value taken on by pixels in image sequence. Usually 0.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual double getMinVal() const = 0;
|
||||||
|
/** @brief Sets the minimum value taken on by pixels in image sequence.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setMinVal(double val) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns the maximum value taken on by pixels in image sequence. e.g. 1.0 or 255.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual double getMaxVal() const = 0;
|
||||||
|
/** @brief Sets the maximum value taken on by pixels in image sequence.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setMaxVal(double val) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @brief Creates a GMG Background Subtractor
|
||||||
|
|
||||||
|
@param initializationFrames number of frames used to initialize the background models.
|
||||||
|
@param decisionThreshold Threshold value, above which it is marked foreground, else background.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W Ptr<BackgroundSubtractorGMG> createBackgroundSubtractorGMG(int initializationFrames=120,
|
||||||
|
double decisionThreshold=0.8);
|
||||||
|
|
||||||
|
/** @brief Background subtraction based on counting.
|
||||||
|
|
||||||
|
About as fast as MOG2 on a high end system.
|
||||||
|
More than twice faster than MOG2 on cheap hardware (benchmarked on Raspberry Pi3).
|
||||||
|
|
||||||
|
%Algorithm by Sagi Zeevi ( https://github.com/sagi-z/BackgroundSubtractorCNT )
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W BackgroundSubtractorCNT : public BackgroundSubtractor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// BackgroundSubtractor interface
|
||||||
|
CV_WRAP virtual void apply(InputArray image, OutputArray fgmask, double learningRate=-1) CV_OVERRIDE = 0;
|
||||||
|
CV_WRAP virtual void getBackgroundImage(OutputArray backgroundImage) const CV_OVERRIDE = 0;
|
||||||
|
|
||||||
|
/** @brief Returns number of frames with same pixel color to consider stable.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual int getMinPixelStability() const = 0;
|
||||||
|
/** @brief Sets the number of frames with same pixel color to consider stable.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setMinPixelStability(int value) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns maximum allowed credit for a pixel in history.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual int getMaxPixelStability() const = 0;
|
||||||
|
/** @brief Sets the maximum allowed credit for a pixel in history.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setMaxPixelStability(int value) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns if we're giving a pixel credit for being stable for a long time.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual bool getUseHistory() const = 0;
|
||||||
|
/** @brief Sets if we're giving a pixel credit for being stable for a long time.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setUseHistory(bool value) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns if we're parallelizing the algorithm.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual bool getIsParallel() const = 0;
|
||||||
|
/** @brief Sets if we're parallelizing the algorithm.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setIsParallel(bool value) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @brief Creates a CNT Background Subtractor
|
||||||
|
|
||||||
|
@param minPixelStability number of frames with same pixel color to consider stable
|
||||||
|
@param useHistory determines if we're giving a pixel credit for being stable for a long time
|
||||||
|
@param maxPixelStability maximum allowed credit for a pixel in history
|
||||||
|
@param isParallel determines if we're parallelizing the algorithm
|
||||||
|
*/
|
||||||
|
|
||||||
|
CV_EXPORTS_W Ptr<BackgroundSubtractorCNT>
|
||||||
|
createBackgroundSubtractorCNT(int minPixelStability = 15,
|
||||||
|
bool useHistory = true,
|
||||||
|
int maxPixelStability = 15*60,
|
||||||
|
bool isParallel = true);
|
||||||
|
|
||||||
|
enum LSBPCameraMotionCompensation {
|
||||||
|
LSBP_CAMERA_MOTION_COMPENSATION_NONE = 0,
|
||||||
|
LSBP_CAMERA_MOTION_COMPENSATION_LK
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @brief Implementation of the different yet better algorithm which is called GSOC, as it was implemented during GSOC and was not originated from any paper.
|
||||||
|
|
||||||
|
This algorithm demonstrates better performance on CDNET 2014 dataset compared to other algorithms in OpenCV.
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W BackgroundSubtractorGSOC : public BackgroundSubtractor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// BackgroundSubtractor interface
|
||||||
|
CV_WRAP virtual void apply(InputArray image, OutputArray fgmask, double learningRate=-1) CV_OVERRIDE = 0;
|
||||||
|
|
||||||
|
CV_WRAP virtual void getBackgroundImage(OutputArray backgroundImage) const CV_OVERRIDE = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @brief Background Subtraction using Local SVD Binary Pattern. More details about the algorithm can be found at @cite LGuo2016
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W BackgroundSubtractorLSBP : public BackgroundSubtractor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// BackgroundSubtractor interface
|
||||||
|
CV_WRAP virtual void apply(InputArray image, OutputArray fgmask, double learningRate=-1) CV_OVERRIDE = 0;
|
||||||
|
|
||||||
|
CV_WRAP virtual void getBackgroundImage(OutputArray backgroundImage) const CV_OVERRIDE = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @brief This is for calculation of the LSBP descriptors.
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W BackgroundSubtractorLSBPDesc
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void calcLocalSVDValues(OutputArray localSVDValues, const Mat& frame);
|
||||||
|
|
||||||
|
static void computeFromLocalSVDValues(OutputArray desc, const Mat& localSVDValues, const Point2i* LSBPSamplePoints);
|
||||||
|
|
||||||
|
static void compute(OutputArray desc, const Mat& frame, const Point2i* LSBPSamplePoints);
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @brief Creates an instance of BackgroundSubtractorGSOC algorithm.
|
||||||
|
|
||||||
|
Implementation of the different yet better algorithm which is called GSOC, as it was implemented during GSOC and was not originated from any paper.
|
||||||
|
|
||||||
|
@param mc Whether to use camera motion compensation.
|
||||||
|
@param nSamples Number of samples to maintain at each point of the frame.
|
||||||
|
@param replaceRate Probability of replacing the old sample - how fast the model will update itself.
|
||||||
|
@param propagationRate Probability of propagating to neighbors.
|
||||||
|
@param hitsThreshold How many positives the sample must get before it will be considered as a possible replacement.
|
||||||
|
@param alpha Scale coefficient for threshold.
|
||||||
|
@param beta Bias coefficient for threshold.
|
||||||
|
@param blinkingSupressionDecay Blinking supression decay factor.
|
||||||
|
@param blinkingSupressionMultiplier Blinking supression multiplier.
|
||||||
|
@param noiseRemovalThresholdFacBG Strength of the noise removal for background points.
|
||||||
|
@param noiseRemovalThresholdFacFG Strength of the noise removal for foreground points.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W Ptr<BackgroundSubtractorGSOC> createBackgroundSubtractorGSOC(int mc = LSBP_CAMERA_MOTION_COMPENSATION_NONE, int nSamples = 20, float replaceRate = 0.003f, float propagationRate = 0.01f, int hitsThreshold = 32, float alpha = 0.01f, float beta = 0.0022f, float blinkingSupressionDecay = 0.1f, float blinkingSupressionMultiplier = 0.1f, float noiseRemovalThresholdFacBG = 0.0004f, float noiseRemovalThresholdFacFG = 0.0008f);
|
||||||
|
|
||||||
|
/** @brief Creates an instance of BackgroundSubtractorLSBP algorithm.
|
||||||
|
|
||||||
|
Background Subtraction using Local SVD Binary Pattern. More details about the algorithm can be found at @cite LGuo2016
|
||||||
|
|
||||||
|
@param mc Whether to use camera motion compensation.
|
||||||
|
@param nSamples Number of samples to maintain at each point of the frame.
|
||||||
|
@param LSBPRadius LSBP descriptor radius.
|
||||||
|
@param Tlower Lower bound for T-values. See @cite LGuo2016 for details.
|
||||||
|
@param Tupper Upper bound for T-values. See @cite LGuo2016 for details.
|
||||||
|
@param Tinc Increase step for T-values. See @cite LGuo2016 for details.
|
||||||
|
@param Tdec Decrease step for T-values. See @cite LGuo2016 for details.
|
||||||
|
@param Rscale Scale coefficient for threshold values.
|
||||||
|
@param Rincdec Increase/Decrease step for threshold values.
|
||||||
|
@param noiseRemovalThresholdFacBG Strength of the noise removal for background points.
|
||||||
|
@param noiseRemovalThresholdFacFG Strength of the noise removal for foreground points.
|
||||||
|
@param LSBPthreshold Threshold for LSBP binary string.
|
||||||
|
@param minCount Minimal number of matches for sample to be considered as foreground.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W Ptr<BackgroundSubtractorLSBP> createBackgroundSubtractorLSBP(int mc = LSBP_CAMERA_MOTION_COMPENSATION_NONE, int nSamples = 20, int LSBPRadius = 16, float Tlower = 2.0f, float Tupper = 32.0f, float Tinc = 1.0f, float Tdec = 0.05f, float Rscale = 10.0f, float Rincdec = 0.005f, float noiseRemovalThresholdFacBG = 0.0004f, float noiseRemovalThresholdFacFG = 0.0008f, int LSBPthreshold = 8, int minCount = 2);
|
||||||
|
|
||||||
|
/** @brief Synthetic frame sequence generator for testing background subtraction algorithms.
|
||||||
|
|
||||||
|
It will generate the moving object on top of the background.
|
||||||
|
It will apply some distortion to the background to make the test more complex.
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W SyntheticSequenceGenerator : public Algorithm
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
const double amplitude;
|
||||||
|
const double wavelength;
|
||||||
|
const double wavespeed;
|
||||||
|
const double objspeed;
|
||||||
|
unsigned timeStep;
|
||||||
|
Point2d pos;
|
||||||
|
Point2d dir;
|
||||||
|
Mat background;
|
||||||
|
Mat object;
|
||||||
|
RNG rng;
|
||||||
|
|
||||||
|
public:
|
||||||
|
/** @brief Creates an instance of SyntheticSequenceGenerator.
|
||||||
|
|
||||||
|
@param background Background image for object.
|
||||||
|
@param object Object image which will move slowly over the background.
|
||||||
|
@param amplitude Amplitude of wave distortion applied to background.
|
||||||
|
@param wavelength Length of waves in distortion applied to background.
|
||||||
|
@param wavespeed How fast waves will move.
|
||||||
|
@param objspeed How fast object will fly over background.
|
||||||
|
*/
|
||||||
|
CV_WRAP SyntheticSequenceGenerator(InputArray background, InputArray object, double amplitude, double wavelength, double wavespeed, double objspeed);
|
||||||
|
|
||||||
|
/** @brief Obtain the next frame in the sequence.
|
||||||
|
|
||||||
|
@param frame Output frame.
|
||||||
|
@param gtMask Output ground-truth (reference) segmentation mask object/background.
|
||||||
|
*/
|
||||||
|
CV_WRAP void getNextFrame(OutputArray frame, OutputArray gtMask);
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @brief Creates an instance of SyntheticSequenceGenerator.
|
||||||
|
|
||||||
|
@param background Background image for object.
|
||||||
|
@param object Object image which will move slowly over the background.
|
||||||
|
@param amplitude Amplitude of wave distortion applied to background.
|
||||||
|
@param wavelength Length of waves in distortion applied to background.
|
||||||
|
@param wavespeed How fast waves will move.
|
||||||
|
@param objspeed How fast object will fly over background.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W Ptr<SyntheticSequenceGenerator> createSyntheticSequenceGenerator(InputArray background, InputArray object, double amplitude = 2.0, double wavelength = 20.0, double wavespeed = 0.2, double objspeed = 6.0);
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
60
3rdparty/opencv/inc/opencv2/bioinspired.hpp
vendored
Normal file
60
3rdparty/opencv/inc/opencv2/bioinspired.hpp
vendored
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
//
|
||||||
|
// By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
// If you do not agree to this license, do not download, install,
|
||||||
|
// copy or use the software.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// License Agreement
|
||||||
|
// For Open Source Computer Vision Library
|
||||||
|
//
|
||||||
|
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||||
|
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
||||||
|
// Third party copyrights are property of their respective owners.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistribution's of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
// any express or implied warranties, including, but not limited to, the implied
|
||||||
|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
// indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
// (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
// loss of use, data, or profits; or business interruption) however caused
|
||||||
|
// and on any theory of liability, whether in contract, strict liability,
|
||||||
|
// or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
// the use of this software, even if advised of the possibility of such damage.
|
||||||
|
//
|
||||||
|
//M*/
|
||||||
|
|
||||||
|
#ifndef __OPENCV_BIOINSPIRED_HPP__
|
||||||
|
#define __OPENCV_BIOINSPIRED_HPP__
|
||||||
|
|
||||||
|
#include "opencv2/core.hpp"
|
||||||
|
#include "opencv2/bioinspired/retina.hpp"
|
||||||
|
#include "opencv2/bioinspired/retinafasttonemapping.hpp"
|
||||||
|
#include "opencv2/bioinspired/transientareassegmentationmodule.hpp"
|
||||||
|
|
||||||
|
/** @defgroup bioinspired Biologically inspired vision models and derivated tools
|
||||||
|
|
||||||
|
The module provides biological visual systems models (human visual system and others). It also
|
||||||
|
provides derivated objects that take advantage of those bio-inspired models.
|
||||||
|
|
||||||
|
@ref bioinspired_retina
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif
|
48
3rdparty/opencv/inc/opencv2/bioinspired/bioinspired.hpp
vendored
Normal file
48
3rdparty/opencv/inc/opencv2/bioinspired/bioinspired.hpp
vendored
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
//
|
||||||
|
// By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
// If you do not agree to this license, do not download, install,
|
||||||
|
// copy or use the software.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// License Agreement
|
||||||
|
// For Open Source Computer Vision Library
|
||||||
|
//
|
||||||
|
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||||
|
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
||||||
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
|
// Third party copyrights are property of their respective owners.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistribution's of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
// any express or implied warranties, including, but not limited to, the implied
|
||||||
|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
// indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
// (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
// loss of use, data, or profits; or business interruption) however caused
|
||||||
|
// and on any theory of liability, whether in contract, strict liability,
|
||||||
|
// or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
// the use of this software, even if advised of the possibility of such damage.
|
||||||
|
//
|
||||||
|
//M*/
|
||||||
|
|
||||||
|
#ifdef __OPENCV_BUILD
|
||||||
|
#error this is a compatibility header which should not be used inside the OpenCV library
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "opencv2/bioinspired.hpp"
|
454
3rdparty/opencv/inc/opencv2/bioinspired/retina.hpp
vendored
Normal file
454
3rdparty/opencv/inc/opencv2/bioinspired/retina.hpp
vendored
Normal file
@ -0,0 +1,454 @@
|
|||||||
|
/*#******************************************************************************
|
||||||
|
** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
**
|
||||||
|
** By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
** If you do not agree to this license, do not download, install,
|
||||||
|
** copy or use the software.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** bioinspired : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab.
|
||||||
|
** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping.
|
||||||
|
**
|
||||||
|
** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications)
|
||||||
|
**
|
||||||
|
** Creation - enhancement process 2007-2015
|
||||||
|
** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France
|
||||||
|
**
|
||||||
|
** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr).
|
||||||
|
** Refer to the following research paper for more information:
|
||||||
|
** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011
|
||||||
|
** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book:
|
||||||
|
** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891.
|
||||||
|
**
|
||||||
|
** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author :
|
||||||
|
** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper:
|
||||||
|
** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007
|
||||||
|
** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions.
|
||||||
|
** ====> more informations in the above cited Jeanny Heraults's book.
|
||||||
|
**
|
||||||
|
** License Agreement
|
||||||
|
** For Open Source Computer Vision Library
|
||||||
|
**
|
||||||
|
** Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||||
|
** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved.
|
||||||
|
**
|
||||||
|
** For Human Visual System tools (bioinspired)
|
||||||
|
** Copyright (C) 2007-2015, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved.
|
||||||
|
**
|
||||||
|
** Third party copyrights are property of their respective owners.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
** are permitted provided that the following conditions are met:
|
||||||
|
**
|
||||||
|
** * Redistributions of source code must retain the above copyright notice,
|
||||||
|
** this list of conditions and the following disclaimer.
|
||||||
|
**
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
** this list of conditions and the following disclaimer in the documentation
|
||||||
|
** and/or other materials provided with the distribution.
|
||||||
|
**
|
||||||
|
** * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
** any express or implied warranties, including, but not limited to, the implied
|
||||||
|
** warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
** In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
** indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
** (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
** loss of use, data, or profits; or business interruption) however caused
|
||||||
|
** and on any theory of liability, whether in contract, strict liability,
|
||||||
|
** or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
** the use of this software, even if advised of the possibility of such damage.
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __OPENCV_BIOINSPIRED_RETINA_HPP__
|
||||||
|
#define __OPENCV_BIOINSPIRED_RETINA_HPP__
|
||||||
|
|
||||||
|
/**
|
||||||
|
@file
|
||||||
|
@date Jul 19, 2011
|
||||||
|
@author Alexandre Benoit
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "opencv2/core.hpp" // for all OpenCV core functionalities access, including cv::Exception support
|
||||||
|
|
||||||
|
|
||||||
|
namespace cv{
|
||||||
|
namespace bioinspired{
|
||||||
|
|
||||||
|
//! @addtogroup bioinspired
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
enum {
|
||||||
|
RETINA_COLOR_RANDOM, //!< each pixel position is either R, G or B in a random choice
|
||||||
|
RETINA_COLOR_DIAGONAL,//!< color sampling is RGBRGBRGB..., line 2 BRGBRGBRG..., line 3, GBRGBRGBR...
|
||||||
|
RETINA_COLOR_BAYER//!< standard bayer sampling
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** @brief retina model parameters structure
|
||||||
|
|
||||||
|
For better clarity, check explenations on the comments of methods : setupOPLandIPLParvoChannel and setupIPLMagnoChannel
|
||||||
|
|
||||||
|
Here is the default configuration file of the retina module. It gives results such as the first
|
||||||
|
retina output shown on the top of this page.
|
||||||
|
|
||||||
|
@code{xml}
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<opencv_storage>
|
||||||
|
<OPLandIPLparvo>
|
||||||
|
<colorMode>1</colorMode>
|
||||||
|
<normaliseOutput>1</normaliseOutput>
|
||||||
|
<photoreceptorsLocalAdaptationSensitivity>7.5e-01</photoreceptorsLocalAdaptationSensitivity>
|
||||||
|
<photoreceptorsTemporalConstant>9.0e-01</photoreceptorsTemporalConstant>
|
||||||
|
<photoreceptorsSpatialConstant>5.3e-01</photoreceptorsSpatialConstant>
|
||||||
|
<horizontalCellsGain>0.01</horizontalCellsGain>
|
||||||
|
<hcellsTemporalConstant>0.5</hcellsTemporalConstant>
|
||||||
|
<hcellsSpatialConstant>7.</hcellsSpatialConstant>
|
||||||
|
<ganglionCellsSensitivity>7.5e-01</ganglionCellsSensitivity></OPLandIPLparvo>
|
||||||
|
<IPLmagno>
|
||||||
|
<normaliseOutput>1</normaliseOutput>
|
||||||
|
<parasolCells_beta>0.</parasolCells_beta>
|
||||||
|
<parasolCells_tau>0.</parasolCells_tau>
|
||||||
|
<parasolCells_k>7.</parasolCells_k>
|
||||||
|
<amacrinCellsTemporalCutFrequency>2.0e+00</amacrinCellsTemporalCutFrequency>
|
||||||
|
<V0CompressionParameter>9.5e-01</V0CompressionParameter>
|
||||||
|
<localAdaptintegration_tau>0.</localAdaptintegration_tau>
|
||||||
|
<localAdaptintegration_k>7.</localAdaptintegration_k></IPLmagno>
|
||||||
|
</opencv_storage>
|
||||||
|
@endcode
|
||||||
|
|
||||||
|
Here is the 'realistic" setup used to obtain the second retina output shown on the top of this page.
|
||||||
|
|
||||||
|
@code{xml}
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<opencv_storage>
|
||||||
|
<OPLandIPLparvo>
|
||||||
|
<colorMode>1</colorMode>
|
||||||
|
<normaliseOutput>1</normaliseOutput>
|
||||||
|
<photoreceptorsLocalAdaptationSensitivity>8.9e-01</photoreceptorsLocalAdaptationSensitivity>
|
||||||
|
<photoreceptorsTemporalConstant>9.0e-01</photoreceptorsTemporalConstant>
|
||||||
|
<photoreceptorsSpatialConstant>5.3e-01</photoreceptorsSpatialConstant>
|
||||||
|
<horizontalCellsGain>0.3</horizontalCellsGain>
|
||||||
|
<hcellsTemporalConstant>0.5</hcellsTemporalConstant>
|
||||||
|
<hcellsSpatialConstant>7.</hcellsSpatialConstant>
|
||||||
|
<ganglionCellsSensitivity>8.9e-01</ganglionCellsSensitivity></OPLandIPLparvo>
|
||||||
|
<IPLmagno>
|
||||||
|
<normaliseOutput>1</normaliseOutput>
|
||||||
|
<parasolCells_beta>0.</parasolCells_beta>
|
||||||
|
<parasolCells_tau>0.</parasolCells_tau>
|
||||||
|
<parasolCells_k>7.</parasolCells_k>
|
||||||
|
<amacrinCellsTemporalCutFrequency>2.0e+00</amacrinCellsTemporalCutFrequency>
|
||||||
|
<V0CompressionParameter>9.5e-01</V0CompressionParameter>
|
||||||
|
<localAdaptintegration_tau>0.</localAdaptintegration_tau>
|
||||||
|
<localAdaptintegration_k>7.</localAdaptintegration_k></IPLmagno>
|
||||||
|
</opencv_storage>
|
||||||
|
@endcode
|
||||||
|
*/
|
||||||
|
struct RetinaParameters{
|
||||||
|
//! Outer Plexiform Layer (OPL) and Inner Plexiform Layer Parvocellular (IplParvo) parameters
|
||||||
|
struct OPLandIplParvoParameters{
|
||||||
|
OPLandIplParvoParameters():colorMode(true),
|
||||||
|
normaliseOutput(true),
|
||||||
|
photoreceptorsLocalAdaptationSensitivity(0.75f),
|
||||||
|
photoreceptorsTemporalConstant(0.9f),
|
||||||
|
photoreceptorsSpatialConstant(0.53f),
|
||||||
|
horizontalCellsGain(0.01f),
|
||||||
|
hcellsTemporalConstant(0.5f),
|
||||||
|
hcellsSpatialConstant(7.f),
|
||||||
|
ganglionCellsSensitivity(0.75f) { } // default setup
|
||||||
|
bool colorMode, normaliseOutput;
|
||||||
|
float photoreceptorsLocalAdaptationSensitivity, photoreceptorsTemporalConstant, photoreceptorsSpatialConstant, horizontalCellsGain, hcellsTemporalConstant, hcellsSpatialConstant, ganglionCellsSensitivity;
|
||||||
|
};
|
||||||
|
//! Inner Plexiform Layer Magnocellular channel (IplMagno)
|
||||||
|
struct IplMagnoParameters{
|
||||||
|
IplMagnoParameters():
|
||||||
|
normaliseOutput(true),
|
||||||
|
parasolCells_beta(0.f),
|
||||||
|
parasolCells_tau(0.f),
|
||||||
|
parasolCells_k(7.f),
|
||||||
|
amacrinCellsTemporalCutFrequency(2.0f),
|
||||||
|
V0CompressionParameter(0.95f),
|
||||||
|
localAdaptintegration_tau(0.f),
|
||||||
|
localAdaptintegration_k(7.f) { } // default setup
|
||||||
|
bool normaliseOutput;
|
||||||
|
float parasolCells_beta, parasolCells_tau, parasolCells_k, amacrinCellsTemporalCutFrequency, V0CompressionParameter, localAdaptintegration_tau, localAdaptintegration_k;
|
||||||
|
};
|
||||||
|
OPLandIplParvoParameters OPLandIplParvo;
|
||||||
|
IplMagnoParameters IplMagno;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** @brief class which allows the Gipsa/Listic Labs model to be used with OpenCV.
|
||||||
|
|
||||||
|
This retina model allows spatio-temporal image processing (applied on still images, video sequences).
|
||||||
|
As a summary, these are the retina model properties:
|
||||||
|
- It applies a spectral whithening (mid-frequency details enhancement)
|
||||||
|
- high frequency spatio-temporal noise reduction
|
||||||
|
- low frequency luminance to be reduced (luminance range compression)
|
||||||
|
- local logarithmic luminance compression allows details to be enhanced in low light conditions
|
||||||
|
|
||||||
|
USE : this model can be used basically for spatio-temporal video effects but also for :
|
||||||
|
_using the getParvo method output matrix : texture analysiswith enhanced signal to noise ratio and enhanced details robust against input images luminance ranges
|
||||||
|
_using the getMagno method output matrix : motion analysis also with the previously cited properties
|
||||||
|
|
||||||
|
for more information, reer to the following papers :
|
||||||
|
Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011
|
||||||
|
Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891.
|
||||||
|
|
||||||
|
The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author :
|
||||||
|
take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper:
|
||||||
|
B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007
|
||||||
|
take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions.
|
||||||
|
more informations in the above cited Jeanny Heraults's book.
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W Retina : public Algorithm {
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
/** @brief Retreive retina input buffer size
|
||||||
|
@return the retina input buffer size
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual Size getInputSize()=0;
|
||||||
|
|
||||||
|
/** @brief Retreive retina output buffer size that can be different from the input if a spatial log
|
||||||
|
transformation is applied
|
||||||
|
@return the retina output buffer size
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual Size getOutputSize()=0;
|
||||||
|
|
||||||
|
/** @brief Try to open an XML retina parameters file to adjust current retina instance setup
|
||||||
|
|
||||||
|
- if the xml file does not exist, then default setup is applied
|
||||||
|
- warning, Exceptions are thrown if read XML file is not valid
|
||||||
|
@param retinaParameterFile the parameters filename
|
||||||
|
@param applyDefaultSetupOnFailure set to true if an error must be thrown on error
|
||||||
|
|
||||||
|
You can retrieve the current parameters structure using the method Retina::getParameters and update
|
||||||
|
it before running method Retina::setup.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setup(String retinaParameterFile="", const bool applyDefaultSetupOnFailure=true)=0;
|
||||||
|
|
||||||
|
/** @overload
|
||||||
|
@param fs the open Filestorage which contains retina parameters
|
||||||
|
@param applyDefaultSetupOnFailure set to true if an error must be thrown on error
|
||||||
|
*/
|
||||||
|
virtual void setup(cv::FileStorage &fs, const bool applyDefaultSetupOnFailure=true)=0;
|
||||||
|
|
||||||
|
/** @overload
|
||||||
|
@param newParameters a parameters structures updated with the new target configuration.
|
||||||
|
*/
|
||||||
|
virtual void setup(RetinaParameters newParameters)=0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return the current parameters setup
|
||||||
|
*/
|
||||||
|
virtual RetinaParameters getParameters()=0;
|
||||||
|
|
||||||
|
/** @brief Outputs a string showing the used parameters setup
|
||||||
|
@return a string which contains formated parameters information
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual const String printSetup()=0;
|
||||||
|
|
||||||
|
/** @brief Write xml/yml formated parameters information
|
||||||
|
@param fs the filename of the xml file that will be open and writen with formatted parameters
|
||||||
|
information
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void write( String fs ) const=0;
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
|
virtual void write( FileStorage& fs ) const CV_OVERRIDE = 0;
|
||||||
|
|
||||||
|
/** @brief Setup the OPL and IPL parvo channels (see biologocal model)
|
||||||
|
|
||||||
|
OPL is referred as Outer Plexiform Layer of the retina, it allows the spatio-temporal filtering
|
||||||
|
which withens the spectrum and reduces spatio-temporal noise while attenuating global luminance
|
||||||
|
(low frequency energy) IPL parvo is the OPL next processing stage, it refers to a part of the
|
||||||
|
Inner Plexiform layer of the retina, it allows high contours sensitivity in foveal vision. See
|
||||||
|
reference papers for more informations.
|
||||||
|
for more informations, please have a look at the paper Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011
|
||||||
|
@param colorMode specifies if (true) color is processed of not (false) to then processing gray
|
||||||
|
level image
|
||||||
|
@param normaliseOutput specifies if (true) output is rescaled between 0 and 255 of not (false)
|
||||||
|
@param photoreceptorsLocalAdaptationSensitivity the photoreceptors sensitivity renage is 0-1
|
||||||
|
(more log compression effect when value increases)
|
||||||
|
@param photoreceptorsTemporalConstant the time constant of the first order low pass filter of
|
||||||
|
the photoreceptors, use it to cut high temporal frequencies (noise or fast motion), unit is
|
||||||
|
frames, typical value is 1 frame
|
||||||
|
@param photoreceptorsSpatialConstant the spatial constant of the first order low pass filter of
|
||||||
|
the photoreceptors, use it to cut high spatial frequencies (noise or thick contours), unit is
|
||||||
|
pixels, typical value is 1 pixel
|
||||||
|
@param horizontalCellsGain gain of the horizontal cells network, if 0, then the mean value of
|
||||||
|
the output is zero, if the parameter is near 1, then, the luminance is not filtered and is
|
||||||
|
still reachable at the output, typicall value is 0
|
||||||
|
@param HcellsTemporalConstant the time constant of the first order low pass filter of the
|
||||||
|
horizontal cells, use it to cut low temporal frequencies (local luminance variations), unit is
|
||||||
|
frames, typical value is 1 frame, as the photoreceptors
|
||||||
|
@param HcellsSpatialConstant the spatial constant of the first order low pass filter of the
|
||||||
|
horizontal cells, use it to cut low spatial frequencies (local luminance), unit is pixels,
|
||||||
|
typical value is 5 pixel, this value is also used for local contrast computing when computing
|
||||||
|
the local contrast adaptation at the ganglion cells level (Inner Plexiform Layer parvocellular
|
||||||
|
channel model)
|
||||||
|
@param ganglionCellsSensitivity the compression strengh of the ganglion cells local adaptation
|
||||||
|
output, set a value between 0.6 and 1 for best results, a high value increases more the low
|
||||||
|
value sensitivity... and the output saturates faster, recommended value: 0.7
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setupOPLandIPLParvoChannel(const bool colorMode=true, const bool normaliseOutput = true, const float photoreceptorsLocalAdaptationSensitivity=0.7f, const float photoreceptorsTemporalConstant=0.5f, const float photoreceptorsSpatialConstant=0.53f, const float horizontalCellsGain=0.f, const float HcellsTemporalConstant=1.f, const float HcellsSpatialConstant=7.f, const float ganglionCellsSensitivity=0.7f)=0;
|
||||||
|
|
||||||
|
/** @brief Set parameters values for the Inner Plexiform Layer (IPL) magnocellular channel
|
||||||
|
|
||||||
|
this channel processes signals output from OPL processing stage in peripheral vision, it allows
|
||||||
|
motion information enhancement. It is decorrelated from the details channel. See reference
|
||||||
|
papers for more details.
|
||||||
|
|
||||||
|
@param normaliseOutput specifies if (true) output is rescaled between 0 and 255 of not (false)
|
||||||
|
@param parasolCells_beta the low pass filter gain used for local contrast adaptation at the
|
||||||
|
IPL level of the retina (for ganglion cells local adaptation), typical value is 0
|
||||||
|
@param parasolCells_tau the low pass filter time constant used for local contrast adaptation
|
||||||
|
at the IPL level of the retina (for ganglion cells local adaptation), unit is frame, typical
|
||||||
|
value is 0 (immediate response)
|
||||||
|
@param parasolCells_k the low pass filter spatial constant used for local contrast adaptation
|
||||||
|
at the IPL level of the retina (for ganglion cells local adaptation), unit is pixels, typical
|
||||||
|
value is 5
|
||||||
|
@param amacrinCellsTemporalCutFrequency the time constant of the first order high pass fiter of
|
||||||
|
the magnocellular way (motion information channel), unit is frames, typical value is 1.2
|
||||||
|
@param V0CompressionParameter the compression strengh of the ganglion cells local adaptation
|
||||||
|
output, set a value between 0.6 and 1 for best results, a high value increases more the low
|
||||||
|
value sensitivity... and the output saturates faster, recommended value: 0.95
|
||||||
|
@param localAdaptintegration_tau specifies the temporal constant of the low pas filter
|
||||||
|
involved in the computation of the local "motion mean" for the local adaptation computation
|
||||||
|
@param localAdaptintegration_k specifies the spatial constant of the low pas filter involved
|
||||||
|
in the computation of the local "motion mean" for the local adaptation computation
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setupIPLMagnoChannel(const bool normaliseOutput = true, const float parasolCells_beta=0.f, const float parasolCells_tau=0.f, const float parasolCells_k=7.f, const float amacrinCellsTemporalCutFrequency=1.2f, const float V0CompressionParameter=0.95f, const float localAdaptintegration_tau=0.f, const float localAdaptintegration_k=7.f)=0;
|
||||||
|
|
||||||
|
/** @brief Method which allows retina to be applied on an input image,
|
||||||
|
|
||||||
|
after run, encapsulated retina module is ready to deliver its outputs using dedicated
|
||||||
|
acccessors, see getParvo and getMagno methods
|
||||||
|
@param inputImage the input Mat image to be processed, can be gray level or BGR coded in any
|
||||||
|
format (from 8bit to 16bits)
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void run(InputArray inputImage)=0;
|
||||||
|
|
||||||
|
/** @brief Method which processes an image in the aim to correct its luminance correct
|
||||||
|
backlight problems, enhance details in shadows.
|
||||||
|
|
||||||
|
This method is designed to perform High Dynamic Range image tone mapping (compress \>8bit/pixel
|
||||||
|
images to 8bit/pixel). This is a simplified version of the Retina Parvocellular model
|
||||||
|
(simplified version of the run/getParvo methods call) since it does not include the
|
||||||
|
spatio-temporal filter modelling the Outer Plexiform Layer of the retina that performs spectral
|
||||||
|
whitening and many other stuff. However, it works great for tone mapping and in a faster way.
|
||||||
|
|
||||||
|
Check the demos and experiments section to see examples and the way to perform tone mapping
|
||||||
|
using the original retina model and the method.
|
||||||
|
|
||||||
|
@param inputImage the input image to process (should be coded in float format : CV_32F,
|
||||||
|
CV_32FC1, CV_32F_C3, CV_32F_C4, the 4th channel won't be considered).
|
||||||
|
@param outputToneMappedImage the output 8bit/channel tone mapped image (CV_8U or CV_8UC3 format).
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void applyFastToneMapping(InputArray inputImage, OutputArray outputToneMappedImage)=0;
|
||||||
|
|
||||||
|
/** @brief Accessor of the details channel of the retina (models foveal vision).
|
||||||
|
|
||||||
|
Warning, getParvoRAW methods return buffers that are not rescaled within range [0;255] while
|
||||||
|
the non RAW method allows a normalized matrix to be retrieved.
|
||||||
|
|
||||||
|
@param retinaOutput_parvo the output buffer (reallocated if necessary), format can be :
|
||||||
|
- a Mat, this output is rescaled for standard 8bits image processing use in OpenCV
|
||||||
|
- RAW methods actually return a 1D matrix (encoding is R1, R2, ... Rn, G1, G2, ..., Gn, B1,
|
||||||
|
B2, ...Bn), this output is the original retina filter model output, without any
|
||||||
|
quantification or rescaling.
|
||||||
|
@see getParvoRAW
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void getParvo(OutputArray retinaOutput_parvo)=0;
|
||||||
|
|
||||||
|
/** @brief Accessor of the details channel of the retina (models foveal vision).
|
||||||
|
@see getParvo
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void getParvoRAW(OutputArray retinaOutput_parvo)=0;
|
||||||
|
|
||||||
|
/** @brief Accessor of the motion channel of the retina (models peripheral vision).
|
||||||
|
|
||||||
|
Warning, getMagnoRAW methods return buffers that are not rescaled within range [0;255] while
|
||||||
|
the non RAW method allows a normalized matrix to be retrieved.
|
||||||
|
@param retinaOutput_magno the output buffer (reallocated if necessary), format can be :
|
||||||
|
- a Mat, this output is rescaled for standard 8bits image processing use in OpenCV
|
||||||
|
- RAW methods actually return a 1D matrix (encoding is M1, M2,... Mn), this output is the
|
||||||
|
original retina filter model output, without any quantification or rescaling.
|
||||||
|
@see getMagnoRAW
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void getMagno(OutputArray retinaOutput_magno)=0;
|
||||||
|
|
||||||
|
/** @brief Accessor of the motion channel of the retina (models peripheral vision).
|
||||||
|
@see getMagno
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void getMagnoRAW(OutputArray retinaOutput_magno)=0;
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
|
CV_WRAP virtual const Mat getMagnoRAW() const=0;
|
||||||
|
/** @overload */
|
||||||
|
CV_WRAP virtual const Mat getParvoRAW() const=0;
|
||||||
|
|
||||||
|
/** @brief Activate color saturation as the final step of the color demultiplexing process -\> this
|
||||||
|
saturation is a sigmoide function applied to each channel of the demultiplexed image.
|
||||||
|
@param saturateColors boolean that activates color saturation (if true) or desactivate (if false)
|
||||||
|
@param colorSaturationValue the saturation factor : a simple factor applied on the chrominance
|
||||||
|
buffers
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setColorSaturation(const bool saturateColors=true, const float colorSaturationValue=4.0f)=0;
|
||||||
|
|
||||||
|
/** @brief Clears all retina buffers
|
||||||
|
|
||||||
|
(equivalent to opening the eyes after a long period of eye close ;o) whatchout the temporal
|
||||||
|
transition occuring just after this method call.
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void clearBuffers()=0;
|
||||||
|
|
||||||
|
/** @brief Activate/desactivate the Magnocellular pathway processing (motion information extraction), by
|
||||||
|
default, it is activated
|
||||||
|
@param activate true if Magnocellular output should be activated, false if not... if activated,
|
||||||
|
the Magnocellular output can be retrieved using the **getMagno** methods
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void activateMovingContoursProcessing(const bool activate)=0;
|
||||||
|
|
||||||
|
/** @brief Activate/desactivate the Parvocellular pathway processing (contours information extraction), by
|
||||||
|
default, it is activated
|
||||||
|
@param activate true if Parvocellular (contours information extraction) output should be
|
||||||
|
activated, false if not... if activated, the Parvocellular output can be retrieved using the
|
||||||
|
Retina::getParvo methods
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void activateContoursProcessing(const bool activate)=0;
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
|
CV_WRAP static Ptr<Retina> create(Size inputSize);
|
||||||
|
/** @brief Constructors from standardized interfaces : retreive a smart pointer to a Retina instance
|
||||||
|
|
||||||
|
@param inputSize the input frame size
|
||||||
|
@param colorMode the chosen processing mode : with or without color processing
|
||||||
|
@param colorSamplingMethod specifies which kind of color sampling will be used :
|
||||||
|
- cv::bioinspired::RETINA_COLOR_RANDOM: each pixel position is either R, G or B in a random choice
|
||||||
|
- cv::bioinspired::RETINA_COLOR_DIAGONAL: color sampling is RGBRGBRGB..., line 2 BRGBRGBRG..., line 3, GBRGBRGBR...
|
||||||
|
- cv::bioinspired::RETINA_COLOR_BAYER: standard bayer sampling
|
||||||
|
@param useRetinaLogSampling activate retina log sampling, if true, the 2 following parameters can
|
||||||
|
be used
|
||||||
|
@param reductionFactor only usefull if param useRetinaLogSampling=true, specifies the reduction
|
||||||
|
factor of the output frame (as the center (fovea) is high resolution and corners can be
|
||||||
|
underscaled, then a reduction of the output is allowed without precision leak
|
||||||
|
@param samplingStrength only usefull if param useRetinaLogSampling=true, specifies the strength of
|
||||||
|
the log scale that is applied
|
||||||
|
*/
|
||||||
|
CV_WRAP static Ptr<Retina> create(Size inputSize, const bool colorMode,
|
||||||
|
int colorSamplingMethod=RETINA_COLOR_BAYER,
|
||||||
|
const bool useRetinaLogSampling=false,
|
||||||
|
const float reductionFactor=1.0f, const float samplingStrength=10.0f);
|
||||||
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* __OPENCV_BIOINSPIRED_RETINA_HPP__ */
|
138
3rdparty/opencv/inc/opencv2/bioinspired/retinafasttonemapping.hpp
vendored
Normal file
138
3rdparty/opencv/inc/opencv2/bioinspired/retinafasttonemapping.hpp
vendored
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
|
||||||
|
/*#******************************************************************************
|
||||||
|
** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
**
|
||||||
|
** By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
** If you do not agree to this license, do not download, install,
|
||||||
|
** copy or use the software.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** bioinspired : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab.
|
||||||
|
**
|
||||||
|
** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications)
|
||||||
|
**
|
||||||
|
** Creation - enhancement process 2007-2013
|
||||||
|
** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France
|
||||||
|
**
|
||||||
|
** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr).
|
||||||
|
** Refer to the following research paper for more information:
|
||||||
|
** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011
|
||||||
|
** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book:
|
||||||
|
** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** This class is based on image processing tools of the author and already used within the Retina class (this is the same code as method retina::applyFastToneMapping, but in an independent class, it is ligth from a memory requirement point of view). It implements an adaptation of the efficient tone mapping algorithm propose by David Alleyson, Sabine Susstruck and Laurence Meylan's work, please cite:
|
||||||
|
** -> Meylan L., Alleysson D., and Susstrunk S., A Model of Retinal Local Adaptation for the Tone Mapping of Color Filter Array Images, Journal of Optical Society of America, A, Vol. 24, N 9, September, 1st, 2007, pp. 2807-2816
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** License Agreement
|
||||||
|
** For Open Source Computer Vision Library
|
||||||
|
**
|
||||||
|
** Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||||
|
** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved.
|
||||||
|
**
|
||||||
|
** For Human Visual System tools (bioinspired)
|
||||||
|
** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved.
|
||||||
|
**
|
||||||
|
** Third party copyrights are property of their respective owners.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
** are permitted provided that the following conditions are met:
|
||||||
|
**
|
||||||
|
** * Redistributions of source code must retain the above copyright notice,
|
||||||
|
** this list of conditions and the following disclaimer.
|
||||||
|
**
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
** this list of conditions and the following disclaimer in the documentation
|
||||||
|
** and/or other materials provided with the distribution.
|
||||||
|
**
|
||||||
|
** * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
** any express or implied warranties, including, but not limited to, the implied
|
||||||
|
** warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
** In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
** indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
** (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
** loss of use, data, or profits; or business interruption) however caused
|
||||||
|
** and on any theory of liability, whether in contract, strict liability,
|
||||||
|
** or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
** the use of this software, even if advised of the possibility of such damage.
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __OPENCV_BIOINSPIRED_RETINAFASTTONEMAPPING_HPP__
|
||||||
|
#define __OPENCV_BIOINSPIRED_RETINAFASTTONEMAPPING_HPP__
|
||||||
|
|
||||||
|
/**
|
||||||
|
@file
|
||||||
|
@date May 26, 2013
|
||||||
|
@author Alexandre Benoit
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "opencv2/core.hpp" // for all OpenCV core functionalities access, including cv::Exception support
|
||||||
|
|
||||||
|
namespace cv{
|
||||||
|
namespace bioinspired{
|
||||||
|
|
||||||
|
//! @addtogroup bioinspired
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief a wrapper class which allows the tone mapping algorithm of Meylan&al(2007) to be used with OpenCV.
|
||||||
|
|
||||||
|
This algorithm is already implemented in thre Retina class (retina::applyFastToneMapping) but used it does not require all the retina model to be allocated. This allows a light memory use for low memory devices (smartphones, etc.
|
||||||
|
As a summary, these are the model properties:
|
||||||
|
- 2 stages of local luminance adaptation with a different local neighborhood for each.
|
||||||
|
- first stage models the retina photorecetors local luminance adaptation
|
||||||
|
- second stage models th ganglion cells local information adaptation
|
||||||
|
- compared to the initial publication, this class uses spatio-temporal low pass filters instead of spatial only filters.
|
||||||
|
this can help noise robustness and temporal stability for video sequence use cases.
|
||||||
|
|
||||||
|
for more information, read to the following papers :
|
||||||
|
Meylan L., Alleysson D., and Susstrunk S., A Model of Retinal Local Adaptation for the Tone Mapping of Color Filter Array Images, Journal of Optical Society of America, A, Vol. 24, N 9, September, 1st, 2007, pp. 2807-2816Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011
|
||||||
|
regarding spatio-temporal filter and the bigger retina model :
|
||||||
|
Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891.
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS_W RetinaFastToneMapping : public Algorithm
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/** @brief applies a luminance correction (initially High Dynamic Range (HDR) tone mapping)
|
||||||
|
|
||||||
|
using only the 2 local adaptation stages of the retina parvocellular channel : photoreceptors
|
||||||
|
level and ganlion cells level. Spatio temporal filtering is applied but limited to temporal
|
||||||
|
smoothing and eventually high frequencies attenuation. This is a lighter method than the one
|
||||||
|
available using the regular retina::run method. It is then faster but it does not include
|
||||||
|
complete temporal filtering nor retina spectral whitening. Then, it can have a more limited
|
||||||
|
effect on images with a very high dynamic range. This is an adptation of the original still
|
||||||
|
image HDR tone mapping algorithm of David Alleyson, Sabine Susstruck and Laurence Meylan's
|
||||||
|
work, please cite: -> Meylan L., Alleysson D., and Susstrunk S., A Model of Retinal Local
|
||||||
|
Adaptation for the Tone Mapping of Color Filter Array Images, Journal of Optical Society of
|
||||||
|
America, A, Vol. 24, N 9, September, 1st, 2007, pp. 2807-2816
|
||||||
|
|
||||||
|
@param inputImage the input image to process RGB or gray levels
|
||||||
|
@param outputToneMappedImage the output tone mapped image
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void applyFastToneMapping(InputArray inputImage, OutputArray outputToneMappedImage)=0;
|
||||||
|
|
||||||
|
/** @brief updates tone mapping behaviors by adjusing the local luminance computation area
|
||||||
|
|
||||||
|
@param photoreceptorsNeighborhoodRadius the first stage local adaptation area
|
||||||
|
@param ganglioncellsNeighborhoodRadius the second stage local adaptation area
|
||||||
|
@param meanLuminanceModulatorK the factor applied to modulate the meanLuminance information
|
||||||
|
(default is 1, see reference paper)
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setup(const float photoreceptorsNeighborhoodRadius=3.f, const float ganglioncellsNeighborhoodRadius=1.f, const float meanLuminanceModulatorK=1.f)=0;
|
||||||
|
|
||||||
|
CV_WRAP static Ptr<RetinaFastToneMapping> create(Size inputSize);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* __OPENCV_BIOINSPIRED_RETINAFASTTONEMAPPING_HPP__ */
|
204
3rdparty/opencv/inc/opencv2/bioinspired/transientareassegmentationmodule.hpp
vendored
Normal file
204
3rdparty/opencv/inc/opencv2/bioinspired/transientareassegmentationmodule.hpp
vendored
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
/*#******************************************************************************
|
||||||
|
** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
**
|
||||||
|
** By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
** If you do not agree to this license, do not download, install,
|
||||||
|
** copy or use the software.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** bioinspired : interfaces allowing OpenCV users to integrate Human Vision System models.
|
||||||
|
** TransientAreasSegmentationModule Use: extract areas that present spatio-temporal changes.
|
||||||
|
** => It should be used at the output of the cv::bioinspired::Retina::getMagnoRAW() output that enhances spatio-temporal changes
|
||||||
|
**
|
||||||
|
** Maintainers : Listic lab (code author current affiliation & applications)
|
||||||
|
**
|
||||||
|
** Creation - enhancement process 2007-2015
|
||||||
|
** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France
|
||||||
|
**
|
||||||
|
** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr).
|
||||||
|
** Refer to the following research paper for more information:
|
||||||
|
** Strat, S.T.; Benoit, A.; Lambert, P., "Retina enhanced bag of words descriptors for video classification," Signal Processing Conference (EUSIPCO), 2014 Proceedings of the 22nd European , vol., no., pp.1307,1311, 1-5 Sept. 2014 (http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6952461&isnumber=6951911)
|
||||||
|
** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011
|
||||||
|
** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book:
|
||||||
|
** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** License Agreement
|
||||||
|
** For Open Source Computer Vision Library
|
||||||
|
**
|
||||||
|
** Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||||
|
** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved.
|
||||||
|
**
|
||||||
|
** For Human Visual System tools (bioinspired)
|
||||||
|
** Copyright (C) 2007-2015, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved.
|
||||||
|
**
|
||||||
|
** Third party copyrights are property of their respective owners.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
** are permitted provided that the following conditions are met:
|
||||||
|
**
|
||||||
|
** * Redistributions of source code must retain the above copyright notice,
|
||||||
|
** this list of conditions and the following disclaimer.
|
||||||
|
**
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
** this list of conditions and the following disclaimer in the documentation
|
||||||
|
** and/or other materials provided with the distribution.
|
||||||
|
**
|
||||||
|
** * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
** any express or implied warranties, including, but not limited to, the implied
|
||||||
|
** warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
** In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
** indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
** (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
** loss of use, data, or profits; or business interruption) however caused
|
||||||
|
** and on any theory of liability, whether in contract, strict liability,
|
||||||
|
** or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
** the use of this software, even if advised of the possibility of such damage.
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef SEGMENTATIONMODULE_HPP_
|
||||||
|
#define SEGMENTATIONMODULE_HPP_
|
||||||
|
|
||||||
|
/**
|
||||||
|
@file
|
||||||
|
@date 2007-2013
|
||||||
|
@author Alexandre BENOIT, benoit.alexandre.vision@gmail.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "opencv2/core.hpp" // for all OpenCV core functionalities access, including cv::Exception support
|
||||||
|
|
||||||
|
namespace cv
|
||||||
|
{
|
||||||
|
namespace bioinspired
|
||||||
|
{
|
||||||
|
//! @addtogroup bioinspired
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief parameter structure that stores the transient events detector setup parameters
|
||||||
|
*/
|
||||||
|
struct SegmentationParameters{ // CV_EXPORTS_W_MAP to export to python native dictionnaries
|
||||||
|
// default structure instance construction with default values
|
||||||
|
SegmentationParameters():
|
||||||
|
thresholdON(100),
|
||||||
|
thresholdOFF(100),
|
||||||
|
localEnergy_temporalConstant(0.5),
|
||||||
|
localEnergy_spatialConstant(5),
|
||||||
|
neighborhoodEnergy_temporalConstant(1),
|
||||||
|
neighborhoodEnergy_spatialConstant(15),
|
||||||
|
contextEnergy_temporalConstant(1),
|
||||||
|
contextEnergy_spatialConstant(75){};
|
||||||
|
// all properties list
|
||||||
|
float thresholdON;
|
||||||
|
float thresholdOFF;
|
||||||
|
//! the time constant of the first order low pass filter, use it to cut high temporal frequencies (noise or fast motion), unit is frames, typical value is 0.5 frame
|
||||||
|
float localEnergy_temporalConstant;
|
||||||
|
//! the spatial constant of the first order low pass filter, use it to cut high spatial frequencies (noise or thick contours), unit is pixels, typical value is 5 pixel
|
||||||
|
float localEnergy_spatialConstant;
|
||||||
|
//! local neighborhood energy filtering parameters : the aim is to get information about the energy neighborhood to perform a center surround energy analysis
|
||||||
|
float neighborhoodEnergy_temporalConstant;
|
||||||
|
float neighborhoodEnergy_spatialConstant;
|
||||||
|
//! context neighborhood energy filtering parameters : the aim is to get information about the energy on a wide neighborhood area to filtered out local effects
|
||||||
|
float contextEnergy_temporalConstant;
|
||||||
|
float contextEnergy_spatialConstant;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @brief class which provides a transient/moving areas segmentation module
|
||||||
|
|
||||||
|
perform a locally adapted segmentation by using the retina magno input data Based on Alexandre
|
||||||
|
BENOIT thesis: "Le système visuel humain au secours de la vision par ordinateur"
|
||||||
|
|
||||||
|
3 spatio temporal filters are used:
|
||||||
|
- a first one which filters the noise and local variations of the input motion energy
|
||||||
|
- a second (more powerfull low pass spatial filter) which gives the neighborhood motion energy the
|
||||||
|
segmentation consists in the comparison of these both outputs, if the local motion energy is higher
|
||||||
|
to the neighborhood otion energy, then the area is considered as moving and is segmented
|
||||||
|
- a stronger third low pass filter helps decision by providing a smooth information about the
|
||||||
|
"motion context" in a wider area
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CV_EXPORTS_W TransientAreasSegmentationModule: public Algorithm
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
/** @brief return the sze of the manage input and output images
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual Size getSize()=0;
|
||||||
|
|
||||||
|
/** @brief try to open an XML segmentation parameters file to adjust current segmentation instance setup
|
||||||
|
|
||||||
|
- if the xml file does not exist, then default setup is applied
|
||||||
|
- warning, Exceptions are thrown if read XML file is not valid
|
||||||
|
@param segmentationParameterFile : the parameters filename
|
||||||
|
@param applyDefaultSetupOnFailure : set to true if an error must be thrown on error
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void setup(String segmentationParameterFile="", const bool applyDefaultSetupOnFailure=true)=0;
|
||||||
|
|
||||||
|
/** @brief try to open an XML segmentation parameters file to adjust current segmentation instance setup
|
||||||
|
|
||||||
|
- if the xml file does not exist, then default setup is applied
|
||||||
|
- warning, Exceptions are thrown if read XML file is not valid
|
||||||
|
@param fs : the open Filestorage which contains segmentation parameters
|
||||||
|
@param applyDefaultSetupOnFailure : set to true if an error must be thrown on error
|
||||||
|
*/
|
||||||
|
virtual void setup(cv::FileStorage &fs, const bool applyDefaultSetupOnFailure=true)=0;
|
||||||
|
|
||||||
|
/** @brief try to open an XML segmentation parameters file to adjust current segmentation instance setup
|
||||||
|
|
||||||
|
- if the xml file does not exist, then default setup is applied
|
||||||
|
- warning, Exceptions are thrown if read XML file is not valid
|
||||||
|
@param newParameters : a parameters structures updated with the new target configuration
|
||||||
|
*/
|
||||||
|
virtual void setup(SegmentationParameters newParameters)=0;
|
||||||
|
|
||||||
|
/** @brief return the current parameters setup
|
||||||
|
*/
|
||||||
|
virtual SegmentationParameters getParameters()=0;
|
||||||
|
|
||||||
|
/** @brief parameters setup display method
|
||||||
|
@return a string which contains formatted parameters information
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual const String printSetup()=0;
|
||||||
|
|
||||||
|
/** @brief write xml/yml formated parameters information
|
||||||
|
@param fs : the filename of the xml file that will be open and writen with formatted parameters information
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void write( String fs ) const=0;
|
||||||
|
|
||||||
|
/** @brief write xml/yml formated parameters information
|
||||||
|
@param fs : a cv::Filestorage object ready to be filled
|
||||||
|
*/
|
||||||
|
virtual void write( cv::FileStorage& fs ) const CV_OVERRIDE = 0;
|
||||||
|
|
||||||
|
/** @brief main processing method, get result using methods getSegmentationPicture()
|
||||||
|
@param inputToSegment : the image to process, it must match the instance buffer size !
|
||||||
|
@param channelIndex : the channel to process in case of multichannel images
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void run(InputArray inputToSegment, const int channelIndex=0)=0;
|
||||||
|
|
||||||
|
/** @brief access function
|
||||||
|
return the last segmentation result: a boolean picture which is resampled between 0 and 255 for a display purpose
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void getSegmentationPicture(OutputArray transientAreas)=0;
|
||||||
|
|
||||||
|
/** @brief cleans all the buffers of the instance
|
||||||
|
*/
|
||||||
|
CV_WRAP virtual void clearAllBuffers()=0;
|
||||||
|
|
||||||
|
/** @brief allocator
|
||||||
|
@param inputSize : size of the images input to segment (output will be the same size)
|
||||||
|
*/
|
||||||
|
CV_WRAP static Ptr<TransientAreasSegmentationModule> create(Size inputSize);
|
||||||
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
|
}} // namespaces end : cv and bioinspired
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
4253
3rdparty/opencv/inc/opencv2/calib3d.hpp
vendored
Normal file
4253
3rdparty/opencv/inc/opencv2/calib3d.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
48
3rdparty/opencv/inc/opencv2/calib3d/calib3d.hpp
vendored
Normal file
48
3rdparty/opencv/inc/opencv2/calib3d/calib3d.hpp
vendored
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
//
|
||||||
|
// By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
// If you do not agree to this license, do not download, install,
|
||||||
|
// copy or use the software.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// License Agreement
|
||||||
|
// For Open Source Computer Vision Library
|
||||||
|
//
|
||||||
|
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||||
|
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
||||||
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
|
// Third party copyrights are property of their respective owners.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistribution's of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
// any express or implied warranties, including, but not limited to, the implied
|
||||||
|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
// indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
// (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
// loss of use, data, or profits; or business interruption) however caused
|
||||||
|
// and on any theory of liability, whether in contract, strict liability,
|
||||||
|
// or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
// the use of this software, even if advised of the possibility of such damage.
|
||||||
|
//
|
||||||
|
//M*/
|
||||||
|
|
||||||
|
#ifdef __OPENCV_BUILD
|
||||||
|
#error this is a compatibility header which should not be used inside the OpenCV library
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "opencv2/calib3d.hpp"
|
150
3rdparty/opencv/inc/opencv2/calib3d/calib3d_c.h
vendored
Normal file
150
3rdparty/opencv/inc/opencv2/calib3d/calib3d_c.h
vendored
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
//
|
||||||
|
// By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
// If you do not agree to this license, do not download, install,
|
||||||
|
// copy or use the software.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// License Agreement
|
||||||
|
// For Open Source Computer Vision Library
|
||||||
|
//
|
||||||
|
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||||
|
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
||||||
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
|
// Third party copyrights are property of their respective owners.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistribution's of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
// any express or implied warranties, including, but not limited to, the implied
|
||||||
|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
// indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
// (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
// loss of use, data, or profits; or business interruption) however caused
|
||||||
|
// and on any theory of liability, whether in contract, strict liability,
|
||||||
|
// or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
// the use of this software, even if advised of the possibility of such damage.
|
||||||
|
//
|
||||||
|
//M*/
|
||||||
|
|
||||||
|
#ifndef OPENCV_CALIB3D_C_H
|
||||||
|
#define OPENCV_CALIB3D_C_H
|
||||||
|
|
||||||
|
#include "opencv2/core/types_c.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Calculates fundamental matrix given a set of corresponding points */
|
||||||
|
#define CV_FM_7POINT 1
|
||||||
|
#define CV_FM_8POINT 2
|
||||||
|
|
||||||
|
#define CV_LMEDS 4
|
||||||
|
#define CV_RANSAC 8
|
||||||
|
|
||||||
|
#define CV_FM_LMEDS_ONLY CV_LMEDS
|
||||||
|
#define CV_FM_RANSAC_ONLY CV_RANSAC
|
||||||
|
#define CV_FM_LMEDS CV_LMEDS
|
||||||
|
#define CV_FM_RANSAC CV_RANSAC
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
CV_ITERATIVE = 0,
|
||||||
|
CV_EPNP = 1, // F.Moreno-Noguer, V.Lepetit and P.Fua "EPnP: Efficient Perspective-n-Point Camera Pose Estimation"
|
||||||
|
CV_P3P = 2, // X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang; "Complete Solution Classification for the Perspective-Three-Point Problem"
|
||||||
|
CV_DLS = 3 // Joel A. Hesch and Stergios I. Roumeliotis. "A Direct Least-Squares (DLS) Method for PnP"
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CV_CALIB_CB_ADAPTIVE_THRESH 1
|
||||||
|
#define CV_CALIB_CB_NORMALIZE_IMAGE 2
|
||||||
|
#define CV_CALIB_CB_FILTER_QUADS 4
|
||||||
|
#define CV_CALIB_CB_FAST_CHECK 8
|
||||||
|
|
||||||
|
#define CV_CALIB_USE_INTRINSIC_GUESS 1
|
||||||
|
#define CV_CALIB_FIX_ASPECT_RATIO 2
|
||||||
|
#define CV_CALIB_FIX_PRINCIPAL_POINT 4
|
||||||
|
#define CV_CALIB_ZERO_TANGENT_DIST 8
|
||||||
|
#define CV_CALIB_FIX_FOCAL_LENGTH 16
|
||||||
|
#define CV_CALIB_FIX_K1 32
|
||||||
|
#define CV_CALIB_FIX_K2 64
|
||||||
|
#define CV_CALIB_FIX_K3 128
|
||||||
|
#define CV_CALIB_FIX_K4 2048
|
||||||
|
#define CV_CALIB_FIX_K5 4096
|
||||||
|
#define CV_CALIB_FIX_K6 8192
|
||||||
|
#define CV_CALIB_RATIONAL_MODEL 16384
|
||||||
|
#define CV_CALIB_THIN_PRISM_MODEL 32768
|
||||||
|
#define CV_CALIB_FIX_S1_S2_S3_S4 65536
|
||||||
|
#define CV_CALIB_TILTED_MODEL 262144
|
||||||
|
#define CV_CALIB_FIX_TAUX_TAUY 524288
|
||||||
|
#define CV_CALIB_FIX_TANGENT_DIST 2097152
|
||||||
|
|
||||||
|
#define CV_CALIB_NINTRINSIC 18
|
||||||
|
|
||||||
|
#define CV_CALIB_FIX_INTRINSIC 256
|
||||||
|
#define CV_CALIB_SAME_FOCAL_LENGTH 512
|
||||||
|
|
||||||
|
#define CV_CALIB_ZERO_DISPARITY 1024
|
||||||
|
|
||||||
|
/* stereo correspondence parameters and functions */
|
||||||
|
#define CV_STEREO_BM_NORMALIZED_RESPONSE 0
|
||||||
|
#define CV_STEREO_BM_XSOBEL 1
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // extern "C"
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
class CV_EXPORTS CvLevMarq
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CvLevMarq();
|
||||||
|
CvLevMarq( int nparams, int nerrs, CvTermCriteria criteria=
|
||||||
|
cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON),
|
||||||
|
bool completeSymmFlag=false );
|
||||||
|
~CvLevMarq();
|
||||||
|
void init( int nparams, int nerrs, CvTermCriteria criteria=
|
||||||
|
cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON),
|
||||||
|
bool completeSymmFlag=false );
|
||||||
|
bool update( const CvMat*& param, CvMat*& J, CvMat*& err );
|
||||||
|
bool updateAlt( const CvMat*& param, CvMat*& JtJ, CvMat*& JtErr, double*& errNorm );
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
void step();
|
||||||
|
enum { DONE=0, STARTED=1, CALC_J=2, CHECK_ERR=3 };
|
||||||
|
|
||||||
|
cv::Ptr<CvMat> mask;
|
||||||
|
cv::Ptr<CvMat> prevParam;
|
||||||
|
cv::Ptr<CvMat> param;
|
||||||
|
cv::Ptr<CvMat> J;
|
||||||
|
cv::Ptr<CvMat> err;
|
||||||
|
cv::Ptr<CvMat> JtJ;
|
||||||
|
cv::Ptr<CvMat> JtJN;
|
||||||
|
cv::Ptr<CvMat> JtErr;
|
||||||
|
cv::Ptr<CvMat> JtJV;
|
||||||
|
cv::Ptr<CvMat> JtJW;
|
||||||
|
double prevErrNorm, errNorm;
|
||||||
|
int lambdaLg10;
|
||||||
|
CvTermCriteria criteria;
|
||||||
|
int state;
|
||||||
|
int iters;
|
||||||
|
bool completeSymmFlag;
|
||||||
|
int solveMethod;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* OPENCV_CALIB3D_C_H */
|
157
3rdparty/opencv/inc/opencv2/ccalib.hpp
vendored
Normal file
157
3rdparty/opencv/inc/opencv2/ccalib.hpp
vendored
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
//
|
||||||
|
// By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
// If you do not agree to this license, do not download, install,
|
||||||
|
// copy or use the software.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// License Agreement
|
||||||
|
// For Open Source Computer Vision Library
|
||||||
|
//
|
||||||
|
// Copyright (C) 2014, OpenCV Foundation, all rights reserved.
|
||||||
|
// Third party copyrights are property of their respective owners.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistribution's of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
// any express or implied warranties, including, but not limited to, the implied
|
||||||
|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
// indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
// (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
// loss of use, data, or profits; or business interruption) however caused
|
||||||
|
// and on any theory of liability, whether in contract, strict liability,
|
||||||
|
// or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
// the use of this software, even if advised of the possibility of such damage.
|
||||||
|
//
|
||||||
|
//M*/
|
||||||
|
|
||||||
|
#ifndef __OPENCV_CCALIB_HPP__
|
||||||
|
#define __OPENCV_CCALIB_HPP__
|
||||||
|
|
||||||
|
#include <opencv2/core.hpp>
|
||||||
|
#include <opencv2/features2d.hpp>
|
||||||
|
#include <opencv2/imgproc.hpp>
|
||||||
|
#include <opencv2/calib3d.hpp>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
/** @defgroup ccalib Custom Calibration Pattern for 3D reconstruction
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace cv{ namespace ccalib{
|
||||||
|
|
||||||
|
//! @addtogroup ccalib
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
class CV_EXPORTS CustomPattern : public Algorithm
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CustomPattern();
|
||||||
|
virtual ~CustomPattern();
|
||||||
|
|
||||||
|
bool create(InputArray pattern, const Size2f boardSize, OutputArray output = noArray());
|
||||||
|
|
||||||
|
bool findPattern(InputArray image, OutputArray matched_features, OutputArray pattern_points, const double ratio = 0.7,
|
||||||
|
const double proj_error = 8.0, const bool refine_position = false, OutputArray out = noArray(),
|
||||||
|
OutputArray H = noArray(), OutputArray pattern_corners = noArray());
|
||||||
|
|
||||||
|
bool isInitialized();
|
||||||
|
|
||||||
|
void getPatternPoints(std::vector<KeyPoint>& original_points);
|
||||||
|
/**<
|
||||||
|
Returns a vector<Point> of the original points.
|
||||||
|
*/
|
||||||
|
double getPixelSize();
|
||||||
|
/**<
|
||||||
|
Get the pixel size of the pattern
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool setFeatureDetector(Ptr<FeatureDetector> featureDetector);
|
||||||
|
bool setDescriptorExtractor(Ptr<DescriptorExtractor> extractor);
|
||||||
|
bool setDescriptorMatcher(Ptr<DescriptorMatcher> matcher);
|
||||||
|
|
||||||
|
Ptr<FeatureDetector> getFeatureDetector();
|
||||||
|
Ptr<DescriptorExtractor> getDescriptorExtractor();
|
||||||
|
Ptr<DescriptorMatcher> getDescriptorMatcher();
|
||||||
|
|
||||||
|
double calibrate(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints,
|
||||||
|
Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs,
|
||||||
|
OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags = 0,
|
||||||
|
TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 30, DBL_EPSILON));
|
||||||
|
/**<
|
||||||
|
Calls the calirateCamera function with the same inputs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool findRt(InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs,
|
||||||
|
InputOutputArray rvec, InputOutputArray tvec, bool useExtrinsicGuess = false, int flags = SOLVEPNP_ITERATIVE);
|
||||||
|
bool findRt(InputArray image, InputArray cameraMatrix, InputArray distCoeffs,
|
||||||
|
InputOutputArray rvec, InputOutputArray tvec, bool useExtrinsicGuess = false, int flags = SOLVEPNP_ITERATIVE);
|
||||||
|
/**<
|
||||||
|
Uses solvePnP to find the rotation and translation of the pattern
|
||||||
|
with respect to the camera frame.
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool findRtRANSAC(InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs,
|
||||||
|
InputOutputArray rvec, InputOutputArray tvec, bool useExtrinsicGuess = false, int iterationsCount = 100,
|
||||||
|
float reprojectionError = 8.0, int minInliersCount = 100, OutputArray inliers = noArray(), int flags = SOLVEPNP_ITERATIVE);
|
||||||
|
bool findRtRANSAC(InputArray image, InputArray cameraMatrix, InputArray distCoeffs,
|
||||||
|
InputOutputArray rvec, InputOutputArray tvec, bool useExtrinsicGuess = false, int iterationsCount = 100,
|
||||||
|
float reprojectionError = 8.0, int minInliersCount = 100, OutputArray inliers = noArray(), int flags = SOLVEPNP_ITERATIVE);
|
||||||
|
/**<
|
||||||
|
Uses solvePnPRansac()
|
||||||
|
*/
|
||||||
|
|
||||||
|
void drawOrientation(InputOutputArray image, InputArray tvec, InputArray rvec, InputArray cameraMatrix,
|
||||||
|
InputArray distCoeffs, double axis_length = 3, int axis_width = 2);
|
||||||
|
/**<
|
||||||
|
pattern_corners -> projected over the image position of the edges of the pattern.
|
||||||
|
*/
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
Mat img_roi;
|
||||||
|
std::vector<Point2f> obj_corners;
|
||||||
|
double pxSize;
|
||||||
|
|
||||||
|
bool initialized;
|
||||||
|
|
||||||
|
Ptr<FeatureDetector> detector;
|
||||||
|
Ptr<DescriptorExtractor> descriptorExtractor;
|
||||||
|
Ptr<DescriptorMatcher> descriptorMatcher;
|
||||||
|
|
||||||
|
std::vector<KeyPoint> keypoints;
|
||||||
|
std::vector<Point3f> points3d;
|
||||||
|
Mat descriptor;
|
||||||
|
|
||||||
|
bool init(Mat& image, const float pixel_size, OutputArray output = noArray());
|
||||||
|
bool findPatternPass(const Mat& image, std::vector<Point2f>& matched_features, std::vector<Point3f>& pattern_points,
|
||||||
|
Mat& H, std::vector<Point2f>& scene_corners, const double pratio, const double proj_error,
|
||||||
|
const bool refine_position = false, const Mat& mask = Mat(), OutputArray output = noArray());
|
||||||
|
void scaleFoundPoints(const double squareSize, const std::vector<KeyPoint>& corners, std::vector<Point3f>& pts3d);
|
||||||
|
void check_matches(std::vector<Point2f>& matched, const std::vector<Point2f>& pattern, std::vector<DMatch>& good, std::vector<Point3f>& pattern_3d, const Mat& H);
|
||||||
|
|
||||||
|
void keypoints2points(const std::vector<KeyPoint>& in, std::vector<Point2f>& out);
|
||||||
|
void updateKeypointsPos(std::vector<KeyPoint>& in, const std::vector<Point2f>& new_pos);
|
||||||
|
void refinePointsPos(const Mat& img, std::vector<Point2f>& p);
|
||||||
|
void refineKeypointsPos(const Mat& img, std::vector<KeyPoint>& kp);
|
||||||
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
|
}} // namespace ccalib, cv
|
||||||
|
|
||||||
|
#endif
|
212
3rdparty/opencv/inc/opencv2/ccalib/multicalib.hpp
vendored
Normal file
212
3rdparty/opencv/inc/opencv2/ccalib/multicalib.hpp
vendored
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
//
|
||||||
|
// By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
// If you do not agree to this license, do not download, install,
|
||||||
|
// copy or use the software.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// License Agreement
|
||||||
|
// For Open Source Computer Vision Library
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015, Baisheng Lai (laibaisheng@gmail.com), Zhejiang University,
|
||||||
|
// all rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistribution's of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
// any express or implied warranties, including, but not limited to, the implied
|
||||||
|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
// indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
// (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
// loss of use, data, or profits; or business interruption) however caused
|
||||||
|
// and on any theory of liability, whether in contract, strict liability,
|
||||||
|
// or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
// the use of this software, even if advised of the possibility of such damage.
|
||||||
|
//
|
||||||
|
//M*/
|
||||||
|
|
||||||
|
#ifndef __OPENCV_MULTICAMERACALIBRATION_HPP__
|
||||||
|
#define __OPENCV_MULTICAMERACALIBRATION_HPP__
|
||||||
|
|
||||||
|
#include "opencv2/ccalib/randpattern.hpp"
|
||||||
|
#include "opencv2/ccalib/omnidir.hpp"
|
||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace cv { namespace multicalib {
|
||||||
|
|
||||||
|
//! @addtogroup ccalib
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
#define HEAD -1
|
||||||
|
#define INVALID -2
|
||||||
|
|
||||||
|
/** @brief Class for multiple camera calibration that supports pinhole camera and omnidirection camera.
|
||||||
|
For omnidirectional camera model, please refer to omnidir.hpp in ccalib module.
|
||||||
|
It first calibrate each camera individually, then a bundle adjustment like optimization is applied to
|
||||||
|
refine extrinsic parameters. So far, it only support "random" pattern for calibration,
|
||||||
|
see randomPattern.hpp in ccalib module for details.
|
||||||
|
Images that are used should be named by "cameraIdx-timestamp.*", several images with the same timestamp
|
||||||
|
means that they are the same pattern that are photographed. cameraIdx should start from 0.
|
||||||
|
|
||||||
|
For more details, please refer to paper
|
||||||
|
B. Li, L. Heng, K. Kevin and M. Pollefeys, "A Multiple-Camera System
|
||||||
|
Calibration Toolbox Using A Feature Descriptor-Based Calibration
|
||||||
|
Pattern", in IROS 2013.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CV_EXPORTS MultiCameraCalibration
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum {
|
||||||
|
PINHOLE,
|
||||||
|
OMNIDIRECTIONAL
|
||||||
|
//FISHEYE
|
||||||
|
};
|
||||||
|
|
||||||
|
// an edge connects a camera and pattern
|
||||||
|
struct edge
|
||||||
|
{
|
||||||
|
int cameraVertex; // vertex index for camera in this edge
|
||||||
|
int photoVertex; // vertex index for pattern in this edge
|
||||||
|
int photoIndex; // photo index among photos for this camera
|
||||||
|
Mat transform; // transform from pattern to camera
|
||||||
|
|
||||||
|
edge(int cv, int pv, int pi, Mat trans)
|
||||||
|
{
|
||||||
|
cameraVertex = cv;
|
||||||
|
photoVertex = pv;
|
||||||
|
photoIndex = pi;
|
||||||
|
transform = trans;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct vertex
|
||||||
|
{
|
||||||
|
Mat pose; // relative pose to the first camera. For camera vertex, it is the
|
||||||
|
// transform from the first camera to this camera, for pattern vertex,
|
||||||
|
// it is the transform from pattern to the first camera
|
||||||
|
int timestamp; // timestamp of photo, only available for photo vertex
|
||||||
|
|
||||||
|
vertex(Mat po, int ts)
|
||||||
|
{
|
||||||
|
pose = po;
|
||||||
|
timestamp = ts;
|
||||||
|
}
|
||||||
|
|
||||||
|
vertex()
|
||||||
|
{
|
||||||
|
pose = Mat::eye(4, 4, CV_32F);
|
||||||
|
timestamp = -1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/* @brief Constructor
|
||||||
|
@param cameraType camera type, PINHOLE or OMNIDIRECTIONAL
|
||||||
|
@param nCameras number of cameras
|
||||||
|
@fileName filename of string list that are used for calibration, the file is generated
|
||||||
|
by imagelist_creator from OpenCv samples. The first one in the list is the pattern filename.
|
||||||
|
@patternWidth the physical width of pattern, in user defined unit.
|
||||||
|
@patternHeight the physical height of pattern, in user defined unit.
|
||||||
|
@showExtration whether show extracted features and feature filtering.
|
||||||
|
@nMiniMatches minimal number of matched features for a frame.
|
||||||
|
@flags Calibration flags
|
||||||
|
@criteria optimization stopping criteria.
|
||||||
|
@detector feature detector that detect feature points in pattern and images.
|
||||||
|
@descriptor feature descriptor.
|
||||||
|
@matcher feature matcher.
|
||||||
|
*/
|
||||||
|
MultiCameraCalibration(int cameraType, int nCameras, const std::string& fileName, float patternWidth,
|
||||||
|
float patternHeight, int verbose = 0, int showExtration = 0, int nMiniMatches = 20, int flags = 0,
|
||||||
|
TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 200, 1e-7),
|
||||||
|
Ptr<FeatureDetector> detector = AKAZE::create(AKAZE::DESCRIPTOR_MLDB, 0, 3, 0.006f),
|
||||||
|
Ptr<DescriptorExtractor> descriptor = AKAZE::create(AKAZE::DESCRIPTOR_MLDB,0, 3, 0.006f),
|
||||||
|
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce-L1"));
|
||||||
|
|
||||||
|
/* @brief load images
|
||||||
|
*/
|
||||||
|
void loadImages();
|
||||||
|
|
||||||
|
/* @brief initialize multiple camera calibration. It calibrates each camera individually.
|
||||||
|
*/
|
||||||
|
void initialize();
|
||||||
|
|
||||||
|
/* @brief optimization extrinsic parameters
|
||||||
|
*/
|
||||||
|
double optimizeExtrinsics();
|
||||||
|
|
||||||
|
/* @brief run multi-camera camera calibration, it runs loadImage(), initialize() and optimizeExtrinsics()
|
||||||
|
*/
|
||||||
|
double run();
|
||||||
|
|
||||||
|
/* @brief write camera parameters to file.
|
||||||
|
*/
|
||||||
|
void writeParameters(const std::string& filename);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<std::string> readStringList();
|
||||||
|
|
||||||
|
int getPhotoVertex(int timestamp);
|
||||||
|
|
||||||
|
void graphTraverse(const Mat& G, int begin, std::vector<int>& order, std::vector<int>& pre);
|
||||||
|
|
||||||
|
void findRowNonZero(const Mat& row, Mat& idx);
|
||||||
|
|
||||||
|
void computeJacobianExtrinsic(const Mat& extrinsicParams, Mat& JTJ_inv, Mat& JTE);
|
||||||
|
|
||||||
|
void computePhotoCameraJacobian(const Mat& rvecPhoto, const Mat& tvecPhoto, const Mat& rvecCamera,
|
||||||
|
const Mat& tvecCamera, Mat& rvecTran, Mat& tvecTran, const Mat& objectPoints, const Mat& imagePoints, const Mat& K,
|
||||||
|
const Mat& distort, const Mat& xi, Mat& jacobianPhoto, Mat& jacobianCamera, Mat& E);
|
||||||
|
|
||||||
|
void compose_motion(InputArray _om1, InputArray _T1, InputArray _om2, InputArray _T2, Mat& om3, Mat& T3, Mat& dom3dom1,
|
||||||
|
Mat& dom3dT1, Mat& dom3dom2, Mat& dom3dT2, Mat& dT3dom1, Mat& dT3dT1, Mat& dT3dom2, Mat& dT3dT2);
|
||||||
|
|
||||||
|
void JRodriguesMatlab(const Mat& src, Mat& dst);
|
||||||
|
void dAB(InputArray A, InputArray B, OutputArray dABdA, OutputArray dABdB);
|
||||||
|
|
||||||
|
double computeProjectError(Mat& parameters);
|
||||||
|
|
||||||
|
void vector2parameters(const Mat& parameters, std::vector<Vec3f>& rvecVertex, std::vector<Vec3f>& tvecVertexs);
|
||||||
|
void parameters2vector(const std::vector<Vec3f>& rvecVertex, const std::vector<Vec3f>& tvecVertex, Mat& parameters);
|
||||||
|
|
||||||
|
int _camType; //PINHOLE, FISHEYE or OMNIDIRECTIONAL
|
||||||
|
int _nCamera;
|
||||||
|
int _nMiniMatches;
|
||||||
|
int _flags;
|
||||||
|
int _verbose;
|
||||||
|
double _error;
|
||||||
|
float _patternWidth, _patternHeight;
|
||||||
|
TermCriteria _criteria;
|
||||||
|
std::string _filename;
|
||||||
|
int _showExtraction;
|
||||||
|
Ptr<FeatureDetector> _detector;
|
||||||
|
Ptr<DescriptorExtractor> _descriptor;
|
||||||
|
Ptr<DescriptorMatcher> _matcher;
|
||||||
|
|
||||||
|
std::vector<edge> _edgeList;
|
||||||
|
std::vector<vertex> _vertexList;
|
||||||
|
std::vector<std::vector<cv::Mat> > _objectPointsForEachCamera;
|
||||||
|
std::vector<std::vector<cv::Mat> > _imagePointsForEachCamera;
|
||||||
|
std::vector<cv::Mat> _cameraMatrix;
|
||||||
|
std::vector<cv::Mat> _distortCoeffs;
|
||||||
|
std::vector<cv::Mat> _xi;
|
||||||
|
std::vector<std::vector<Mat> > _omEachCamera, _tEachCamera;
|
||||||
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
|
}} // namespace multicalib, cv
|
||||||
|
#endif
|
315
3rdparty/opencv/inc/opencv2/ccalib/omnidir.hpp
vendored
Normal file
315
3rdparty/opencv/inc/opencv2/ccalib/omnidir.hpp
vendored
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
//
|
||||||
|
// By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
// If you do not agree to this license, do not download, install,
|
||||||
|
// copy or use the software.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// License Agreement
|
||||||
|
// For Open Source Computer Vision Library
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015, Baisheng Lai (laibaisheng@gmail.com), Zhejiang University,
|
||||||
|
// all rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistribution's of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
// any express or implied warranties, including, but not limited to, the implied
|
||||||
|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
// indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
// (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
// loss of use, data, or profits; or business interruption) however caused
|
||||||
|
// and on any theory of liability, whether in contract, strict liability,
|
||||||
|
// or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
// the use of this software, even if advised of the possibility of such damage.
|
||||||
|
//
|
||||||
|
//M*/
|
||||||
|
|
||||||
|
#ifndef __OPENCV_OMNIDIR_HPP__
|
||||||
|
#define __OPENCV_OMNIDIR_HPP__
|
||||||
|
|
||||||
|
#include "opencv2/core.hpp"
|
||||||
|
#include "opencv2/core/affine.hpp"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace cv
|
||||||
|
{
|
||||||
|
namespace omnidir
|
||||||
|
{
|
||||||
|
//! @addtogroup ccalib
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
enum {
|
||||||
|
CALIB_USE_GUESS = 1,
|
||||||
|
CALIB_FIX_SKEW = 2,
|
||||||
|
CALIB_FIX_K1 = 4,
|
||||||
|
CALIB_FIX_K2 = 8,
|
||||||
|
CALIB_FIX_P1 = 16,
|
||||||
|
CALIB_FIX_P2 = 32,
|
||||||
|
CALIB_FIX_XI = 64,
|
||||||
|
CALIB_FIX_GAMMA = 128,
|
||||||
|
CALIB_FIX_CENTER = 256
|
||||||
|
};
|
||||||
|
|
||||||
|
enum{
|
||||||
|
RECTIFY_PERSPECTIVE = 1,
|
||||||
|
RECTIFY_CYLINDRICAL = 2,
|
||||||
|
RECTIFY_LONGLATI = 3,
|
||||||
|
RECTIFY_STEREOGRAPHIC = 4
|
||||||
|
};
|
||||||
|
|
||||||
|
enum{
|
||||||
|
XYZRGB = 1,
|
||||||
|
XYZ = 2
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* This module was accepted as a GSoC 2015 project for OpenCV, authored by
|
||||||
|
* Baisheng Lai, mentored by Bo Li.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @brief Projects points for omnidirectional camera using CMei's model
|
||||||
|
|
||||||
|
@param objectPoints Object points in world coordinate, vector of vector of Vec3f or Mat of
|
||||||
|
1xN/Nx1 3-channel of type CV_32F and N is the number of points. 64F is also acceptable.
|
||||||
|
@param imagePoints Output array of image points, vector of vector of Vec2f or
|
||||||
|
1xN/Nx1 2-channel of type CV_32F. 64F is also acceptable.
|
||||||
|
@param rvec vector of rotation between world coordinate and camera coordinate, i.e., om
|
||||||
|
@param tvec vector of translation between pattern coordinate and camera coordinate
|
||||||
|
@param K Camera matrix \f$K = \vecthreethree{f_x}{s}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\f$.
|
||||||
|
@param D Input vector of distortion coefficients \f$(k_1, k_2, p_1, p_2)\f$.
|
||||||
|
@param xi The parameter xi for CMei's model
|
||||||
|
@param jacobian Optional output 2Nx16 of type CV_64F jacobian matrix, contains the derivatives of
|
||||||
|
image pixel points wrt parameters including \f$om, T, f_x, f_y, s, c_x, c_y, xi, k_1, k_2, p_1, p_2\f$.
|
||||||
|
This matrix will be used in calibration by optimization.
|
||||||
|
|
||||||
|
The function projects object 3D points of world coordinate to image pixels, parameter by intrinsic
|
||||||
|
and extrinsic parameters. Also, it optionally compute a by-product: the jacobian matrix containing
|
||||||
|
contains the derivatives of image pixel points wrt intrinsic and extrinsic parameters.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void projectPoints(InputArray objectPoints, OutputArray imagePoints, InputArray rvec, InputArray tvec,
|
||||||
|
InputArray K, double xi, InputArray D, OutputArray jacobian = noArray());
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
|
CV_EXPORTS void projectPoints(InputArray objectPoints, OutputArray imagePoints, const Affine3d& affine,
|
||||||
|
InputArray K, double xi, InputArray D, OutputArray jacobian = noArray());
|
||||||
|
|
||||||
|
/** @brief Undistort 2D image points for omnidirectional camera using CMei's model
|
||||||
|
|
||||||
|
@param distorted Array of distorted image points, vector of Vec2f
|
||||||
|
or 1xN/Nx1 2-channel Mat of type CV_32F, 64F depth is also acceptable
|
||||||
|
@param K Camera matrix \f$K = \vecthreethree{f_x}{s}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\f$.
|
||||||
|
@param D Distortion coefficients \f$(k_1, k_2, p_1, p_2)\f$.
|
||||||
|
@param xi The parameter xi for CMei's model
|
||||||
|
@param R Rotation trainsform between the original and object space : 3x3 1-channel, or vector: 3x1/1x3
|
||||||
|
1-channel or 1x1 3-channel
|
||||||
|
@param undistorted array of normalized object points, vector of Vec2f/Vec2d or 1xN/Nx1 2-channel Mat with the same
|
||||||
|
depth of distorted points.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void undistortPoints(InputArray distorted, OutputArray undistorted, InputArray K, InputArray D, InputArray xi, InputArray R);
|
||||||
|
|
||||||
|
/** @brief Computes undistortion and rectification maps for omnidirectional camera image transform by a rotation R.
|
||||||
|
It output two maps that are used for cv::remap(). If D is empty then zero distortion is used,
|
||||||
|
if R or P is empty then identity matrices are used.
|
||||||
|
|
||||||
|
@param K Camera matrix \f$K = \vecthreethree{f_x}{s}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\f$, with depth CV_32F or CV_64F
|
||||||
|
@param D Input vector of distortion coefficients \f$(k_1, k_2, p_1, p_2)\f$, with depth CV_32F or CV_64F
|
||||||
|
@param xi The parameter xi for CMei's model
|
||||||
|
@param R Rotation transform between the original and object space : 3x3 1-channel, or vector: 3x1/1x3, with depth CV_32F or CV_64F
|
||||||
|
@param P New camera matrix (3x3) or new projection matrix (3x4)
|
||||||
|
@param size Undistorted image size.
|
||||||
|
@param m1type Type of the first output map that can be CV_32FC1 or CV_16SC2 . See convertMaps()
|
||||||
|
for details.
|
||||||
|
@param map1 The first output map.
|
||||||
|
@param map2 The second output map.
|
||||||
|
@param flags Flags indicates the rectification type, RECTIFY_PERSPECTIVE, RECTIFY_CYLINDRICAL, RECTIFY_LONGLATI and RECTIFY_STEREOGRAPHIC
|
||||||
|
are supported.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void initUndistortRectifyMap(InputArray K, InputArray D, InputArray xi, InputArray R, InputArray P, const cv::Size& size,
|
||||||
|
int m1type, OutputArray map1, OutputArray map2, int flags);
|
||||||
|
|
||||||
|
/** @brief Undistort omnidirectional images to perspective images
|
||||||
|
|
||||||
|
@param distorted The input omnidirectional image.
|
||||||
|
@param undistorted The output undistorted image.
|
||||||
|
@param K Camera matrix \f$K = \vecthreethree{f_x}{s}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\f$.
|
||||||
|
@param D Input vector of distortion coefficients \f$(k_1, k_2, p_1, p_2)\f$.
|
||||||
|
@param xi The parameter xi for CMei's model.
|
||||||
|
@param flags Flags indicates the rectification type, RECTIFY_PERSPECTIVE, RECTIFY_CYLINDRICAL, RECTIFY_LONGLATI and RECTIFY_STEREOGRAPHIC
|
||||||
|
@param Knew Camera matrix of the distorted image. If it is not assigned, it is just K.
|
||||||
|
@param new_size The new image size. By default, it is the size of distorted.
|
||||||
|
@param R Rotation matrix between the input and output images. By default, it is identity matrix.
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void undistortImage(InputArray distorted, OutputArray undistorted, InputArray K, InputArray D, InputArray xi, int flags,
|
||||||
|
InputArray Knew = cv::noArray(), const Size& new_size = Size(), InputArray R = Mat::eye(3, 3, CV_64F));
|
||||||
|
|
||||||
|
/** @brief Perform omnidirectional camera calibration, the default depth of outputs is CV_64F.
|
||||||
|
|
||||||
|
@param objectPoints Vector of vector of Vec3f object points in world (pattern) coordinate.
|
||||||
|
It also can be vector of Mat with size 1xN/Nx1 and type CV_32FC3. Data with depth of 64_F is also acceptable.
|
||||||
|
@param imagePoints Vector of vector of Vec2f corresponding image points of objectPoints. It must be the same
|
||||||
|
size and the same type with objectPoints.
|
||||||
|
@param size Image size of calibration images.
|
||||||
|
@param K Output calibrated camera matrix.
|
||||||
|
@param xi Output parameter xi for CMei's model
|
||||||
|
@param D Output distortion parameters \f$(k_1, k_2, p_1, p_2)\f$
|
||||||
|
@param rvecs Output rotations for each calibration images
|
||||||
|
@param tvecs Output translation for each calibration images
|
||||||
|
@param flags The flags that control calibrate
|
||||||
|
@param criteria Termination criteria for optimization
|
||||||
|
@param idx Indices of images that pass initialization, which are really used in calibration. So the size of rvecs is the
|
||||||
|
same as idx.total().
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W double calibrate(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size size,
|
||||||
|
InputOutputArray K, InputOutputArray xi, InputOutputArray D, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs,
|
||||||
|
int flags, TermCriteria criteria, OutputArray idx=noArray());
|
||||||
|
|
||||||
|
/** @brief Stereo calibration for omnidirectional camera model. It computes the intrinsic parameters for two
|
||||||
|
cameras and the extrinsic parameters between two cameras. The default depth of outputs is CV_64F.
|
||||||
|
|
||||||
|
@param objectPoints Object points in world (pattern) coordinate. Its type is vector<vector<Vec3f> >.
|
||||||
|
It also can be vector of Mat with size 1xN/Nx1 and type CV_32FC3. Data with depth of 64_F is also acceptable.
|
||||||
|
@param imagePoints1 The corresponding image points of the first camera, with type vector<vector<Vec2f> >.
|
||||||
|
It must be the same size and the same type as objectPoints.
|
||||||
|
@param imagePoints2 The corresponding image points of the second camera, with type vector<vector<Vec2f> >.
|
||||||
|
It must be the same size and the same type as objectPoints.
|
||||||
|
@param imageSize1 Image size of calibration images of the first camera.
|
||||||
|
@param imageSize2 Image size of calibration images of the second camera.
|
||||||
|
@param K1 Output camera matrix for the first camera.
|
||||||
|
@param xi1 Output parameter xi of Mei's model for the first camera
|
||||||
|
@param D1 Output distortion parameters \f$(k_1, k_2, p_1, p_2)\f$ for the first camera
|
||||||
|
@param K2 Output camera matrix for the first camera.
|
||||||
|
@param xi2 Output parameter xi of CMei's model for the second camera
|
||||||
|
@param D2 Output distortion parameters \f$(k_1, k_2, p_1, p_2)\f$ for the second camera
|
||||||
|
@param rvec Output rotation between the first and second camera
|
||||||
|
@param tvec Output translation between the first and second camera
|
||||||
|
@param rvecsL Output rotation for each image of the first camera
|
||||||
|
@param tvecsL Output translation for each image of the first camera
|
||||||
|
@param flags The flags that control stereoCalibrate
|
||||||
|
@param criteria Termination criteria for optimization
|
||||||
|
@param idx Indices of image pairs that pass initialization, which are really used in calibration. So the size of rvecs is the
|
||||||
|
same as idx.total().
|
||||||
|
@
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W double stereoCalibrate(InputOutputArrayOfArrays objectPoints, InputOutputArrayOfArrays imagePoints1, InputOutputArrayOfArrays imagePoints2,
|
||||||
|
const Size& imageSize1, const Size& imageSize2, InputOutputArray K1, InputOutputArray xi1, InputOutputArray D1, InputOutputArray K2, InputOutputArray xi2,
|
||||||
|
InputOutputArray D2, OutputArray rvec, OutputArray tvec, OutputArrayOfArrays rvecsL, OutputArrayOfArrays tvecsL, int flags, TermCriteria criteria, OutputArray idx=noArray());
|
||||||
|
|
||||||
|
/** @brief Stereo rectification for omnidirectional camera model. It computes the rectification rotations for two cameras
|
||||||
|
|
||||||
|
@param R Rotation between the first and second camera
|
||||||
|
@param T Translation between the first and second camera
|
||||||
|
@param R1 Output 3x3 rotation matrix for the first camera
|
||||||
|
@param R2 Output 3x3 rotation matrix for the second camera
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void stereoRectify(InputArray R, InputArray T, OutputArray R1, OutputArray R2);
|
||||||
|
|
||||||
|
/** @brief Stereo 3D reconstruction from a pair of images
|
||||||
|
|
||||||
|
@param image1 The first input image
|
||||||
|
@param image2 The second input image
|
||||||
|
@param K1 Input camera matrix of the first camera
|
||||||
|
@param D1 Input distortion parameters \f$(k_1, k_2, p_1, p_2)\f$ for the first camera
|
||||||
|
@param xi1 Input parameter xi for the first camera for CMei's model
|
||||||
|
@param K2 Input camera matrix of the second camera
|
||||||
|
@param D2 Input distortion parameters \f$(k_1, k_2, p_1, p_2)\f$ for the second camera
|
||||||
|
@param xi2 Input parameter xi for the second camera for CMei's model
|
||||||
|
@param R Rotation between the first and second camera
|
||||||
|
@param T Translation between the first and second camera
|
||||||
|
@param flag Flag of rectification type, RECTIFY_PERSPECTIVE or RECTIFY_LONGLATI
|
||||||
|
@param numDisparities The parameter 'numDisparities' in StereoSGBM, see StereoSGBM for details.
|
||||||
|
@param SADWindowSize The parameter 'SADWindowSize' in StereoSGBM, see StereoSGBM for details.
|
||||||
|
@param disparity Disparity map generated by stereo matching
|
||||||
|
@param image1Rec Rectified image of the first image
|
||||||
|
@param image2Rec rectified image of the second image
|
||||||
|
@param newSize Image size of rectified image, see omnidir::undistortImage
|
||||||
|
@param Knew New camera matrix of rectified image, see omnidir::undistortImage
|
||||||
|
@param pointCloud Point cloud of 3D reconstruction, with type CV_64FC3
|
||||||
|
@param pointType Point cloud type, it can be XYZRGB or XYZ
|
||||||
|
*/
|
||||||
|
CV_EXPORTS_W void stereoReconstruct(InputArray image1, InputArray image2, InputArray K1, InputArray D1, InputArray xi1,
|
||||||
|
InputArray K2, InputArray D2, InputArray xi2, InputArray R, InputArray T, int flag, int numDisparities, int SADWindowSize,
|
||||||
|
OutputArray disparity, OutputArray image1Rec, OutputArray image2Rec, const Size& newSize = Size(), InputArray Knew = cv::noArray(),
|
||||||
|
OutputArray pointCloud = cv::noArray(), int pointType = XYZRGB);
|
||||||
|
|
||||||
|
namespace internal
|
||||||
|
{
|
||||||
|
void initializeCalibration(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size size, OutputArrayOfArrays omAll,
|
||||||
|
OutputArrayOfArrays tAll, OutputArray K, double& xi, OutputArray idx = noArray());
|
||||||
|
|
||||||
|
void initializeStereoCalibration(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2,
|
||||||
|
const Size& size1, const Size& size2, OutputArray om, OutputArray T, OutputArrayOfArrays omL, OutputArrayOfArrays tL, OutputArray K1, OutputArray D1, OutputArray K2, OutputArray D2,
|
||||||
|
double &xi1, double &xi2, int flags, OutputArray idx);
|
||||||
|
|
||||||
|
void computeJacobian(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, InputArray parameters, Mat& JTJ_inv, Mat& JTE, int flags,
|
||||||
|
double epsilon);
|
||||||
|
|
||||||
|
void computeJacobianStereo(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2,
|
||||||
|
InputArray parameters, Mat& JTJ_inv, Mat& JTE, int flags, double epsilon);
|
||||||
|
|
||||||
|
void encodeParameters(InputArray K, InputArrayOfArrays omAll, InputArrayOfArrays tAll, InputArray distoaration, double xi, OutputArray parameters);
|
||||||
|
|
||||||
|
void encodeParametersStereo(InputArray K1, InputArray K2, InputArray om, InputArray T, InputArrayOfArrays omL, InputArrayOfArrays tL,
|
||||||
|
InputArray D1, InputArray D2, double xi1, double xi2, OutputArray parameters);
|
||||||
|
|
||||||
|
void decodeParameters(InputArray paramsters, OutputArray K, OutputArrayOfArrays omAll, OutputArrayOfArrays tAll, OutputArray distoration, double& xi);
|
||||||
|
|
||||||
|
void decodeParametersStereo(InputArray parameters, OutputArray K1, OutputArray K2, OutputArray om, OutputArray T, OutputArrayOfArrays omL,
|
||||||
|
OutputArrayOfArrays tL, OutputArray D1, OutputArray D2, double& xi1, double& xi2);
|
||||||
|
|
||||||
|
void estimateUncertainties(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, InputArray parameters, Mat& errors, Vec2d& std_error, double& rms, int flags);
|
||||||
|
|
||||||
|
void estimateUncertaintiesStereo(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputArray parameters, Mat& errors,
|
||||||
|
Vec2d& std_error, double& rms, int flags);
|
||||||
|
|
||||||
|
double computeMeanReproErr(InputArrayOfArrays imagePoints, InputArrayOfArrays proImagePoints);
|
||||||
|
|
||||||
|
double computeMeanReproErr(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, InputArray K, InputArray D, double xi, InputArrayOfArrays omAll,
|
||||||
|
InputArrayOfArrays tAll);
|
||||||
|
|
||||||
|
double computeMeanReproErrStereo(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputArray K1, InputArray K2,
|
||||||
|
InputArray D1, InputArray D2, double xi1, double xi2, InputArray om, InputArray T, InputArrayOfArrays omL, InputArrayOfArrays TL);
|
||||||
|
|
||||||
|
void subMatrix(const Mat& src, Mat& dst, const std::vector<int>& cols, const std::vector<int>& rows);
|
||||||
|
|
||||||
|
void flags2idx(int flags, std::vector<int>& idx, int n);
|
||||||
|
|
||||||
|
void flags2idxStereo(int flags, std::vector<int>& idx, int n);
|
||||||
|
|
||||||
|
void fillFixed(Mat&G, int flags, int n);
|
||||||
|
|
||||||
|
void fillFixedStereo(Mat& G, int flags, int n);
|
||||||
|
|
||||||
|
double findMedian(const Mat& row);
|
||||||
|
|
||||||
|
Vec3d findMedian3(InputArray mat);
|
||||||
|
|
||||||
|
void getInterset(InputArray idx1, InputArray idx2, OutputArray inter1, OutputArray inter2, OutputArray inter_ori);
|
||||||
|
|
||||||
|
void compose_motion(InputArray _om1, InputArray _T1, InputArray _om2, InputArray _T2, Mat& om3, Mat& T3, Mat& dom3dom1,
|
||||||
|
Mat& dom3dT1, Mat& dom3dom2, Mat& dom3dT2, Mat& dT3dom1, Mat& dT3dT1, Mat& dT3dom2, Mat& dT3dT2);
|
||||||
|
|
||||||
|
//void JRodriguesMatlab(const Mat& src, Mat& dst);
|
||||||
|
|
||||||
|
//void dAB(InputArray A, InputArray B, OutputArray dABdA, OutputArray dABdB);
|
||||||
|
} // internal
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
|
} // omnidir
|
||||||
|
|
||||||
|
} //cv
|
||||||
|
#endif
|
184
3rdparty/opencv/inc/opencv2/ccalib/randpattern.hpp
vendored
Normal file
184
3rdparty/opencv/inc/opencv2/ccalib/randpattern.hpp
vendored
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
//
|
||||||
|
// By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
// If you do not agree to this license, do not download, install,
|
||||||
|
// copy or use the software.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// License Agreement
|
||||||
|
// For Open Source Computer Vision Library
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015, Baisheng Lai (laibaisheng@gmail.com), Zhejiang University,
|
||||||
|
// all rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistribution's of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
// any express or implied warranties, including, but not limited to, the implied
|
||||||
|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
// indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
// (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
// loss of use, data, or profits; or business interruption) however caused
|
||||||
|
// and on any theory of liability, whether in contract, strict liability,
|
||||||
|
// or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
// the use of this software, even if advised of the possibility of such damage.
|
||||||
|
//
|
||||||
|
//M*/
|
||||||
|
|
||||||
|
#ifndef __OPENCV_RANDOMPATTERN_HPP__
|
||||||
|
#define __OPENCV_RANDOMPATTERN_HPP__
|
||||||
|
|
||||||
|
#include "opencv2/features2d.hpp"
|
||||||
|
#include "opencv2/highgui.hpp"
|
||||||
|
|
||||||
|
namespace cv { namespace randpattern {
|
||||||
|
|
||||||
|
|
||||||
|
//! @addtogroup ccalib
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Class for finding features points and corresponding 3D in world coordinate of
|
||||||
|
a "random" pattern, which can be to be used in calibration. It is useful when pattern is
|
||||||
|
partly occluded or only a part of pattern can be observed in multiple cameras calibration.
|
||||||
|
The pattern can be generated by RandomPatternGenerator class described in this file.
|
||||||
|
|
||||||
|
Please refer to paper
|
||||||
|
B. Li, L. Heng, K. Kevin and M. Pollefeys, "A Multiple-Camera System
|
||||||
|
Calibration Toolbox Using A Feature Descriptor-Based Calibration
|
||||||
|
Pattern", in IROS 2013.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CV_EXPORTS RandomPatternCornerFinder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/* @brief Construct RandomPatternCornerFinder object
|
||||||
|
|
||||||
|
@param patternWidth the real width of "random" pattern in a user defined unit.
|
||||||
|
@param patternHeight the real height of "random" pattern in a user defined unit.
|
||||||
|
@param nMiniMatch number of minimal matches, otherwise that image is abandoned
|
||||||
|
@depth depth of output objectPoints and imagePoints, set it to be CV_32F or CV_64F.
|
||||||
|
@showExtraction whether show feature extraction, 0 for no and 1 for yes.
|
||||||
|
@detector feature detector to detect feature points in pattern and images.
|
||||||
|
@descriptor feature descriptor.
|
||||||
|
@matcher feature matcher.
|
||||||
|
*/
|
||||||
|
RandomPatternCornerFinder(float patternWidth, float patternHeight,
|
||||||
|
int nminiMatch = 20, int depth = CV_32F, int verbose = 0, int showExtraction = 0,
|
||||||
|
Ptr<FeatureDetector> detector = AKAZE::create(AKAZE::DESCRIPTOR_MLDB, 0, 3, 0.005f),
|
||||||
|
Ptr<DescriptorExtractor> descriptor = AKAZE::create(AKAZE::DESCRIPTOR_MLDB,0, 3, 0.005f),
|
||||||
|
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce-L1"));
|
||||||
|
|
||||||
|
/* @brief Load pattern image and compute features for pattern
|
||||||
|
@param patternImage image for "random" pattern generated by RandomPatternGenerator, run it first.
|
||||||
|
*/
|
||||||
|
void loadPattern(const cv::Mat &patternImage);
|
||||||
|
|
||||||
|
/* @brief Load pattern and features
|
||||||
|
@param patternImage image for "random" pattern generated by RandomPatternGenerator, run it first.
|
||||||
|
@param patternKeyPoints keyPoints created from a FeatureDetector.
|
||||||
|
@param patternDescriptors descriptors created from a DescriptorExtractor.
|
||||||
|
*/
|
||||||
|
void loadPattern(const cv::Mat &patternImage, const std::vector<cv::KeyPoint> &patternKeyPoints, const cv::Mat &patternDescriptors);
|
||||||
|
|
||||||
|
/* @brief Compute matched object points and image points which are used for calibration
|
||||||
|
The objectPoints (3D) and imagePoints (2D) are stored inside the class. Run getObjectPoints()
|
||||||
|
and getImagePoints() to get them.
|
||||||
|
|
||||||
|
@param inputImages vector of 8-bit grayscale images containing "random" pattern
|
||||||
|
that are used for calibration.
|
||||||
|
*/
|
||||||
|
void computeObjectImagePoints(std::vector<cv::Mat> inputImages);
|
||||||
|
|
||||||
|
//void computeObjectImagePoints2(std::vector<cv::Mat> inputImages);
|
||||||
|
|
||||||
|
/* @brief Compute object and image points for a single image. It returns a vector<Mat> that
|
||||||
|
the first element stores the imagePoints and the second one stores the objectPoints.
|
||||||
|
|
||||||
|
@param inputImage single input image for calibration
|
||||||
|
*/
|
||||||
|
std::vector<cv::Mat> computeObjectImagePointsForSingle(cv::Mat inputImage);
|
||||||
|
|
||||||
|
/* @brief Get object(3D) points
|
||||||
|
*/
|
||||||
|
const std::vector<cv::Mat> &getObjectPoints();
|
||||||
|
|
||||||
|
/* @brief and image(2D) points
|
||||||
|
*/
|
||||||
|
const std::vector<cv::Mat> &getImagePoints();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
std::vector<cv::Mat> _objectPonits, _imagePoints;
|
||||||
|
float _patternWidth, _patternHeight;
|
||||||
|
cv::Size _patternImageSize;
|
||||||
|
int _nminiMatch;
|
||||||
|
int _depth;
|
||||||
|
int _verbose;
|
||||||
|
|
||||||
|
Ptr<FeatureDetector> _detector;
|
||||||
|
Ptr<DescriptorExtractor> _descriptor;
|
||||||
|
Ptr<DescriptorMatcher> _matcher;
|
||||||
|
Mat _descriptorPattern;
|
||||||
|
std::vector<cv::KeyPoint> _keypointsPattern;
|
||||||
|
Mat _patternImage;
|
||||||
|
int _showExtraction;
|
||||||
|
|
||||||
|
void keyPoints2MatchedLocation(const std::vector<cv::KeyPoint>& imageKeypoints,
|
||||||
|
const std::vector<cv::KeyPoint>& patternKeypoints, const std::vector<cv::DMatch> matchces,
|
||||||
|
cv::Mat& matchedImagelocation, cv::Mat& matchedPatternLocation);
|
||||||
|
void getFilteredLocation(cv::Mat& imageKeypoints, cv::Mat& patternKeypoints, const cv::Mat mask);
|
||||||
|
void getObjectImagePoints(const cv::Mat& imageKeypoints, const cv::Mat& patternKeypoints);
|
||||||
|
void crossCheckMatching( cv::Ptr<DescriptorMatcher>& descriptorMatcher,
|
||||||
|
const Mat& descriptors1, const Mat& descriptors2,
|
||||||
|
std::vector<DMatch>& filteredMatches12, int knn=1 );
|
||||||
|
void drawCorrespondence(const Mat& image1, const std::vector<cv::KeyPoint> keypoint1,
|
||||||
|
const Mat& image2, const std::vector<cv::KeyPoint> keypoint2, const std::vector<cv::DMatch> matchces,
|
||||||
|
const Mat& mask1, const Mat& mask2, const int step);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* @brief Class to generate "random" pattern image that are used for RandomPatternCornerFinder
|
||||||
|
Please refer to paper
|
||||||
|
B. Li, L. Heng, K. Kevin and M. Pollefeys, "A Multiple-Camera System
|
||||||
|
Calibration Toolbox Using A Feature Descriptor-Based Calibration
|
||||||
|
Pattern", in IROS 2013.
|
||||||
|
*/
|
||||||
|
class CV_EXPORTS RandomPatternGenerator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/* @brief Construct RandomPatternGenerator
|
||||||
|
|
||||||
|
@param imageWidth image width of the generated pattern image
|
||||||
|
@param imageHeight image height of the generated pattern image
|
||||||
|
*/
|
||||||
|
RandomPatternGenerator(int imageWidth, int imageHeight);
|
||||||
|
|
||||||
|
/* @brief Generate pattern
|
||||||
|
*/
|
||||||
|
void generatePattern();
|
||||||
|
/* @brief Get pattern
|
||||||
|
*/
|
||||||
|
cv::Mat getPattern();
|
||||||
|
private:
|
||||||
|
cv::Mat _pattern;
|
||||||
|
int _imageWidth, _imageHeight;
|
||||||
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
|
}} //namespace randpattern, cv
|
||||||
|
#endif
|
3344
3rdparty/opencv/inc/opencv2/core.hpp
vendored
Normal file
3344
3rdparty/opencv/inc/opencv2/core.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
678
3rdparty/opencv/inc/opencv2/core/affine.hpp
vendored
Normal file
678
3rdparty/opencv/inc/opencv2/core/affine.hpp
vendored
Normal file
@ -0,0 +1,678 @@
|
|||||||
|
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||||
|
//
|
||||||
|
// By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
// If you do not agree to this license, do not download, install,
|
||||||
|
// copy or use the software.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// License Agreement
|
||||||
|
// For Open Source Computer Vision Library
|
||||||
|
//
|
||||||
|
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||||
|
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
||||||
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
|
// Third party copyrights are property of their respective owners.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistribution's of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// * The name of the copyright holders may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
// any express or implied warranties, including, but not limited to, the implied
|
||||||
|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
|
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||||
|
// indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
// (including, but not limited to, procurement of substitute goods or services;
|
||||||
|
// loss of use, data, or profits; or business interruption) however caused
|
||||||
|
// and on any theory of liability, whether in contract, strict liability,
|
||||||
|
// or tort (including negligence or otherwise) arising in any way out of
|
||||||
|
// the use of this software, even if advised of the possibility of such damage.
|
||||||
|
//
|
||||||
|
//M*/
|
||||||
|
|
||||||
|
#ifndef OPENCV_CORE_AFFINE3_HPP
|
||||||
|
#define OPENCV_CORE_AFFINE3_HPP
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
#include <opencv2/core.hpp>
|
||||||
|
|
||||||
|
namespace cv
|
||||||
|
{
|
||||||
|
|
||||||
|
//! @addtogroup core
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Affine transform
|
||||||
|
*
|
||||||
|
* It represents a 4x4 homogeneous transformation matrix \f$T\f$
|
||||||
|
*
|
||||||
|
* \f[T =
|
||||||
|
* \begin{bmatrix}
|
||||||
|
* R & t\\
|
||||||
|
* 0 & 1\\
|
||||||
|
* \end{bmatrix}
|
||||||
|
* \f]
|
||||||
|
*
|
||||||
|
* where \f$R\f$ is a 3x3 rotation matrix and \f$t\f$ is a 3x1 translation vector.
|
||||||
|
*
|
||||||
|
* You can specify \f$R\f$ either by a 3x3 rotation matrix or by a 3x1 rotation vector,
|
||||||
|
* which is converted to a 3x3 rotation matrix by the Rodrigues formula.
|
||||||
|
*
|
||||||
|
* To construct a matrix \f$T\f$ representing first rotation around the axis \f$r\f$ with rotation
|
||||||
|
* angle \f$|r|\f$ in radian (right hand rule) and then translation by the vector \f$t\f$, you can use
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* cv::Vec3f r, t;
|
||||||
|
* cv::Affine3f T(r, t);
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* If you already have the rotation matrix \f$R\f$, then you can use
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* cv::Matx33f R;
|
||||||
|
* cv::Affine3f T(R, t);
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* To extract the rotation matrix \f$R\f$ from \f$T\f$, use
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* cv::Matx33f R = T.rotation();
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* To extract the translation vector \f$t\f$ from \f$T\f$, use
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* cv::Vec3f t = T.translation();
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* To extract the rotation vector \f$r\f$ from \f$T\f$, use
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* cv::Vec3f r = T.rvec();
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* Note that since the mapping from rotation vectors to rotation matrices
|
||||||
|
* is many to one. The returned rotation vector is not necessarily the one
|
||||||
|
* you used before to set the matrix.
|
||||||
|
*
|
||||||
|
* If you have two transformations \f$T = T_1 * T_2\f$, use
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* cv::Affine3f T, T1, T2;
|
||||||
|
* T = T2.concatenate(T1);
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* To get the inverse transform of \f$T\f$, use
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* cv::Affine3f T, T_inv;
|
||||||
|
* T_inv = T.inv();
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
class Affine3
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef T float_type;
|
||||||
|
typedef Matx<float_type, 3, 3> Mat3;
|
||||||
|
typedef Matx<float_type, 4, 4> Mat4;
|
||||||
|
typedef Vec<float_type, 3> Vec3;
|
||||||
|
|
||||||
|
//! Default constructor. It represents a 4x4 identity matrix.
|
||||||
|
Affine3();
|
||||||
|
|
||||||
|
//! Augmented affine matrix
|
||||||
|
Affine3(const Mat4& affine);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The resulting 4x4 matrix is
|
||||||
|
*
|
||||||
|
* \f[
|
||||||
|
* \begin{bmatrix}
|
||||||
|
* R & t\\
|
||||||
|
* 0 & 1\\
|
||||||
|
* \end{bmatrix}
|
||||||
|
* \f]
|
||||||
|
*
|
||||||
|
* @param R 3x3 rotation matrix.
|
||||||
|
* @param t 3x1 translation vector.
|
||||||
|
*/
|
||||||
|
Affine3(const Mat3& R, const Vec3& t = Vec3::all(0));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rodrigues vector.
|
||||||
|
*
|
||||||
|
* The last row of the current matrix is set to [0,0,0,1].
|
||||||
|
*
|
||||||
|
* @param rvec 3x1 rotation vector. Its direction indicates the rotation axis and its length
|
||||||
|
* indicates the rotation angle in radian (using right hand rule).
|
||||||
|
* @param t 3x1 translation vector.
|
||||||
|
*/
|
||||||
|
Affine3(const Vec3& rvec, const Vec3& t = Vec3::all(0));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Combines all constructors above. Supports 4x4, 3x4, 3x3, 1x3, 3x1 sizes of data matrix.
|
||||||
|
*
|
||||||
|
* The last row of the current matrix is set to [0,0,0,1] when data is not 4x4.
|
||||||
|
*
|
||||||
|
* @param data 1-channel matrix.
|
||||||
|
* when it is 4x4, it is copied to the current matrix and t is not used.
|
||||||
|
* When it is 3x4, it is copied to the upper part 3x4 of the current matrix and t is not used.
|
||||||
|
* When it is 3x3, it is copied to the upper left 3x3 part of the current matrix.
|
||||||
|
* When it is 3x1 or 1x3, it is treated as a rotation vector and the Rodrigues formula is used
|
||||||
|
* to compute a 3x3 rotation matrix.
|
||||||
|
* @param t 3x1 translation vector. It is used only when data is neither 4x4 nor 3x4.
|
||||||
|
*/
|
||||||
|
explicit Affine3(const Mat& data, const Vec3& t = Vec3::all(0));
|
||||||
|
|
||||||
|
//! From 16-element array
|
||||||
|
explicit Affine3(const float_type* vals);
|
||||||
|
|
||||||
|
//! Create an 4x4 identity transform
|
||||||
|
static Affine3 Identity();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rotation matrix.
|
||||||
|
*
|
||||||
|
* Copy the rotation matrix to the upper left 3x3 part of the current matrix.
|
||||||
|
* The remaining elements of the current matrix are not changed.
|
||||||
|
*
|
||||||
|
* @param R 3x3 rotation matrix.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void rotation(const Mat3& R);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rodrigues vector.
|
||||||
|
*
|
||||||
|
* It sets the upper left 3x3 part of the matrix. The remaining part is unaffected.
|
||||||
|
*
|
||||||
|
* @param rvec 3x1 rotation vector. The direction indicates the rotation axis and
|
||||||
|
* its length indicates the rotation angle in radian (using the right thumb convention).
|
||||||
|
*/
|
||||||
|
void rotation(const Vec3& rvec);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Combines rotation methods above. Supports 3x3, 1x3, 3x1 sizes of data matrix.
|
||||||
|
*
|
||||||
|
* It sets the upper left 3x3 part of the matrix. The remaining part is unaffected.
|
||||||
|
*
|
||||||
|
* @param data 1-channel matrix.
|
||||||
|
* When it is a 3x3 matrix, it sets the upper left 3x3 part of the current matrix.
|
||||||
|
* When it is a 1x3 or 3x1 matrix, it is used as a rotation vector. The Rodrigues formula
|
||||||
|
* is used to compute the rotation matrix and sets the upper left 3x3 part of the current matrix.
|
||||||
|
*/
|
||||||
|
void rotation(const Mat& data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy the 3x3 matrix L to the upper left part of the current matrix
|
||||||
|
*
|
||||||
|
* It sets the upper left 3x3 part of the matrix. The remaining part is unaffected.
|
||||||
|
*
|
||||||
|
* @param L 3x3 matrix.
|
||||||
|
*/
|
||||||
|
void linear(const Mat3& L);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy t to the first three elements of the last column of the current matrix
|
||||||
|
*
|
||||||
|
* It sets the upper right 3x1 part of the matrix. The remaining part is unaffected.
|
||||||
|
*
|
||||||
|
* @param t 3x1 translation vector.
|
||||||
|
*/
|
||||||
|
void translation(const Vec3& t);
|
||||||
|
|
||||||
|
//! @return the upper left 3x3 part
|
||||||
|
Mat3 rotation() const;
|
||||||
|
|
||||||
|
//! @return the upper left 3x3 part
|
||||||
|
Mat3 linear() const;
|
||||||
|
|
||||||
|
//! @return the upper right 3x1 part
|
||||||
|
Vec3 translation() const;
|
||||||
|
|
||||||
|
//! Rodrigues vector.
|
||||||
|
//! @return a vector representing the upper left 3x3 rotation matrix of the current matrix.
|
||||||
|
//! @warning Since the mapping between rotation vectors and rotation matrices is many to one,
|
||||||
|
//! this function returns only one rotation vector that represents the current rotation matrix,
|
||||||
|
//! which is not necessarily the same one set by `rotation(const Vec3& rvec)`.
|
||||||
|
Vec3 rvec() const;
|
||||||
|
|
||||||
|
//! @return the inverse of the current matrix.
|
||||||
|
Affine3 inv(int method = cv::DECOMP_SVD) const;
|
||||||
|
|
||||||
|
//! a.rotate(R) is equivalent to Affine(R, 0) * a;
|
||||||
|
Affine3 rotate(const Mat3& R) const;
|
||||||
|
|
||||||
|
//! a.rotate(rvec) is equivalent to Affine(rvec, 0) * a;
|
||||||
|
Affine3 rotate(const Vec3& rvec) const;
|
||||||
|
|
||||||
|
//! a.translate(t) is equivalent to Affine(E, t) * a, where E is an identity matrix
|
||||||
|
Affine3 translate(const Vec3& t) const;
|
||||||
|
|
||||||
|
//! a.concatenate(affine) is equivalent to affine * a;
|
||||||
|
Affine3 concatenate(const Affine3& affine) const;
|
||||||
|
|
||||||
|
template <typename Y> operator Affine3<Y>() const;
|
||||||
|
|
||||||
|
template <typename Y> Affine3<Y> cast() const;
|
||||||
|
|
||||||
|
Mat4 matrix;
|
||||||
|
|
||||||
|
#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H
|
||||||
|
Affine3(const Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>& affine);
|
||||||
|
Affine3(const Eigen::Transform<T, 3, Eigen::Affine>& affine);
|
||||||
|
operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>() const;
|
||||||
|
operator Eigen::Transform<T, 3, Eigen::Affine>() const;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename T> static
|
||||||
|
Affine3<T> operator*(const Affine3<T>& affine1, const Affine3<T>& affine2);
|
||||||
|
|
||||||
|
//! V is a 3-element vector with member fields x, y and z
|
||||||
|
template<typename T, typename V> static
|
||||||
|
V operator*(const Affine3<T>& affine, const V& vector);
|
||||||
|
|
||||||
|
typedef Affine3<float> Affine3f;
|
||||||
|
typedef Affine3<double> Affine3d;
|
||||||
|
|
||||||
|
static Vec3f operator*(const Affine3f& affine, const Vec3f& vector);
|
||||||
|
static Vec3d operator*(const Affine3d& affine, const Vec3d& vector);
|
||||||
|
|
||||||
|
template<typename _Tp> class DataType< Affine3<_Tp> >
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef Affine3<_Tp> value_type;
|
||||||
|
typedef Affine3<typename DataType<_Tp>::work_type> work_type;
|
||||||
|
typedef _Tp channel_type;
|
||||||
|
|
||||||
|
enum { generic_type = 0,
|
||||||
|
channels = 16,
|
||||||
|
fmt = traits::SafeFmt<channel_type>::fmt + ((channels - 1) << 8)
|
||||||
|
#ifdef OPENCV_TRAITS_ENABLE_DEPRECATED
|
||||||
|
,depth = DataType<channel_type>::depth
|
||||||
|
,type = CV_MAKETYPE(depth, channels)
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef Vec<channel_type, channels> vec_type;
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace traits {
|
||||||
|
template<typename _Tp>
|
||||||
|
struct Depth< Affine3<_Tp> > { enum { value = Depth<_Tp>::value }; };
|
||||||
|
template<typename _Tp>
|
||||||
|
struct Type< Affine3<_Tp> > { enum { value = CV_MAKETYPE(Depth<_Tp>::value, 16) }; };
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
//! @} core
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//! @cond IGNORED
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Implementation
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T>::Affine3()
|
||||||
|
: matrix(Mat4::eye())
|
||||||
|
{}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T>::Affine3(const Mat4& affine)
|
||||||
|
: matrix(affine)
|
||||||
|
{}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T>::Affine3(const Mat3& R, const Vec3& t)
|
||||||
|
{
|
||||||
|
rotation(R);
|
||||||
|
translation(t);
|
||||||
|
matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;
|
||||||
|
matrix.val[15] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T>::Affine3(const Vec3& _rvec, const Vec3& t)
|
||||||
|
{
|
||||||
|
rotation(_rvec);
|
||||||
|
translation(t);
|
||||||
|
matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;
|
||||||
|
matrix.val[15] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T>::Affine3(const cv::Mat& data, const Vec3& t)
|
||||||
|
{
|
||||||
|
CV_Assert(data.type() == cv::traits::Type<T>::value);
|
||||||
|
CV_Assert(data.channels() == 1);
|
||||||
|
|
||||||
|
if (data.cols == 4 && data.rows == 4)
|
||||||
|
{
|
||||||
|
data.copyTo(matrix);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (data.cols == 4 && data.rows == 3)
|
||||||
|
{
|
||||||
|
rotation(data(Rect(0, 0, 3, 3)));
|
||||||
|
translation(data(Rect(3, 0, 1, 3)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rotation(data);
|
||||||
|
translation(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;
|
||||||
|
matrix.val[15] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T>::Affine3(const float_type* vals) : matrix(vals)
|
||||||
|
{}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T> cv::Affine3<T>::Identity()
|
||||||
|
{
|
||||||
|
return Affine3<T>(cv::Affine3<T>::Mat4::eye());
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
void cv::Affine3<T>::rotation(const Mat3& R)
|
||||||
|
{
|
||||||
|
linear(R);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
void cv::Affine3<T>::rotation(const Vec3& _rvec)
|
||||||
|
{
|
||||||
|
double theta = norm(_rvec);
|
||||||
|
|
||||||
|
if (theta < DBL_EPSILON)
|
||||||
|
rotation(Mat3::eye());
|
||||||
|
else
|
||||||
|
{
|
||||||
|
double c = std::cos(theta);
|
||||||
|
double s = std::sin(theta);
|
||||||
|
double c1 = 1. - c;
|
||||||
|
double itheta = (theta != 0) ? 1./theta : 0.;
|
||||||
|
|
||||||
|
Point3_<T> r = _rvec*itheta;
|
||||||
|
|
||||||
|
Mat3 rrt( r.x*r.x, r.x*r.y, r.x*r.z, r.x*r.y, r.y*r.y, r.y*r.z, r.x*r.z, r.y*r.z, r.z*r.z );
|
||||||
|
Mat3 r_x( 0, -r.z, r.y, r.z, 0, -r.x, -r.y, r.x, 0 );
|
||||||
|
|
||||||
|
// R = cos(theta)*I + (1 - cos(theta))*r*rT + sin(theta)*[r_x]
|
||||||
|
// where [r_x] is [0 -rz ry; rz 0 -rx; -ry rx 0]
|
||||||
|
Mat3 R = c*Mat3::eye() + c1*rrt + s*r_x;
|
||||||
|
|
||||||
|
rotation(R);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Combines rotation methods above. Supports 3x3, 1x3, 3x1 sizes of data matrix;
|
||||||
|
template<typename T> inline
|
||||||
|
void cv::Affine3<T>::rotation(const cv::Mat& data)
|
||||||
|
{
|
||||||
|
CV_Assert(data.type() == cv::traits::Type<T>::value);
|
||||||
|
CV_Assert(data.channels() == 1);
|
||||||
|
|
||||||
|
if (data.cols == 3 && data.rows == 3)
|
||||||
|
{
|
||||||
|
Mat3 R;
|
||||||
|
data.copyTo(R);
|
||||||
|
rotation(R);
|
||||||
|
}
|
||||||
|
else if ((data.cols == 3 && data.rows == 1) || (data.cols == 1 && data.rows == 3))
|
||||||
|
{
|
||||||
|
Vec3 _rvec;
|
||||||
|
data.reshape(1, 3).copyTo(_rvec);
|
||||||
|
rotation(_rvec);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CV_Error(Error::StsError, "Input matrix can only be 3x3, 1x3 or 3x1");
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
void cv::Affine3<T>::linear(const Mat3& L)
|
||||||
|
{
|
||||||
|
matrix.val[0] = L.val[0]; matrix.val[1] = L.val[1]; matrix.val[ 2] = L.val[2];
|
||||||
|
matrix.val[4] = L.val[3]; matrix.val[5] = L.val[4]; matrix.val[ 6] = L.val[5];
|
||||||
|
matrix.val[8] = L.val[6]; matrix.val[9] = L.val[7]; matrix.val[10] = L.val[8];
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
void cv::Affine3<T>::translation(const Vec3& t)
|
||||||
|
{
|
||||||
|
matrix.val[3] = t[0]; matrix.val[7] = t[1]; matrix.val[11] = t[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
typename cv::Affine3<T>::Mat3 cv::Affine3<T>::rotation() const
|
||||||
|
{
|
||||||
|
return linear();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
typename cv::Affine3<T>::Mat3 cv::Affine3<T>::linear() const
|
||||||
|
{
|
||||||
|
typename cv::Affine3<T>::Mat3 R;
|
||||||
|
R.val[0] = matrix.val[0]; R.val[1] = matrix.val[1]; R.val[2] = matrix.val[ 2];
|
||||||
|
R.val[3] = matrix.val[4]; R.val[4] = matrix.val[5]; R.val[5] = matrix.val[ 6];
|
||||||
|
R.val[6] = matrix.val[8]; R.val[7] = matrix.val[9]; R.val[8] = matrix.val[10];
|
||||||
|
return R;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
typename cv::Affine3<T>::Vec3 cv::Affine3<T>::translation() const
|
||||||
|
{
|
||||||
|
return Vec3(matrix.val[3], matrix.val[7], matrix.val[11]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
typename cv::Affine3<T>::Vec3 cv::Affine3<T>::rvec() const
|
||||||
|
{
|
||||||
|
cv::Vec3d w;
|
||||||
|
cv::Matx33d u, vt, R = rotation();
|
||||||
|
cv::SVD::compute(R, w, u, vt, cv::SVD::FULL_UV + cv::SVD::MODIFY_A);
|
||||||
|
R = u * vt;
|
||||||
|
|
||||||
|
double rx = R.val[7] - R.val[5];
|
||||||
|
double ry = R.val[2] - R.val[6];
|
||||||
|
double rz = R.val[3] - R.val[1];
|
||||||
|
|
||||||
|
double s = std::sqrt((rx*rx + ry*ry + rz*rz)*0.25);
|
||||||
|
double c = (R.val[0] + R.val[4] + R.val[8] - 1) * 0.5;
|
||||||
|
c = c > 1.0 ? 1.0 : c < -1.0 ? -1.0 : c;
|
||||||
|
double theta = std::acos(c);
|
||||||
|
|
||||||
|
if( s < 1e-5 )
|
||||||
|
{
|
||||||
|
if( c > 0 )
|
||||||
|
rx = ry = rz = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
double t;
|
||||||
|
t = (R.val[0] + 1) * 0.5;
|
||||||
|
rx = std::sqrt(std::max(t, 0.0));
|
||||||
|
t = (R.val[4] + 1) * 0.5;
|
||||||
|
ry = std::sqrt(std::max(t, 0.0)) * (R.val[1] < 0 ? -1.0 : 1.0);
|
||||||
|
t = (R.val[8] + 1) * 0.5;
|
||||||
|
rz = std::sqrt(std::max(t, 0.0)) * (R.val[2] < 0 ? -1.0 : 1.0);
|
||||||
|
|
||||||
|
if( fabs(rx) < fabs(ry) && fabs(rx) < fabs(rz) && (R.val[5] > 0) != (ry*rz > 0) )
|
||||||
|
rz = -rz;
|
||||||
|
theta /= std::sqrt(rx*rx + ry*ry + rz*rz);
|
||||||
|
rx *= theta;
|
||||||
|
ry *= theta;
|
||||||
|
rz *= theta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
double vth = 1/(2*s);
|
||||||
|
vth *= theta;
|
||||||
|
rx *= vth; ry *= vth; rz *= vth;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cv::Vec3d(rx, ry, rz);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T> cv::Affine3<T>::inv(int method) const
|
||||||
|
{
|
||||||
|
return matrix.inv(method);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T> cv::Affine3<T>::rotate(const Mat3& R) const
|
||||||
|
{
|
||||||
|
Mat3 Lc = linear();
|
||||||
|
Vec3 tc = translation();
|
||||||
|
Mat4 result;
|
||||||
|
result.val[12] = result.val[13] = result.val[14] = 0;
|
||||||
|
result.val[15] = 1;
|
||||||
|
|
||||||
|
for(int j = 0; j < 3; ++j)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < 3; ++i)
|
||||||
|
{
|
||||||
|
float_type value = 0;
|
||||||
|
for(int k = 0; k < 3; ++k)
|
||||||
|
value += R(j, k) * Lc(k, i);
|
||||||
|
result(j, i) = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
result(j, 3) = R.row(j).dot(tc.t());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T> cv::Affine3<T>::rotate(const Vec3& _rvec) const
|
||||||
|
{
|
||||||
|
return rotate(Affine3f(_rvec).rotation());
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T> cv::Affine3<T>::translate(const Vec3& t) const
|
||||||
|
{
|
||||||
|
Mat4 m = matrix;
|
||||||
|
m.val[ 3] += t[0];
|
||||||
|
m.val[ 7] += t[1];
|
||||||
|
m.val[11] += t[2];
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T> cv::Affine3<T>::concatenate(const Affine3<T>& affine) const
|
||||||
|
{
|
||||||
|
return (*this).rotate(affine.rotation()).translate(affine.translation());
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> template <typename Y> inline
|
||||||
|
cv::Affine3<T>::operator Affine3<Y>() const
|
||||||
|
{
|
||||||
|
return Affine3<Y>(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> template <typename Y> inline
|
||||||
|
cv::Affine3<Y> cv::Affine3<T>::cast() const
|
||||||
|
{
|
||||||
|
return Affine3<Y>(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T> cv::operator*(const cv::Affine3<T>& affine1, const cv::Affine3<T>& affine2)
|
||||||
|
{
|
||||||
|
return affine2.concatenate(affine1);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T, typename V> inline
|
||||||
|
V cv::operator*(const cv::Affine3<T>& affine, const V& v)
|
||||||
|
{
|
||||||
|
const typename Affine3<T>::Mat4& m = affine.matrix;
|
||||||
|
|
||||||
|
V r;
|
||||||
|
r.x = m.val[0] * v.x + m.val[1] * v.y + m.val[ 2] * v.z + m.val[ 3];
|
||||||
|
r.y = m.val[4] * v.x + m.val[5] * v.y + m.val[ 6] * v.z + m.val[ 7];
|
||||||
|
r.z = m.val[8] * v.x + m.val[9] * v.y + m.val[10] * v.z + m.val[11];
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
cv::Vec3f cv::operator*(const cv::Affine3f& affine, const cv::Vec3f& v)
|
||||||
|
{
|
||||||
|
const cv::Matx44f& m = affine.matrix;
|
||||||
|
cv::Vec3f r;
|
||||||
|
r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3];
|
||||||
|
r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7];
|
||||||
|
r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11];
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
cv::Vec3d cv::operator*(const cv::Affine3d& affine, const cv::Vec3d& v)
|
||||||
|
{
|
||||||
|
const cv::Matx44d& m = affine.matrix;
|
||||||
|
cv::Vec3d r;
|
||||||
|
r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3];
|
||||||
|
r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7];
|
||||||
|
r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11];
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T>::Affine3(const Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>& affine)
|
||||||
|
{
|
||||||
|
cv::Mat(4, 4, cv::traits::Type<T>::value, affine.matrix().data()).copyTo(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T>::Affine3(const Eigen::Transform<T, 3, Eigen::Affine>& affine)
|
||||||
|
{
|
||||||
|
Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)> a = affine;
|
||||||
|
cv::Mat(4, 4, cv::traits::Type<T>::value, a.matrix().data()).copyTo(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T>::operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>() const
|
||||||
|
{
|
||||||
|
Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)> r;
|
||||||
|
cv::Mat hdr(4, 4, cv::traits::Type<T>::value, r.matrix().data());
|
||||||
|
cv::Mat(matrix, false).copyTo(hdr);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> inline
|
||||||
|
cv::Affine3<T>::operator Eigen::Transform<T, 3, Eigen::Affine>() const
|
||||||
|
{
|
||||||
|
return this->operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H */
|
||||||
|
|
||||||
|
//! @endcond
|
||||||
|
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* OPENCV_CORE_AFFINE3_HPP */
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user