--- a/m4/decoders.m4 +++ b/m4/decoders.m4 @@ -134,13 +134,36 @@ a52_init (); AC_DEFINE([HAVE_FFMPEG], 1, [Define this if you have the ffmpeg library]) dnl Check presence of ffmpeg/avutil.h to see if it's old or new dnl style for headers. The new style would be preferred actually... + dnl Sigh. at least some 09/2022 ffmpeg version does violate the basic + dnl "get directly what you use directly" rule. especially, + dnl libavformat/avformat.h includes libavcodec/packet.h which uses + dnl (but not includes) libavutil/avutil.h. this means that a mere + dnl AC_CHECK_HEADERS([libavformat/avformat.h]) will fail strangely :-/ ac_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $FFMPEG_CFLAGS" ac_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CFLAGS $FFMPEG_CFLAGS $AVUTIL_CFLAGS" - AC_CHECK_HEADERS([ffmpeg/avutil.h]) - AC_CHECK_HEADERS([libavutil/avutil.h]) - AC_CHECK_HEADERS([libavutil/sha1.h]) - AC_CHECK_HEADERS([libavutil/sha.h]) + AC_CHECK_HEADERS([ffmpeg/avutil.h libavutil/avutil.h libavutil/sha1.h libavutil/mem.h libavutil/sha.h]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include + ]],[[]])], [have_avutil_avcodec_h=yes], [have_avutil_avcodec_h=no]) + test x"$have_avutil_avcodec_h" == x"yes" && AC_DEFINE([HAVE_AVUTIL_AVCODEC_H],[1], + [Define this if you have libavutil/avutil.h and libavcodec/avcodec.h.]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include +#include + ]],[[]])], [have_avformat_avformat_h=yes], [have_avformat_avformat_h=no]) + test x"$have_avformat_avformat_h" == x"yes" && AC_DEFINE([HAVE_AVFORMAT_AVFORMAT_H],[1], + [Define this if you have libavformat/avformat.h.]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include +#include +#include + ]],[[]])], [have_avformat_avio_h=yes], [have_avformat_avio_h=no]) + test x"$have_avformat_avio_h" == x"yes" && AC_DEFINE([HAVE_AVFORMAT_AVIO_H],[1], + [Define this if you have libavformat/avformat.h.]) if test "$ac_cv_header_ffmpeg_avutil_h" = "yes" && test "$ac_cv_header_libavutil_avutil_h" = "yes"; then AC_MSG_ERROR([old & new ffmpeg headers found - you need to clean up!]) fi --- a/m4/input.m4 +++ b/m4/input.m4 @@ -229,6 +229,7 @@ AC_DEFUN([XINE_INPUT_PLUGINS], [ fi if test x"$have_avformat" = x"yes"; then AC_DEFINE([HAVE_AVFORMAT], 1, [Define this if you have libavformat installed]) + AC_CHECK_HEADERS([libavformat/avformat.h]) fi fi AM_CONDITIONAL([ENABLE_AVFORMAT], [test x"$have_avformat" = x"yes"]) --- a/src/combined/ffmpeg/demux_avformat.c +++ b/src/combined/ffmpeg/demux_avformat.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2021 the xine project + * Copyright (C) 2013-2022 the xine project * Copyright (C) 2013-2020 Petri Hintukainen * * This file is part of xine, a free video player. @@ -29,6 +29,8 @@ #include #include +#include +#include #include #include @@ -922,3 +924,4 @@ void *init_avformat_demux_plugin (xine_t (void)data; return (demux_class_t *)&this; } + --- a/src/combined/ffmpeg/ff_audio_decoder.c +++ b/src/combined/ffmpeg/ff_audio_decoder.c @@ -31,13 +31,20 @@ #include #include -#ifdef HAVE_FFMPEG_AVUTIL_H -# include -#else -# include +#if defined(HAVE_LIBAVUTIL_AVUTIL_H) +# include +#endif + +#if defined(HAVE_LIBAVUTIL_MEM_H) # include #endif +#if defined(HAVE_AVUTIL_AVCODEC_H) +# include +#else +# include +#endif + #define LOG_MODULE "ffmpeg_audio_dec" #define LOG_VERBOSE /* --- a/src/combined/ffmpeg/ffmpeg_compat.h +++ b/src/combined/ffmpeg/ffmpeg_compat.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2000-2021 the xine project + * Copyright (C) 2000-2022 the xine project * * This file is part of xine, a unix video player. * @@ -25,22 +25,24 @@ #define XFF_INT_VERSION(major,minor,micro) ((major<<16)|(minor<<8)|micro) -#ifndef LIBAVCODEC_VERSION_INT -# if defined(LIBAVCODEC_VERSION_MAJOR) && defined(LIBAVCODEC_VERSION_MINOR) -# define LIBAVCODEC_VERSION_INT XFF_INT_VERSION(LIBAVCODEC_VERSION_MAJOR,LIBAVCODEC_VERSION_MINOR,0) -# else -# error ffmpeg headers must be included first ! -# endif +/** NOTE: since 2022-09-01, ffmpeg headers are more detached from each other. + * this goes that far: + * libavformat/avformat.h includes libavcodec/packet.h which uses + * (but not includes) libavutil/avutil.h :-/ */ + +#if !defined(LIBAVUTIL_VERSION_INT) && defined(LIBAVUTIL_VERSION_MAJOR) && defined(LIBAVUTIL_VERSION_MINOR) +# define LIBAVUTIL_VERSION_INT XFF_INT_VERSION(LIBAVUTIL_VERSION_MAJOR,LIBAVUTIL_VERSION_MINOR,0) +#endif +#if !defined(LIBAVUTIL_VERSION_INT) +# error avutil.h must be included first ! #endif -#ifndef LIBAVUTIL_VERSION_INT -# if defined(LIBAVUTIL_VERSION_MAJOR) && defined(LIBAVUTIL_VERSION_MINOR) -# define LIBAVUTIL_VERSION_INT XFF_INT_VERSION(LIBAVUTIL_VERSION_MAJOR,LIBAVUTIL_VERSION_MINOR,0) -# else -# error ffmpeg headers must be included first ! -# endif +#if !defined(LIBAVCODEC_VERSION_INT) && defined(LIBAVCODEC_VERSION_MAJOR) && defined(LIBAVCODEC_VERSION_MINOR) +# define LIBAVCODEC_VERSION_INT XFF_INT_VERSION(LIBAVCODEC_VERSION_MAJOR,LIBAVCODEC_VERSION_MINOR,0) #endif +#if defined(LIBAVCODEC_VERSION_INT) + #if LIBAVCODEC_VERSION_INT >= XFF_INT_VERSION(52,0,0) # define bits_per_sample bits_per_coded_sample #endif @@ -136,38 +138,6 @@ # define XFF_VAAPI 2 /** << libavutil/hwcontext.h, libavutil/hwcontext_vaapi.h */ #endif -#if LIBAVUTIL_VERSION_INT >= XFF_INT_VERSION(52,0,0) -# define PIX_FMT_NONE AV_PIX_FMT_NONE -# define PIX_FMT_YUV420P AV_PIX_FMT_YUV420P -# define PIX_FMT_YUVJ420P AV_PIX_FMT_YUVJ420P -# define PIX_FMT_YUV444P AV_PIX_FMT_YUV444P -# define PIX_FMT_YUVJ444P AV_PIX_FMT_YUVJ444P -# define PIX_FMT_YUV410P AV_PIX_FMT_YUV410P -# define PIX_FMT_YUV411P AV_PIX_FMT_YUV411P -# define PIX_FMT_ARGB AV_PIX_FMT_ARGB -# define PIX_FMT_BGRA AV_PIX_FMT_BGRA -# define PIX_FMT_RGB24 AV_PIX_FMT_RGB24 -# define PIX_FMT_BGR24 AV_PIX_FMT_BGR24 -# define PIX_FMT_RGB555BE AV_PIX_FMT_RGB555BE -# define PIX_FMT_RGB555LE AV_PIX_FMT_RGB555LE -# define PIX_FMT_RGB565BE AV_PIX_FMT_RGB565BE -# define PIX_FMT_RGB565LE AV_PIX_FMT_RGB565LE -# define PIX_FMT_PAL8 AV_PIX_FMT_PAL8 -# define PixelFormat AVPixelFormat -/* video_out/video_out_vaapi */ -# if LIBAVCODEC_VERSION_INT < XFF_INT_VERSION(59,0,100) /** << revise this */ -# define PIX_FMT_VAAPI_VLD AV_PIX_FMT_VAAPI_VLD -# define PIX_FMT_VAAPI_IDCT AV_PIX_FMT_VAAPI_IDCT -# define PIX_FMT_VAAPI_MOCO AV_PIX_FMT_VAAPI_MOCO -# else -# define PIX_FMT_VAAPI_VLD AV_PIX_FMT_VAAPI -# define PIX_FMT_VAAPI_IDCT AV_PIX_FMT_VAAPI -# define PIX_FMT_VAAPI_MOCO AV_PIX_FMT_VAAPI -# endif - -# define CODEC_FLAG_BITEXACT AV_CODEC_FLAG_BITEXACT -#endif - #if LIBAVCODEC_VERSION_INT >= XFF_INT_VERSION(54,25,0) /* dxr3/ffmpeg_encoder */ # define CODEC_ID_MPEG1VIDEO AV_CODEC_ID_MPEG1VIDEO @@ -194,10 +164,6 @@ /* ff_*_decoder mapping is already handled by mkcodeclists.pl */ #endif -#ifndef AVCODEC_MAX_AUDIO_FRAME_SIZE -# define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 -#endif - #if LIBAVCODEC_VERSION_INT >= XFF_INT_VERSION(55,0,100) # define XFF_AV_BUFFER 1 #endif @@ -290,5 +256,51 @@ # define XFF_AVCODEC_REGISTER_ALL() do {} while(0) #endif +#if LIBAVCODEC_VERSION_INT < XFF_INT_VERSION(59,24,100) +# define XFF_AUDIO_CHANNEL_LAYOUT 1 /* AVCodecContext.channels, .channel_leyout */ +#else +# define XFF_AUDIO_CHANNEL_LAYOUT 2 /* AVCodecContext.ch_layout.nb_channels, .ch_layout.u.mask */ +#endif + +#ifndef AVCODEC_MAX_AUDIO_FRAME_SIZE +# define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 +#endif + +#if LIBAVUTIL_VERSION_INT >= XFF_INT_VERSION(52,0,0) +# define PIX_FMT_NONE AV_PIX_FMT_NONE +# define PIX_FMT_YUV420P AV_PIX_FMT_YUV420P +# define PIX_FMT_YUVJ420P AV_PIX_FMT_YUVJ420P +# define PIX_FMT_YUV444P AV_PIX_FMT_YUV444P +# define PIX_FMT_YUVJ444P AV_PIX_FMT_YUVJ444P +# define PIX_FMT_YUV410P AV_PIX_FMT_YUV410P +# define PIX_FMT_YUV411P AV_PIX_FMT_YUV411P +# define PIX_FMT_ARGB AV_PIX_FMT_ARGB +# define PIX_FMT_BGRA AV_PIX_FMT_BGRA +# define PIX_FMT_RGB24 AV_PIX_FMT_RGB24 +# define PIX_FMT_BGR24 AV_PIX_FMT_BGR24 +# define PIX_FMT_RGB555BE AV_PIX_FMT_RGB555BE +# define PIX_FMT_RGB555LE AV_PIX_FMT_RGB555LE +# define PIX_FMT_RGB565BE AV_PIX_FMT_RGB565BE +# define PIX_FMT_RGB565LE AV_PIX_FMT_RGB565LE +# define PIX_FMT_PAL8 AV_PIX_FMT_PAL8 +# define PixelFormat AVPixelFormat +/* video_out/video_out_vaapi */ +# if LIBAVCODEC_VERSION_INT < XFF_INT_VERSION(59,0,100) /** << revise this */ +# define PIX_FMT_VAAPI_VLD AV_PIX_FMT_VAAPI_VLD +# define PIX_FMT_VAAPI_IDCT AV_PIX_FMT_VAAPI_IDCT +# define PIX_FMT_VAAPI_MOCO AV_PIX_FMT_VAAPI_MOCO +# else +# define PIX_FMT_VAAPI_VLD AV_PIX_FMT_VAAPI +# define PIX_FMT_VAAPI_IDCT AV_PIX_FMT_VAAPI +# define PIX_FMT_VAAPI_MOCO AV_PIX_FMT_VAAPI +# endif + +# define CODEC_FLAG_BITEXACT AV_CODEC_FLAG_BITEXACT +#endif + +#else /* defined(LIBAVCODEC_VERSION_INT) */ +# error avcodec.h must be included first ! +#endif /* defined(LIBAVCODEC_VERSION_INT) */ + #endif /* XINE_AVCODEC_COMPAT_H */ --- a/src/combined/ffmpeg/ffmpeg_decoder.c +++ b/src/combined/ffmpeg/ffmpeg_decoder.c 2022-09-13 23:43:40.255615724 -0300 @@ -26,12 +26,20 @@ #include -#ifdef HAVE_FFMPEG_AVUTIL_H -# include -#else -# include +#if defined(HAVE_LIBAVUTIL_AVUTIL_H) +# include +#endif + +#if defined(HAVE_LIBAVUTIL_MEM_H) # include #endif + +#if defined(HAVE_AVUTIL_AVCODEC_H) +# include +#else +# include +#endif + #ifdef HAVE_AVFORMAT # include // av_register_all() #endif --- a/src/combined/ffmpeg/ff_video_decoder.c +++ b/src/combined/ffmpeg/ff_video_decoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2021 the xine project + * Copyright (C) 2001-2022 the xine project * * This file is part of xine, a free video player. * @@ -32,13 +32,20 @@ #include #include -#ifdef HAVE_FFMPEG_AVUTIL_H -# include -#else -# include +#if defined(HAVE_LIBAVUTIL_AVUTIL_H) +# include +#endif + +#if defined(HAVE_LIBAVUTIL_MEM_H) # include #endif +#if defined(HAVE_AVUTIL_AVCODEC_H) +# include +#else +# include +#endif + #define LOG_MODULE "ffmpeg_video_dec" #define LOG_VERBOSE /* --- a/src/combined/ffmpeg/input_avio.c +++ b/src/combined/ffmpeg/input_avio.c 2022-09-13 23:43:40.255615724 -0300 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2020 the xine project + * Copyright (C) 2013-2022 the xine project * Copyright (C) 2013-2020 Petri Hintukainen * * This file is part of xine, a free video player. @@ -28,6 +28,8 @@ #include #include +#include +#include #include #define LOG_MODULE "libavio"