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 */