From 570bcc3822dc5ee07d0fb0260b36ad32240720ce Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 14 Mar 2016 01:33:27 -0700 Subject: [PATCH] GUAC-236: Add generalized ffmpeg-compat.h header to cover various API changes. --- src/guacenc/Makefile.am | 25 ++++++++--------- src/guacenc/ffmpeg-compat.h | 53 +++++++++++++++++++++++++++++++++++++ src/guacenc/video.c | 7 +---- 3 files changed, 67 insertions(+), 18 deletions(-) create mode 100644 src/guacenc/ffmpeg-compat.h diff --git a/src/guacenc/Makefile.am b/src/guacenc/Makefile.am index 72199116..12309920 100644 --- a/src/guacenc/Makefile.am +++ b/src/guacenc/Makefile.am @@ -27,18 +27,19 @@ bin_PROGRAMS = guacenc man_MANS = \ man/guacenc.1 -noinst_HEADERS = \ - buffer.h \ - display.h \ - encode.h \ - guacenc.h \ - image-stream.h \ - instructions.h \ - jpeg.h \ - layer.h \ - log.h \ - parse.h \ - png.h \ +noinst_HEADERS = \ + buffer.h \ + display.h \ + encode.h \ + ffmpeg-compat.h \ + guacenc.h \ + image-stream.h \ + instructions.h \ + jpeg.h \ + layer.h \ + log.h \ + parse.h \ + png.h \ video.h guacenc_SOURCES = \ diff --git a/src/guacenc/ffmpeg-compat.h b/src/guacenc/ffmpeg-compat.h new file mode 100644 index 00000000..ba3213a5 --- /dev/null +++ b/src/guacenc/ffmpeg-compat.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2016 Glyptodon, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef GUACENC_FFMPEG_COMPAT_H +#define GUACENC_FFMPEG_COMPAT_H + +#include "config.h" + +#include + +/* + * For a full list of FFmpeg API changes over the years, see: + * + * https://github.com/FFmpeg/FFmpeg/blob/master/doc/APIchanges + */ + +/* For libavcodec < 55.28.1: av_frame_*() was avcodec_*_frame(). */ +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,1) +#define av_frame_alloc avcodec_alloc_frame +#define av_frame_free avcodec_free_frame +#endif + +/* For libavcodec < 55.52.0: avcodec_free_context did not exist */ +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,52,0) +#define avcodec_free_context av_freep +#endif + +/* For libavcodec < 57.7.0: av_packet_unref() was av_free_packet() */ +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57,7,0) +#define av_packet_unref av_free_packet +#endif + +#endif + diff --git a/src/guacenc/video.c b/src/guacenc/video.c index a99cd4ee..99d990e8 100644 --- a/src/guacenc/video.c +++ b/src/guacenc/video.c @@ -22,6 +22,7 @@ #include "config.h" #include "buffer.h" +#include "ffmpeg-compat.h" #include "log.h" #include "video.h" @@ -38,12 +39,6 @@ #include #include -/* Define av_frame_alloc() / av_frame_free() if libavcodec is old */ -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,1) -#define av_frame_alloc avcodec_alloc_frame -#define av_frame_free avcodec_free_frame -#endif - guacenc_video* guacenc_video_alloc(const char* path, const char* codec_name, int width, int height, int bitrate) {