diff mbox series

[FFmpeg-devel,05/13] libavcodec: Split version.h

Message ID 20220223142951.40366-6-martin@martin.st
State New
Headers show
Series Reduce unnecessary recompilation | expand

Commit Message

Martin Storsjö Feb. 23, 2022, 2:29 p.m. UTC
This avoids including version.h in all source files, avoiding
unnecessary rebuilds when the version number is bumped. Only
version_major.h is included by the main header, which defines
availability of e.g. FF_API_* macros, and which is bumped much
less often.
---
 fftools/cmdutils.c             |  1 +
 fftools/ffmpeg.c               |  1 +
 fftools/ffprobe.c              |  1 +
 libavcodec/Makefile            |  1 +
 libavcodec/aacenc.c            |  1 +
 libavcodec/avcodec.c           |  1 +
 libavcodec/avcodec.h           |  2 +-
 libavcodec/codec.h             |  2 +-
 libavcodec/dpxenc.c            |  1 +
 libavcodec/j2kenc.c            |  1 +
 libavcodec/libvorbisenc.c      |  1 +
 libavcodec/mjpegenc_common.c   |  1 +
 libavcodec/mpeg4videoenc.c     |  1 +
 libavcodec/options_table.h     |  2 +-
 libavcodec/packet.h            |  2 +-
 libavcodec/pthread_frame.c     |  2 +-
 libavcodec/tiffenc.c           |  1 +
 libavcodec/vaapi_encode_h264.c |  1 +
 libavcodec/version.h           | 28 ++---------------
 libavcodec/version_major.h     | 55 ++++++++++++++++++++++++++++++++++
 libavformat/movenc.c           |  1 +
 21 files changed, 76 insertions(+), 31 deletions(-)
 create mode 100644 libavcodec/version_major.h

Comments

Michael Niedermayer Feb. 25, 2022, 2:34 p.m. UTC | #1
On Wed, Feb 23, 2022 at 04:29:43PM +0200, Martin Storsjö wrote:
> This avoids including version.h in all source files, avoiding
> unnecessary rebuilds when the version number is bumped. Only
> version_major.h is included by the main header, which defines
> availability of e.g. FF_API_* macros, and which is bumped much
> less often.
> ---
>  fftools/cmdutils.c             |  1 +
>  fftools/ffmpeg.c               |  1 +
>  fftools/ffprobe.c              |  1 +
>  libavcodec/Makefile            |  1 +
>  libavcodec/aacenc.c            |  1 +
>  libavcodec/avcodec.c           |  1 +
>  libavcodec/avcodec.h           |  2 +-
>  libavcodec/codec.h             |  2 +-
>  libavcodec/dpxenc.c            |  1 +
>  libavcodec/j2kenc.c            |  1 +
>  libavcodec/libvorbisenc.c      |  1 +
>  libavcodec/mjpegenc_common.c   |  1 +
>  libavcodec/mpeg4videoenc.c     |  1 +
>  libavcodec/options_table.h     |  2 +-
>  libavcodec/packet.h            |  2 +-
>  libavcodec/pthread_frame.c     |  2 +-
>  libavcodec/tiffenc.c           |  1 +
>  libavcodec/vaapi_encode_h264.c |  1 +
>  libavcodec/version.h           | 28 ++---------------
>  libavcodec/version_major.h     | 55 ++++++++++++++++++++++++++++++++++
>  libavformat/movenc.c           |  1 +
>  21 files changed, 76 insertions(+), 31 deletions(-)
>  create mode 100644 libavcodec/version_major.h

not sure i missed some patch but this seems not to build

CC	libavcodec/vc2enc.o
libavcodec/vc2enc.c: In function ‘vc2_encode_frame’:
libavcodec/vc2enc.c:957:48: error: ‘LIBAVCODEC_IDENT’ undeclared (first use in this function); did you mean ‘LIBAVUTIL_IDENT’?
     const char *aux_data = bitexact ? "Lavc" : LIBAVCODEC_IDENT;
                                                ^~~~~~~~~~~~~~~~
                                                LIBAVUTIL_IDENT
libavcodec/vc2enc.c:957:48: note: each undeclared identifier is reported only once for each function it appears in
ffbuild/common.mak:78: recipe for target 'libavcodec/vc2enc.o' failed
make: *** [libavcodec/vc2enc.o] Error 1
make: Target 'all' not remade because of errors.

