├── .gitignore ├── .gitmodules ├── CMakeLists.txt ├── LICENSE ├── README.md ├── include └── msvc │ ├── inttypes.h │ └── mstdint.h └── src └── main.cpp /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "cmake"] 2 | path = cmake 3 | url = https://github.com/snikulov/cmake-modules.git 4 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | #-------------------------------------------- 2 | # C++ language project template 3 | # 4 | # default folder structure as follows 5 | # 6 | # cmake/ <- here the additional modules with handy macro and finders 7 | # include/ 8 | # src/ 9 | # test/ 10 | # 11 | #-------------------------------------------- 12 | cmake_minimum_required(VERSION 3.1 FATAL_ERROR) 13 | 14 | # use standard file endings - rename to cxx if needed 15 | set(SRC_EXT_PATTERN ".cpp") 16 | 17 | # rename to your name here 18 | set(PROJECT_NAME vcffmpeg) 19 | 20 | # define project for C++ language 21 | project(${PROJECT_NAME} CXX) 22 | 23 | # set where to find additional cmake modules if any 24 | # comment it out if not required 25 | set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) 26 | 27 | # set compiler support for C++11 standard 28 | option(USE_CXX11_STD "Product should be build with C++11 compiler option enabled" ON) 29 | 30 | if(USE_CXX11_STD) 31 | set(CMAKE_CXX_STANDARD 11) 32 | endif() 33 | 34 | # add include path for project 35 | # add additional path if required 36 | include_directories(${PROJECT_SOURCE_DIR}/include) 37 | 38 | find_package(FFmpeg COMPONENTS AVCODEC AVFORMAT AVUTIL AVDEVICE REQUIRED) 39 | 40 | if(FFMPEG_FOUND) 41 | # FFMPEG_INCLUDE_DIRS - Include directory necessary for using the required components headers. 42 | # FFMPEG_LIBRARIES - Link these to use the required ffmpeg components. 43 | # FFMPEG_DEFINITIONS - Compiler switches required for using the required ffmpeg components. 44 | message("FFMPEG_INCLUDE_DIRS = ${FFMPEG_INCLUDE_DIRS} ") 45 | message("FFMPEG_LIBRARIES = ${FFMPEG_LIBRARIES} ") 46 | message("FFMPEG_DEFINITIONS = ${FFMPEG_DEFINITIONS} ") 47 | 48 | include_directories(${FFMPEG_INCLUDE_DIRS}) 49 | else() 50 | message(FATAL_ERROR "FFMPEG not found") 51 | endif() 52 | 53 | # get all *.cpp files from src to build target 54 | file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/src/*${SRC_EXT_PATTERN}) 55 | source_group("Source Files" FILES ${SRC_FILES}) 56 | 57 | 58 | # build target 59 | add_executable(${PROJECT_NAME} ${SRC_FILES}) 60 | if(MSVC) 61 | target_include_directories(${PROJECT_NAME} PRIVATE include/msvc) 62 | endif() 63 | target_link_libraries(${PROJECT_NAME} ${FFMPEG_LIBRARIES}) 64 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ffmpeg_win_example 2 | ================== 3 | 4 | CMake + FFMPEG for Microsoft Visual Studio example 5 | 6 | Used 3rd parties tools/libs 7 | ============================ 8 | 9 | - Zeranoe FFmpeg builds (DEV + Shared) http://ffmpeg.zeranoe.com/builds/ install anywhere on build machine 10 | - msinttypes an ISO C9x compliant stdint.h and inttypes.h for Microsoft Visual Studio http://code.google.com/p/msinttypes/ 11 | Note: I've renamed stdint.h from this paroject to mstdint.h to avoid clash with existed stdint.h for MSVS2010+ 12 | - cmake http://cmake.org/ 13 | - ninja http://martine.github.io/ninja/ 14 | - Visual studio https://www.visualstudio.com/ 15 | 16 | 17 | 18 | Usage 19 | ====== 20 | 21 | Refer wiki page for usage https://github.com/snikulov/ffmpeg_win_example/wiki/Full-build-procedure 22 | -------------------------------------------------------------------------------- /include/msvc/inttypes.h: -------------------------------------------------------------------------------- 1 | // ISO C9x compliant inttypes.h for Microsoft Visual Studio 2 | // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 3 | // 4 | // Copyright (c) 2006-2013 Alexander Chemeris 5 | // 6 | // Redistribution and use in source and binary forms, with or without 7 | // modification, are permitted provided that the following conditions are met: 8 | // 9 | // 1. Redistributions of source code must retain the above copyright notice, 10 | // this list of conditions and the following disclaimer. 11 | // 12 | // 2. Redistributions in binary form must reproduce the above copyright 13 | // notice, this list of conditions and the following disclaimer in the 14 | // documentation and/or other materials provided with the distribution. 15 | // 16 | // 3. Neither the name of the product nor the names of its contributors may 17 | // be used to endorse or promote products derived from this software 18 | // without specific prior written permission. 19 | // 20 | // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 21 | // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 22 | // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 23 | // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 26 | // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 | // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28 | // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29 | // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | // 31 | /////////////////////////////////////////////////////////////////////////////// 32 | 33 | #ifndef _MSC_VER // [ 34 | #error "Use this header only with Microsoft Visual C++ compilers!" 35 | #endif // _MSC_VER ] 36 | 37 | #ifndef _MSC_INTTYPES_H_ // [ 38 | #define _MSC_INTTYPES_H_ 39 | 40 | #if _MSC_VER > 1000 41 | #pragma once 42 | #endif 43 | 44 | #if _MSC_VER >= 1600 // [ 45 | #include 46 | #else // ] _MSC_VER >= 1600 [ 47 | #include "mstdint.h" 48 | #endif 49 | 50 | // 7.8 Format conversion of integer types 51 | 52 | typedef struct { 53 | intmax_t quot; 54 | intmax_t rem; 55 | } imaxdiv_t; 56 | 57 | // 7.8.1 Macros for format specifiers 58 | 59 | #if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 60 | 61 | // The fprintf macros for signed integers are: 62 | #define PRId8 "d" 63 | #define PRIi8 "i" 64 | #define PRIdLEAST8 "d" 65 | #define PRIiLEAST8 "i" 66 | #define PRIdFAST8 "d" 67 | #define PRIiFAST8 "i" 68 | 69 | #define PRId16 "hd" 70 | #define PRIi16 "hi" 71 | #define PRIdLEAST16 "hd" 72 | #define PRIiLEAST16 "hi" 73 | #define PRIdFAST16 "hd" 74 | #define PRIiFAST16 "hi" 75 | 76 | #define PRId32 "I32d" 77 | #define PRIi32 "I32i" 78 | #define PRIdLEAST32 "I32d" 79 | #define PRIiLEAST32 "I32i" 80 | #define PRIdFAST32 "I32d" 81 | #define PRIiFAST32 "I32i" 82 | 83 | #define PRId64 "I64d" 84 | #define PRIi64 "I64i" 85 | #define PRIdLEAST64 "I64d" 86 | #define PRIiLEAST64 "I64i" 87 | #define PRIdFAST64 "I64d" 88 | #define PRIiFAST64 "I64i" 89 | 90 | #define PRIdMAX "I64d" 91 | #define PRIiMAX "I64i" 92 | 93 | #define PRIdPTR "Id" 94 | #define PRIiPTR "Ii" 95 | 96 | // The fprintf macros for unsigned integers are: 97 | #define PRIo8 "o" 98 | #define PRIu8 "u" 99 | #define PRIx8 "x" 100 | #define PRIX8 "X" 101 | #define PRIoLEAST8 "o" 102 | #define PRIuLEAST8 "u" 103 | #define PRIxLEAST8 "x" 104 | #define PRIXLEAST8 "X" 105 | #define PRIoFAST8 "o" 106 | #define PRIuFAST8 "u" 107 | #define PRIxFAST8 "x" 108 | #define PRIXFAST8 "X" 109 | 110 | #define PRIo16 "ho" 111 | #define PRIu16 "hu" 112 | #define PRIx16 "hx" 113 | #define PRIX16 "hX" 114 | #define PRIoLEAST16 "ho" 115 | #define PRIuLEAST16 "hu" 116 | #define PRIxLEAST16 "hx" 117 | #define PRIXLEAST16 "hX" 118 | #define PRIoFAST16 "ho" 119 | #define PRIuFAST16 "hu" 120 | #define PRIxFAST16 "hx" 121 | #define PRIXFAST16 "hX" 122 | 123 | #define PRIo32 "I32o" 124 | #define PRIu32 "I32u" 125 | #define PRIx32 "I32x" 126 | #define PRIX32 "I32X" 127 | #define PRIoLEAST32 "I32o" 128 | #define PRIuLEAST32 "I32u" 129 | #define PRIxLEAST32 "I32x" 130 | #define PRIXLEAST32 "I32X" 131 | #define PRIoFAST32 "I32o" 132 | #define PRIuFAST32 "I32u" 133 | #define PRIxFAST32 "I32x" 134 | #define PRIXFAST32 "I32X" 135 | 136 | #define PRIo64 "I64o" 137 | #define PRIu64 "I64u" 138 | #define PRIx64 "I64x" 139 | #define PRIX64 "I64X" 140 | #define PRIoLEAST64 "I64o" 141 | #define PRIuLEAST64 "I64u" 142 | #define PRIxLEAST64 "I64x" 143 | #define PRIXLEAST64 "I64X" 144 | #define PRIoFAST64 "I64o" 145 | #define PRIuFAST64 "I64u" 146 | #define PRIxFAST64 "I64x" 147 | #define PRIXFAST64 "I64X" 148 | 149 | #define PRIoMAX "I64o" 150 | #define PRIuMAX "I64u" 151 | #define PRIxMAX "I64x" 152 | #define PRIXMAX "I64X" 153 | 154 | #define PRIoPTR "Io" 155 | #define PRIuPTR "Iu" 156 | #define PRIxPTR "Ix" 157 | #define PRIXPTR "IX" 158 | 159 | // The fscanf macros for signed integers are: 160 | #define SCNd8 "d" 161 | #define SCNi8 "i" 162 | #define SCNdLEAST8 "d" 163 | #define SCNiLEAST8 "i" 164 | #define SCNdFAST8 "d" 165 | #define SCNiFAST8 "i" 166 | 167 | #define SCNd16 "hd" 168 | #define SCNi16 "hi" 169 | #define SCNdLEAST16 "hd" 170 | #define SCNiLEAST16 "hi" 171 | #define SCNdFAST16 "hd" 172 | #define SCNiFAST16 "hi" 173 | 174 | #define SCNd32 "ld" 175 | #define SCNi32 "li" 176 | #define SCNdLEAST32 "ld" 177 | #define SCNiLEAST32 "li" 178 | #define SCNdFAST32 "ld" 179 | #define SCNiFAST32 "li" 180 | 181 | #define SCNd64 "I64d" 182 | #define SCNi64 "I64i" 183 | #define SCNdLEAST64 "I64d" 184 | #define SCNiLEAST64 "I64i" 185 | #define SCNdFAST64 "I64d" 186 | #define SCNiFAST64 "I64i" 187 | 188 | #define SCNdMAX "I64d" 189 | #define SCNiMAX "I64i" 190 | 191 | #ifdef _WIN64 // [ 192 | # define SCNdPTR "I64d" 193 | # define SCNiPTR "I64i" 194 | #else // _WIN64 ][ 195 | # define SCNdPTR "ld" 196 | # define SCNiPTR "li" 197 | #endif // _WIN64 ] 198 | 199 | // The fscanf macros for unsigned integers are: 200 | #define SCNo8 "o" 201 | #define SCNu8 "u" 202 | #define SCNx8 "x" 203 | #define SCNX8 "X" 204 | #define SCNoLEAST8 "o" 205 | #define SCNuLEAST8 "u" 206 | #define SCNxLEAST8 "x" 207 | #define SCNXLEAST8 "X" 208 | #define SCNoFAST8 "o" 209 | #define SCNuFAST8 "u" 210 | #define SCNxFAST8 "x" 211 | #define SCNXFAST8 "X" 212 | 213 | #define SCNo16 "ho" 214 | #define SCNu16 "hu" 215 | #define SCNx16 "hx" 216 | #define SCNX16 "hX" 217 | #define SCNoLEAST16 "ho" 218 | #define SCNuLEAST16 "hu" 219 | #define SCNxLEAST16 "hx" 220 | #define SCNXLEAST16 "hX" 221 | #define SCNoFAST16 "ho" 222 | #define SCNuFAST16 "hu" 223 | #define SCNxFAST16 "hx" 224 | #define SCNXFAST16 "hX" 225 | 226 | #define SCNo32 "lo" 227 | #define SCNu32 "lu" 228 | #define SCNx32 "lx" 229 | #define SCNX32 "lX" 230 | #define SCNoLEAST32 "lo" 231 | #define SCNuLEAST32 "lu" 232 | #define SCNxLEAST32 "lx" 233 | #define SCNXLEAST32 "lX" 234 | #define SCNoFAST32 "lo" 235 | #define SCNuFAST32 "lu" 236 | #define SCNxFAST32 "lx" 237 | #define SCNXFAST32 "lX" 238 | 239 | #define SCNo64 "I64o" 240 | #define SCNu64 "I64u" 241 | #define SCNx64 "I64x" 242 | #define SCNX64 "I64X" 243 | #define SCNoLEAST64 "I64o" 244 | #define SCNuLEAST64 "I64u" 245 | #define SCNxLEAST64 "I64x" 246 | #define SCNXLEAST64 "I64X" 247 | #define SCNoFAST64 "I64o" 248 | #define SCNuFAST64 "I64u" 249 | #define SCNxFAST64 "I64x" 250 | #define SCNXFAST64 "I64X" 251 | 252 | #define SCNoMAX "I64o" 253 | #define SCNuMAX "I64u" 254 | #define SCNxMAX "I64x" 255 | #define SCNXMAX "I64X" 256 | 257 | #ifdef _WIN64 // [ 258 | # define SCNoPTR "I64o" 259 | # define SCNuPTR "I64u" 260 | # define SCNxPTR "I64x" 261 | # define SCNXPTR "I64X" 262 | #else // _WIN64 ][ 263 | # define SCNoPTR "lo" 264 | # define SCNuPTR "lu" 265 | # define SCNxPTR "lx" 266 | # define SCNXPTR "lX" 267 | #endif // _WIN64 ] 268 | 269 | #endif // __STDC_FORMAT_MACROS ] 270 | 271 | // 7.8.2 Functions for greatest-width integer types 272 | 273 | // 7.8.2.1 The imaxabs function 274 | #define imaxabs _abs64 275 | 276 | // 7.8.2.2 The imaxdiv function 277 | 278 | // This is modified version of div() function from Microsoft's div.c found 279 | // in %MSVC.NET%\crt\src\div.c 280 | #ifdef STATIC_IMAXDIV // [ 281 | static 282 | #else // STATIC_IMAXDIV ][ 283 | _inline 284 | #endif // STATIC_IMAXDIV ] 285 | imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) 286 | { 287 | imaxdiv_t result; 288 | 289 | result.quot = numer / denom; 290 | result.rem = numer % denom; 291 | 292 | if (numer < 0 && result.rem > 0) { 293 | // did division wrong; must fix up 294 | ++result.quot; 295 | result.rem -= denom; 296 | } 297 | 298 | return result; 299 | } 300 | 301 | // 7.8.2.3 The strtoimax and strtoumax functions 302 | #define strtoimax _strtoi64 303 | #define strtoumax _strtoui64 304 | 305 | // 7.8.2.4 The wcstoimax and wcstoumax functions 306 | #define wcstoimax _wcstoi64 307 | #define wcstoumax _wcstoui64 308 | 309 | 310 | #endif // _MSC_INTTYPES_H_ ] 311 | -------------------------------------------------------------------------------- /include/msvc/mstdint.h: -------------------------------------------------------------------------------- 1 | // ISO C9x compliant stdint.h for Microsoft Visual Studio 2 | // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 3 | // 4 | // Copyright (c) 2006-2013 Alexander Chemeris 5 | // 6 | // Redistribution and use in source and binary forms, with or without 7 | // modification, are permitted provided that the following conditions are met: 8 | // 9 | // 1. Redistributions of source code must retain the above copyright notice, 10 | // this list of conditions and the following disclaimer. 11 | // 12 | // 2. Redistributions in binary form must reproduce the above copyright 13 | // notice, this list of conditions and the following disclaimer in the 14 | // documentation and/or other materials provided with the distribution. 15 | // 16 | // 3. Neither the name of the product nor the names of its contributors may 17 | // be used to endorse or promote products derived from this software 18 | // without specific prior written permission. 19 | // 20 | // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 21 | // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 22 | // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 23 | // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 26 | // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 | // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28 | // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29 | // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | // 31 | /////////////////////////////////////////////////////////////////////////////// 32 | 33 | #ifndef _MSC_VER // [ 34 | #error "Use this header only with Microsoft Visual C++ compilers!" 35 | #endif // _MSC_VER ] 36 | 37 | #ifndef _MSC_STDINT_H_ // [ 38 | #define _MSC_STDINT_H_ 39 | 40 | #if _MSC_VER > 1000 41 | #pragma once 42 | #endif 43 | 44 | #if _MSC_VER >= 1600 // [ 45 | #include 46 | #else // ] _MSC_VER >= 1600 [ 47 | 48 | #include 49 | 50 | // For Visual Studio 6 in C++ mode and for many Visual Studio versions when 51 | // compiling for ARM we should wrap include with 'extern "C++" {}' 52 | // or compiler give many errors like this: 53 | // error C2733: second C linkage of overloaded function 'wmemchr' not allowed 54 | #ifdef __cplusplus 55 | extern "C" { 56 | #endif 57 | # include 58 | #ifdef __cplusplus 59 | } 60 | #endif 61 | 62 | // Define _W64 macros to mark types changing their size, like intptr_t. 63 | #ifndef _W64 64 | # if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 65 | # define _W64 __w64 66 | # else 67 | # define _W64 68 | # endif 69 | #endif 70 | 71 | 72 | // 7.18.1 Integer types 73 | 74 | // 7.18.1.1 Exact-width integer types 75 | 76 | // Visual Studio 6 and Embedded Visual C++ 4 doesn't 77 | // realize that, e.g. char has the same size as __int8 78 | // so we give up on __intX for them. 79 | #if (_MSC_VER < 1300) 80 | typedef signed char int8_t; 81 | typedef signed short int16_t; 82 | typedef signed int int32_t; 83 | typedef unsigned char uint8_t; 84 | typedef unsigned short uint16_t; 85 | typedef unsigned int uint32_t; 86 | #else 87 | typedef signed __int8 int8_t; 88 | typedef signed __int16 int16_t; 89 | typedef signed __int32 int32_t; 90 | typedef unsigned __int8 uint8_t; 91 | typedef unsigned __int16 uint16_t; 92 | typedef unsigned __int32 uint32_t; 93 | #endif 94 | typedef signed __int64 int64_t; 95 | typedef unsigned __int64 uint64_t; 96 | 97 | 98 | // 7.18.1.2 Minimum-width integer types 99 | typedef int8_t int_least8_t; 100 | typedef int16_t int_least16_t; 101 | typedef int32_t int_least32_t; 102 | typedef int64_t int_least64_t; 103 | typedef uint8_t uint_least8_t; 104 | typedef uint16_t uint_least16_t; 105 | typedef uint32_t uint_least32_t; 106 | typedef uint64_t uint_least64_t; 107 | 108 | // 7.18.1.3 Fastest minimum-width integer types 109 | typedef int8_t int_fast8_t; 110 | typedef int16_t int_fast16_t; 111 | typedef int32_t int_fast32_t; 112 | typedef int64_t int_fast64_t; 113 | typedef uint8_t uint_fast8_t; 114 | typedef uint16_t uint_fast16_t; 115 | typedef uint32_t uint_fast32_t; 116 | typedef uint64_t uint_fast64_t; 117 | 118 | // 7.18.1.4 Integer types capable of holding object pointers 119 | #ifdef _WIN64 // [ 120 | typedef signed __int64 intptr_t; 121 | typedef unsigned __int64 uintptr_t; 122 | #else // _WIN64 ][ 123 | typedef _W64 signed int intptr_t; 124 | typedef _W64 unsigned int uintptr_t; 125 | #endif // _WIN64 ] 126 | 127 | // 7.18.1.5 Greatest-width integer types 128 | typedef int64_t intmax_t; 129 | typedef uint64_t uintmax_t; 130 | 131 | 132 | // 7.18.2 Limits of specified-width integer types 133 | 134 | #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 135 | 136 | // 7.18.2.1 Limits of exact-width integer types 137 | #define INT8_MIN ((int8_t)_I8_MIN) 138 | #define INT8_MAX _I8_MAX 139 | #define INT16_MIN ((int16_t)_I16_MIN) 140 | #define INT16_MAX _I16_MAX 141 | #define INT32_MIN ((int32_t)_I32_MIN) 142 | #define INT32_MAX _I32_MAX 143 | #define INT64_MIN ((int64_t)_I64_MIN) 144 | #define INT64_MAX _I64_MAX 145 | #define UINT8_MAX _UI8_MAX 146 | #define UINT16_MAX _UI16_MAX 147 | #define UINT32_MAX _UI32_MAX 148 | #define UINT64_MAX _UI64_MAX 149 | 150 | // 7.18.2.2 Limits of minimum-width integer types 151 | #define INT_LEAST8_MIN INT8_MIN 152 | #define INT_LEAST8_MAX INT8_MAX 153 | #define INT_LEAST16_MIN INT16_MIN 154 | #define INT_LEAST16_MAX INT16_MAX 155 | #define INT_LEAST32_MIN INT32_MIN 156 | #define INT_LEAST32_MAX INT32_MAX 157 | #define INT_LEAST64_MIN INT64_MIN 158 | #define INT_LEAST64_MAX INT64_MAX 159 | #define UINT_LEAST8_MAX UINT8_MAX 160 | #define UINT_LEAST16_MAX UINT16_MAX 161 | #define UINT_LEAST32_MAX UINT32_MAX 162 | #define UINT_LEAST64_MAX UINT64_MAX 163 | 164 | // 7.18.2.3 Limits of fastest minimum-width integer types 165 | #define INT_FAST8_MIN INT8_MIN 166 | #define INT_FAST8_MAX INT8_MAX 167 | #define INT_FAST16_MIN INT16_MIN 168 | #define INT_FAST16_MAX INT16_MAX 169 | #define INT_FAST32_MIN INT32_MIN 170 | #define INT_FAST32_MAX INT32_MAX 171 | #define INT_FAST64_MIN INT64_MIN 172 | #define INT_FAST64_MAX INT64_MAX 173 | #define UINT_FAST8_MAX UINT8_MAX 174 | #define UINT_FAST16_MAX UINT16_MAX 175 | #define UINT_FAST32_MAX UINT32_MAX 176 | #define UINT_FAST64_MAX UINT64_MAX 177 | 178 | // 7.18.2.4 Limits of integer types capable of holding object pointers 179 | #ifdef _WIN64 // [ 180 | # define INTPTR_MIN INT64_MIN 181 | # define INTPTR_MAX INT64_MAX 182 | # define UINTPTR_MAX UINT64_MAX 183 | #else // _WIN64 ][ 184 | # define INTPTR_MIN INT32_MIN 185 | # define INTPTR_MAX INT32_MAX 186 | # define UINTPTR_MAX UINT32_MAX 187 | #endif // _WIN64 ] 188 | 189 | // 7.18.2.5 Limits of greatest-width integer types 190 | #define INTMAX_MIN INT64_MIN 191 | #define INTMAX_MAX INT64_MAX 192 | #define UINTMAX_MAX UINT64_MAX 193 | 194 | // 7.18.3 Limits of other integer types 195 | 196 | #ifdef _WIN64 // [ 197 | # define PTRDIFF_MIN _I64_MIN 198 | # define PTRDIFF_MAX _I64_MAX 199 | #else // _WIN64 ][ 200 | # define PTRDIFF_MIN _I32_MIN 201 | # define PTRDIFF_MAX _I32_MAX 202 | #endif // _WIN64 ] 203 | 204 | #define SIG_ATOMIC_MIN INT_MIN 205 | #define SIG_ATOMIC_MAX INT_MAX 206 | 207 | #ifndef SIZE_MAX // [ 208 | # ifdef _WIN64 // [ 209 | # define SIZE_MAX _UI64_MAX 210 | # else // _WIN64 ][ 211 | # define SIZE_MAX _UI32_MAX 212 | # endif // _WIN64 ] 213 | #endif // SIZE_MAX ] 214 | 215 | // WCHAR_MIN and WCHAR_MAX are also defined in 216 | #ifndef WCHAR_MIN // [ 217 | # define WCHAR_MIN 0 218 | #endif // WCHAR_MIN ] 219 | #ifndef WCHAR_MAX // [ 220 | # define WCHAR_MAX _UI16_MAX 221 | #endif // WCHAR_MAX ] 222 | 223 | #define WINT_MIN 0 224 | #define WINT_MAX _UI16_MAX 225 | 226 | #endif // __STDC_LIMIT_MACROS ] 227 | 228 | 229 | // 7.18.4 Limits of other integer types 230 | 231 | #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 232 | 233 | // 7.18.4.1 Macros for minimum-width integer constants 234 | 235 | #define INT8_C(val) val##i8 236 | #define INT16_C(val) val##i16 237 | #define INT32_C(val) val##i32 238 | #define INT64_C(val) val##i64 239 | 240 | #define UINT8_C(val) val##ui8 241 | #define UINT16_C(val) val##ui16 242 | #define UINT32_C(val) val##ui32 243 | #define UINT64_C(val) val##ui64 244 | 245 | // 7.18.4.2 Macros for greatest-width integer constants 246 | // These #ifndef's are needed to prevent collisions with . 247 | // Check out Issue 9 for the details. 248 | #ifndef INTMAX_C // [ 249 | # define INTMAX_C INT64_C 250 | #endif // INTMAX_C ] 251 | #ifndef UINTMAX_C // [ 252 | # define UINTMAX_C UINT64_C 253 | #endif // UINTMAX_C ] 254 | 255 | #endif // __STDC_CONSTANT_MACROS ] 256 | 257 | #endif // _MSC_VER >= 1600 ] 258 | 259 | #endif // _MSC_STDINT_H_ ] 260 | -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | extern "C" 4 | { 5 | #include "libavcodec/avcodec.h" 6 | #include "libavformat/avformat.h" 7 | #include "libavutil/avutil.h" 8 | #include "libavdevice/avdevice.h" 9 | } 10 | 11 | int main(int argc, const char *argv[]) 12 | { 13 | av_register_all(); 14 | avcodec_register_all(); 15 | avformat_network_init(); 16 | avdevice_register_all(); 17 | unsigned ver = avdevice_version(); 18 | std::cout << ((ver >> 16) & 0xff) << "." << ((ver >> 8) & 0x0f) << "." << ((ver) & 0x0f) << std::endl; 19 | 20 | // std::cout << avdevice_configuration() << std::endl; 21 | 22 | 23 | AVOutputFormat * odev = av_output_audio_device_next(NULL); 24 | while (odev) 25 | { 26 | std::cout << odev->name << std::endl; 27 | odev = av_output_audio_device_next(odev); 28 | } 29 | 30 | AVInputFormat *idev = av_input_audio_device_next(nullptr); 31 | while (idev) 32 | { 33 | std::cout << idev->name << " " << idev->long_name << std::endl; 34 | idev = av_input_audio_device_next(idev); 35 | } 36 | return 0; 37 | } 38 | --------------------------------------------------------------------------------