1 /* 2 * copyright (c) 2003 Fabrice Bellard 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 /** 22 * @file 23 * @ingroup lavu 24 * Libavutil version macros 25 */ 26 module ffmpeg.libavutil.avutil_version; 27 28 import ffmpeg.libavutil; 29 30 extern (C) @nogc nothrow: 31 32 /** 33 * @addtogroup version_utils 34 * 35 * Useful to check and match library version in order to maintain 36 * backward compatibility. 37 * 38 * The FFmpeg libraries follow a versioning sheme very similar to 39 * Semantic Versioning (http://semver.org/) 40 * The difference is that the component called PATCH is called MICRO in FFmpeg 41 * and its value is reset to 100 instead of 0 to keep it above or equal to 100. 42 * Also we do not increase MICRO for every bugfix or change in git master. 43 * 44 * Prior to FFmpeg 3.2 point releases did not change any lib version number to 45 * avoid aliassing different git master checkouts. 46 * Starting with FFmpeg 3.2, the released library versions will occupy 47 * a separate MAJOR.MINOR that is not used on the master development branch. 48 * That is if we branch a release of master 55.10.123 we will bump to 55.11.100 49 * for the release and master will continue at 55.12.100 after it. Each new 50 * point release will then bump the MICRO improving the usefulness of the lib 51 * versions. 52 * 53 * @{ 54 */ 55 56 extern (D) auto AV_VERSION_INT(T0, T1, T2)(auto ref T0 a, auto ref T1 b, auto ref T2 c) 57 { 58 return a << 16 | b << 8 | c; 59 } 60 61 template AV_VERSION_DOT(int a, int b, int c) 62 { 63 import std.format; 64 enum AV_VERSION_DOT = format!"%s.%s.%s"(a, b, c); 65 } 66 67 68 alias AV_VERSION = AV_VERSION_DOT; 69 70 /** 71 * Extract version components from the full ::AV_VERSION_INT int as returned 72 * by functions like ::avformat_version() and ::avcodec_version() 73 */ 74 extern (D) auto AV_VERSION_MAJOR(T)(auto ref T a) 75 { 76 return a >> 16; 77 } 78 79 extern (D) auto AV_VERSION_MINOR(T)(auto ref T a) 80 { 81 return (a & 0x00FF00) >> 8; 82 } 83 84 extern (D) auto AV_VERSION_MICRO(T)(auto ref T a) 85 { 86 return a & 0xFF; 87 } 88 89 /** 90 * @} 91 */ 92 93 /** 94 * @defgroup lavu_ver Version and Build diagnostics 95 * 96 * Macros and function useful to check at compiletime and at runtime 97 * which version of libavutil is in use. 98 * 99 * @{ 100 */ 101 102 enum LIBAVUTIL_VERSION_MAJOR = 56; 103 enum LIBAVUTIL_VERSION_MINOR = 70; 104 enum LIBAVUTIL_VERSION_MICRO = 100; 105 106 enum LIBAVUTIL_VERSION_INT = AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, LIBAVUTIL_VERSION_MICRO); 107 enum LIBAVUTIL_VERSION = AV_VERSION!(LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, LIBAVUTIL_VERSION_MICRO); 108 enum LIBAVUTIL_BUILD = LIBAVUTIL_VERSION_INT; 109 110 /** 111 * @defgroup lavu_depr_guards Deprecation Guards 112 * FF_API_* defines may be placed below to indicate public API that will be 113 * dropped at a future version bump. The defines themselves are not part of 114 * the public API and may change, break or disappear at any time. 115 * 116 * @note, when bumping the major version it is recommended to manually 117 * disable each FF_API_* in its own commit instead of disabling them all 118 * at once through the bump. This improves the git bisect-ability of the change. 119 * 120 * @{ 121 */ 122 123 enum FF_API_VAAPI = LIBAVUTIL_VERSION_MAJOR < 57; 124 125 enum FF_API_FRAME_QP = LIBAVUTIL_VERSION_MAJOR < 57; 126 127 enum FF_API_PLUS1_MINUS1 = LIBAVUTIL_VERSION_MAJOR < 57; 128 129 enum FF_API_ERROR_FRAME = LIBAVUTIL_VERSION_MAJOR < 57; 130 131 enum FF_API_PKT_PTS = LIBAVUTIL_VERSION_MAJOR < 57; 132 133 enum FF_API_CRYPTO_SIZE_T = LIBAVUTIL_VERSION_MAJOR < 57; 134 135 enum FF_API_FRAME_GET_SET = LIBAVUTIL_VERSION_MAJOR < 57; 136 137 enum FF_API_PSEUDOPAL = LIBAVUTIL_VERSION_MAJOR < 57; 138 139 enum FF_API_CHILD_CLASS_NEXT = LIBAVUTIL_VERSION_MAJOR < 57; 140 141 enum FF_API_BUFFER_SIZE_T = LIBAVUTIL_VERSION_MAJOR < 57; 142 143 enum FF_API_D2STR = LIBAVUTIL_VERSION_MAJOR < 58; 144 145 enum FF_API_DECLARE_ALIGNED = LIBAVUTIL_VERSION_MAJOR < 58; 146 147 /** 148 * @} 149 * @} 150 */ 151 152 /* AVUTIL_VERSION_H */