[...]
Martin Storsjö Feb. 25, 2022, 2:38 p.m. UTC | #2
On Fri, 25 Feb 2022, Michael Niedermayer wrote:

> On Wed, Feb 23, 2022 at 04:29:43PM +0200, Martin Storsjö wrote:
>> This avoids including version.h in all source files, avoiding
>> unnecessary rebuilds when the version number is bumped. Only
>> version_major.h is included by the main header, which defines
>> availability of e.g. FF_API_* macros, and which is bumped much
>> less often.
>> ---
>>  fftools/cmdutils.c             |  1 +
>>  fftools/ffmpeg.c               |  1 +
>>  fftools/ffprobe.c              |  1 +
>>  libavcodec/Makefile            |  1 +
>>  libavcodec/aacenc.c            |  1 +
>>  libavcodec/avcodec.c           |  1 +
>>  libavcodec/avcodec.h           |  2 +-
>>  libavcodec/codec.h             |  2 +-
>>  libavcodec/dpxenc.c            |  1 +
>>  libavcodec/j2kenc.c            |  1 +
>>  libavcodec/libvorbisenc.c      |  1 +
>>  libavcodec/mjpegenc_common.c   |  1 +
>>  libavcodec/mpeg4videoenc.c     |  1 +
>>  libavcodec/options_table.h     |  2 +-
>>  libavcodec/packet.h            |  2 +-
>>  libavcodec/pthread_frame.c     |  2 +-
>>  libavcodec/tiffenc.c           |  1 +
>>  libavcodec/vaapi_encode_h264.c |  1 +
>>  libavcodec/version.h           | 28 ++---------------
>>  libavcodec/version_major.h     | 55 ++++++++++++++++++++++++++++++++++
>>  libavformat/movenc.c           |  1 +
>>  21 files changed, 76 insertions(+), 31 deletions(-)
>>  create mode 100644 libavcodec/version_major.h
>
> not sure i missed some patch but this seems not to build
>
> CC	libavcodec/vc2enc.o
> libavcodec/vc2enc.c: In function ‘vc2_encode_frame’:
> libavcodec/vc2enc.c:957:48: error: ‘LIBAVCODEC_IDENT’ undeclared (first use in this function); did you mean ‘LIBAVUTIL_IDENT’?
>     const char *aux_data = bitexact ? "Lavc" : LIBAVCODEC_IDENT;
>                                                ^~~~~~~~~~~~~~~~
>                                                LIBAVUTIL_IDENT
> libavcodec/vc2enc.c:957:48: note: each undeclared identifier is reported only once for each function it appears in
> ffbuild/common.mak:78: recipe for target 'libavcodec/vc2enc.o' failed
> make: *** [libavcodec/vc2enc.o] Error 1
> make: Target 'all' not remade because of errors.

This patch requires adjustments after 
155cd6baa49797d57f5b42276eeed3f5408ef3f7 was pushed (it should apply and 
build fine on a version slightly older than that), readding an include of 
"version.h", I didn't want to spam the list with a full new round of 
patches just because of that, but if you want to, I can send my latest 
local revision of the patchset.


// Martin
Andreas Rheinhardt Feb. 25, 2022, 8:23 p.m. UTC | #3
Martin Storsjö:
> On Fri, 25 Feb 2022, Michael Niedermayer wrote:
> 
>> On Wed, Feb 23, 2022 at 04:29:43PM +0200, Martin Storsjö wrote:
>>> This avoids including version.h in all source files, avoiding
>>> unnecessary rebuilds when the version number is bumped. Only
>>> version_major.h is included by the main header, which defines
>>> availability of e.g. FF_API_* macros, and which is bumped much
>>> less often.
>>> ---
>>>  fftools/cmdutils.c             |  1 +
>>>  fftools/ffmpeg.c               |  1 +
>>>  fftools/ffprobe.c              |  1 +
>>>  libavcodec/Makefile            |  1 +
>>>  libavcodec/aacenc.c            |  1 +
>>>  libavcodec/avcodec.c           |  1 +
>>>  libavcodec/avcodec.h           |  2 +-
>>>  libavcodec/codec.h             |  2 +-
>>>  libavcodec/dpxenc.c            |  1 +
>>>  libavcodec/j2kenc.c            |  1 +
>>>  libavcodec/libvorbisenc.c      |  1 +
>>>  libavcodec/mjpegenc_common.c   |  1 +
>>>  libavcodec/mpeg4videoenc.c     |  1 +
>>>  libavcodec/options_table.h     |  2 +-
>>>  libavcodec/packet.h            |  2 +-
>>>  libavcodec/pthread_frame.c     |  2 +-
>>>  libavcodec/tiffenc.c           |  1 +
>>>  libavcodec/vaapi_encode_h264.c |  1 +
>>>  libavcodec/version.h           | 28 ++---------------
>>>  libavcodec/version_major.h     | 55 ++++++++++++++++++++++++++++++++++
>>>  libavformat/movenc.c           |  1 +
>>>  21 files changed, 76 insertions(+), 31 deletions(-)
>>>  create mode 100644 libavcodec/version_major.h
>>
>> not sure i missed some patch but this seems not to build
>>
>> CC    libavcodec/vc2enc.o
>> libavcodec/vc2enc.c: In function ‘vc2_encode_frame’:
>> libavcodec/vc2enc.c:957:48: error: ‘LIBAVCODEC_IDENT’ undeclared
>> (first use in this function); did you mean ‘LIBAVUTIL_IDENT’?
>>     const char *aux_data = bitexact ? "Lavc" : LIBAVCODEC_IDENT;
>>                                                ^~~~~~~~~~~~~~~~
>>                                                LIBAVUTIL_IDENT
>> libavcodec/vc2enc.c:957:48: note: each undeclared identifier is
>> reported only once for each function it appears in
>> ffbuild/common.mak:78: recipe for target 'libavcodec/vc2enc.o' failed
>> make: *** [libavcodec/vc2enc.o] Error 1
>> make: Target 'all' not remade because of errors.
> 
> This patch requires adjustments after
> 155cd6baa49797d57f5b42276eeed3f5408ef3f7 was pushed (it should apply and
> build fine on a version slightly older than that), readding an include
> of "version.h", I didn't want to spam the list with a full new round of
> patches just because of that, but if you want to, I can send my latest
> local revision of the patchset.
> 

Sorry for this. My aim was actually to not just remove headers if it
compiles fine without them, but to only include headers that provide
nothing that is used. But apparently I messed it up with
155cd6baa49797d57f5b42276eeed3f5408ef3f7.

- Andreas
Martin Storsjö Feb. 25, 2022, 8:44 p.m. UTC | #4
On Fri, 25 Feb 2022, Andreas Rheinhardt wrote:

> Martin Storsjö:
>> On Fri, 25 Feb 2022, Michael Niedermayer wrote:
>> 
>>> On Wed, Feb 23, 2022 at 04:29:43PM +0200, Martin Storsjö wrote:
>>>> This avoids including version.h in all source files, avoiding
>>>> unnecessary rebuilds when the version number is bumped. Only
>>>> version_major.h is included by the main header, which defines
>>>> availability of e.g. FF_API_* macros, and which is bumped much
>>>> less often.
>>>> ---
>>>>  fftools/cmdutils.c             |  1 +
>>>>  fftools/ffmpeg.c               |  1 +
>>>>  fftools/ffprobe.c              |  1 +
>>>>  libavcodec/Makefile            |  1 +
>>>>  libavcodec/aacenc.c            |  1 +
>>>>  libavcodec/avcodec.c           |  1 +
>>>>  libavcodec/avcodec.h           |  2 +-
>>>>  libavcodec/codec.h             |  2 +-
>>>>  libavcodec/dpxenc.c            |  1 +
>>>>  libavcodec/j2kenc.c            |  1 +
>>>>  libavcodec/libvorbisenc.c      |  1 +
>>>>  libavcodec/mjpegenc_common.c   |  1 +
>>>>  libavcodec/mpeg4videoenc.c     |  1 +
>>>>  libavcodec/options_table.h     |  2 +-
>>>>  libavcodec/packet.h            |  2 +-
>>>>  libavcodec/pthread_frame.c     |  2 +-
>>>>  libavcodec/tiffenc.c           |  1 +
>>>>  libavcodec/vaapi_encode_h264.c |  1 +
>>>>  libavcodec/version.h           | 28 ++---------------
>>>>  libavcodec/version_major.h     | 55 ++++++++++++++++++++++++++++++++++
>>>>  libavformat/movenc.c           |  1 +
>>>>  21 files changed, 76 insertions(+), 31 deletions(-)
>>>>  create mode 100644 libavcodec/version_major.h
>>>
>>> not sure i missed some patch but this seems not to build
>>>
>>> CC    libavcodec/vc2enc.o
>>> libavcodec/vc2enc.c: In function ‘vc2_encode_frame’:
>>> libavcodec/vc2enc.c:957:48: error: ‘LIBAVCODEC_IDENT’ undeclared
>>> (first use in this function); did you mean ‘LIBAVUTIL_IDENT’?
>>>     const char *aux_data = bitexact ? "Lavc" : LIBAVCODEC_IDENT;
>>>                                                ^~~~~~~~~~~~~~~~
>>>                                                LIBAVUTIL_IDENT
>>> libavcodec/vc2enc.c:957:48: note: each undeclared identifier is
>>> reported only once for each function it appears in
>>> ffbuild/common.mak:78: recipe for target 'libavcodec/vc2enc.o' failed
>>> make: *** [libavcodec/vc2enc.o] Error 1
>>> make: Target 'all' not remade because of errors.
>> 
>> This patch requires adjustments after
>> 155cd6baa49797d57f5b42276eeed3f5408ef3f7 was pushed (it should apply and
>> build fine on a version slightly older than that), readding an include
>> of "version.h", I didn't want to spam the list with a full new round of
>> patches just because of that, but if you want to, I can send my latest
>> local revision of the patchset.
>> 
>
> Sorry for this. My aim was actually to not just remove headers if it
> compiles fine without them, but to only include headers that provide
> nothing that is used. But apparently I messed it up with
> 155cd6baa49797d57f5b42276eeed3f5408ef3f7.

No worries, I guess I should have spotted it myself while reviewing that 
patch...

// Martin
diff mbox series

Patch

diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
index 4b50e15eef..869b5ec012 100644
--- a/fftools/cmdutils.c
+++ b/fftools/cmdutils.c
@@ -55,6 +55,7 @@ 
 #include "libavutil/ffversion.h"
 #include "libavutil/version.h"
 #include "libavcodec/bsf.h"
+#include "libavcodec/version.h"
 #include "cmdutils.h"
 #if HAVE_SYS_RESOURCE_H
 #include <sys/time.h>
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 7beea11933..6f48168477 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -64,6 +64,7 @@ 
 #include "libavutil/thread.h"
 #include "libavutil/threadmessage.h"
 #include "libavcodec/mathops.h"
+#include "libavcodec/version.h"
 #include "libavformat/os_support.h"
 
 # include "libavfilter/avfilter.h"
diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index 38b7e7e00f..69dedead0c 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -30,6 +30,7 @@ 
 
 #include "libavformat/avformat.h"
 #include "libavcodec/avcodec.h"
+#include "libavcodec/version.h"
 #include "libavutil/avassert.h"
 #include "libavutil/avstring.h"
 #include "libavutil/bprint.h"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 6076b4ad80..dc413c8ac6 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -22,6 +22,7 @@  HEADERS = ac3_parser.h                                                  \
           qsv.h                                                         \
           vdpau.h                                                       \
           version.h                                                     \
+          version_major.h                                               \
           videotoolbox.h                                                \
           vorbis_parser.h                                               \
           xvmc.h                                                        \
diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c
index a1004c3e98..38f2d15f78 100644
--- a/libavcodec/aacenc.c
+++ b/libavcodec/aacenc.c
@@ -41,6 +41,7 @@ 
 #include "mpeg4audio.h"
 #include "sinewin.h"
 #include "profiles.h"
+#include "version.h"
 
 #include "aac.h"
 #include "aactab.h"
diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
index 92639dda6b..838c009a19 100644
--- a/libavcodec/avcodec.c
+++ b/libavcodec/avcodec.c
@@ -39,6 +39,7 @@ 
 #include "frame_thread_encoder.h"
 #include "internal.h"
 #include "thread.h"
+#include "version.h"
 
 #include "libavutil/ffversion.h"
 const char av_codec_ffversion[] = "FFmpeg version " FFMPEG_VERSION;
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 79af8dcc05..6e2be910dc 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -43,7 +43,7 @@ 
 #include "codec_id.h"
 #include "defs.h"
 #include "packet.h"
-#include "version.h"
+#include "version_major.h"
 
 /**
  * @defgroup libavc libavcodec
diff --git a/libavcodec/codec.h b/libavcodec/codec.h
index a8147ec21f..42dd95d225 100644
--- a/libavcodec/codec.h
+++ b/libavcodec/codec.h
@@ -31,7 +31,7 @@ 
 #include "libavutil/samplefmt.h"
 
 #include "libavcodec/codec_id.h"
-#include "libavcodec/version.h"
+#include "libavcodec/version_major.h"
 
 /**
  * @addtogroup lavc_core
diff --git a/libavcodec/dpxenc.c b/libavcodec/dpxenc.c
index 0db6aa832d..c4f9ae09bb 100644
--- a/libavcodec/dpxenc.c
+++ b/libavcodec/dpxenc.c
@@ -25,6 +25,7 @@ 
 #include "avcodec.h"
 #include "encode.h"
 #include "internal.h"
+#include "version.h"
 
 typedef struct DPXContext {
     int big_endian;
diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
index c06752f43a..95573c6799 100644
--- a/libavcodec/j2kenc.c
+++ b/libavcodec/j2kenc.c
@@ -70,6 +70,7 @@ 
 #include "internal.h"
 #include "bytestream.h"
 #include "jpeg2000.h"
+#include "version.h"
 #include "libavutil/common.h"
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
diff --git a/libavcodec/libvorbisenc.c b/libavcodec/libvorbisenc.c
index b657f0157a..36f3d78654 100644
--- a/libavcodec/libvorbisenc.c
+++ b/libavcodec/libvorbisenc.c
@@ -28,6 +28,7 @@ 
 #include "audio_frame_queue.h"
 #include "encode.h"
 #include "internal.h"
+#include "version.h"
 #include "vorbis.h"
 #include "vorbis_parser.h"
 
diff --git a/libavcodec/mjpegenc_common.c b/libavcodec/mjpegenc_common.c
index 995e2b7670..7b82644763 100644
--- a/libavcodec/mjpegenc_common.c
+++ b/libavcodec/mjpegenc_common.c
@@ -33,6 +33,7 @@ 
 #include "mjpegenc.h"
 #include "mjpegenc_common.h"
 #include "mjpeg.h"
+#include "version.h"
 
 /* table_class: 0 = DC coef, 1 = AC coefs */
 static int put_huffman_table(PutBitContext *p, int table_class, int table_id,
diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c
index 094c4e5fb3..4a4adeb1c3 100644
--- a/libavcodec/mpeg4videoenc.c
+++ b/libavcodec/mpeg4videoenc.c
@@ -33,6 +33,7 @@ 
 #include "mpeg4videoenc.h"
 #include "mpegvideoenc.h"
 #include "profiles.h"
+#include "version.h"
 
 /* The uni_DCtab_* tables below contain unified bits+length tables to encode DC
  * differences in MPEG-4. Unified in the sense that the specification specifies
diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h
index 130341a2ec..7eb974672e 100644
--- a/libavcodec/options_table.h
+++ b/libavcodec/options_table.h
@@ -28,7 +28,7 @@ 
 
 #include "libavutil/opt.h"
 #include "avcodec.h"
-#include "version.h"
+#include "version_major.h"
 
 #define OFFSET(x) offsetof(AVCodecContext,x)
 #define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
diff --git a/libavcodec/packet.h b/libavcodec/packet.h
index 4a349fe051..40a26db3a7 100644
--- a/libavcodec/packet.h
+++ b/libavcodec/packet.h
@@ -29,7 +29,7 @@ 
 #include "libavutil/dict.h"
 #include "libavutil/rational.h"
 
-#include "libavcodec/version.h"
+#include "libavcodec/version_major.h"
 
 /**
  * @defgroup lavc_packet AVPacket
diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c
index 33b5a2e628..6c6a1342e0 100644
--- a/libavcodec/pthread_frame.c
+++ b/libavcodec/pthread_frame.c
@@ -33,7 +33,7 @@ 
 #include "pthread_internal.h"
 #include "thread.h"
 #include "threadframe.h"
-#include "version.h"
+#include "version_major.h"
 
 #include "libavutil/avassert.h"
 #include "libavutil/buffer.h"
diff --git a/libavcodec/tiffenc.c b/libavcodec/tiffenc.c
index a6c523364a..d350a5b826 100644
--- a/libavcodec/tiffenc.c
+++ b/libavcodec/tiffenc.c
@@ -42,6 +42,7 @@ 
 #include "put_bits.h"
 #include "rle.h"
 #include "tiff.h"
+#include "version.h"
 
 #define TIFF_MAX_ENTRY 32
 
diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
index ff37de1f7e..1ca885fdbc 100644
--- a/libavcodec/vaapi_encode_h264.c
+++ b/libavcodec/vaapi_encode_h264.c
@@ -34,6 +34,7 @@ 
 #include "h264_sei.h"
 #include "internal.h"
 #include "vaapi_encode.h"
+#include "version.h"
 
 enum {
     SEI_TIMING         = 0x01,
diff --git a/libavcodec/version.h b/libavcodec/version.h
index d900503954..da6f3a84ac 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -27,7 +27,8 @@ 
 
 #include "libavutil/version.h"
 
-#define LIBAVCODEC_VERSION_MAJOR  59
+#include "version_major.h"
+
 #define LIBAVCODEC_VERSION_MINOR  21
 #define LIBAVCODEC_VERSION_MICRO 100
 
@@ -41,29 +42,4 @@ 
 
 #define LIBAVCODEC_IDENT        "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
 
-/**
- * FF_API_* defines may be placed below to indicate public API that will be
- * dropped at a future version bump. The defines themselves are not part of
- * the public API and may change, break or disappear at any time.
- *
- * @note, when bumping the major version it is recommended to manually
- * disable each FF_API_* in its own commit instead of disabling them all
- * at once through the bump. This improves the git bisect-ability of the change.
- */
-
-#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_OPENH264_CABAC      (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_UNUSED_CODEC_CAPS   (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_THREAD_SAFE_CALLBACKS (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_DEBUG_MV          (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_GET_FRAME_CLASS     (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_AUTO_THREADS        (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_INIT_PACKET         (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_AVCTX_TIMEBASE    (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_MPEGVIDEO_OPTS      (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_FLAG_TRUNCATED      (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_SUB_TEXT_FORMAT     (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_MJPEG_PRED          (LIBAVCODEC_VERSION_MAJOR < 60)
-#define FF_API_IDCT_NONE           (LIBAVCODEC_VERSION_MAJOR < 60)
-
 #endif /* AVCODEC_VERSION_H */
diff --git a/libavcodec/version_major.h b/libavcodec/version_major.h
new file mode 100644
index 0000000000..56a9aff042
--- /dev/null
+++ b/libavcodec/version_major.h
@@ -0,0 +1,55 @@ 
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_VERSION_MAJOR_H
+#define AVCODEC_VERSION_MAJOR_H
+
+/**
+ * @file
+ * @ingroup libavc
+ * Libavcodec version macros.
+ */
+
+#define LIBAVCODEC_VERSION_MAJOR  59
+
+/**
+ * FF_API_* defines may be placed below to indicate public API that will be
+ * dropped at a future version bump. The defines themselves are not part of
+ * the public API and may change, break or disappear at any time.
+ *
+ * @note, when bumping the major version it is recommended to manually
+ * disable each FF_API_* in its own commit instead of disabling them all
+ * at once through the bump. This improves the git bisect-ability of the change.
+ */
+
+#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_OPENH264_CABAC      (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_UNUSED_CODEC_CAPS   (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_THREAD_SAFE_CALLBACKS (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_DEBUG_MV          (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_GET_FRAME_CLASS     (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_AUTO_THREADS        (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_INIT_PACKET         (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_AVCTX_TIMEBASE    (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_MPEGVIDEO_OPTS      (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_FLAG_TRUNCATED      (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_SUB_TEXT_FORMAT     (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_MJPEG_PRED          (LIBAVCODEC_VERSION_MAJOR < 60)
+#define FF_API_IDCT_NONE           (LIBAVCODEC_VERSION_MAJOR < 60)
+
+#endif /* AVCODEC_VERSION_MAJOR_H */
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 4c868919ae..8e3f803b38 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -42,6 +42,7 @@ 
 #include "libavcodec/put_bits.h"
 #include "libavcodec/vc1_common.h"
 #include "libavcodec/raw.h"
+#include "libavcodec/version.h"
 #include "internal.h"
 #include "libavutil/avstring.h"
 #include "libavutil/channel_layout.h"