summaryrefslogblamecommitdiffstats
path: root/source/xap/xine-lib/020-xine-lib-ffmpeg-5.1-fix.patch
blob: baa21b2f07fb6a4ca4279c093995c0e860ba8108 (plain) (tree)









































































































































































































































































































































                                                                                                                     
--- 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 <libavutil/avutil.h>
+#include <libavcodec/avcodec.h>
+            ]],[[]])], [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 <libavutil/avutil.h>
+#include <libavcodec/avcodec.h>
+#include <libavformat/avformat.h>
+            ]],[[]])], [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 <libavutil/avutil.h>
+#include <libavcodec/avcodec.h>
+#include <libavformat/avformat.h>
+#include <libavformat/avio.h>
+            ]],[[]])], [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 <phintuka@users.sourceforge.net>
  *
  * This file is part of xine, a free video player.
@@ -29,6 +29,8 @@
 #include <pthread.h>
 #include <errno.h>
 
+#include <libavutil/avutil.h>
+#include <libavcodec/avcodec.h>
 #include <libavformat/avformat.h>
 #include <libavformat/avio.h>
 
@@ -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 <pthread.h>
 #include <math.h>
 
-#ifdef HAVE_FFMPEG_AVUTIL_H
-#  include <avcodec.h>
-#else
-#  include <libavcodec/avcodec.h>
+#if defined(HAVE_LIBAVUTIL_AVUTIL_H)
+#  include <libavutil/avutil.h>
+#endif
+
+#if defined(HAVE_LIBAVUTIL_MEM_H)
 #  include <libavutil/mem.h>
 #endif
 
+#if defined(HAVE_AVUTIL_AVCODEC_H)
+#  include <libavcodec/avcodec.h>
+#else
+#  include <avcodec.h>
+#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 <pthread.h>
 
-#ifdef HAVE_FFMPEG_AVUTIL_H
-#  include <avcodec.h>
-#else
-#  include <libavcodec/avcodec.h>
+#if defined(HAVE_LIBAVUTIL_AVUTIL_H)
+#  include <libavutil/avutil.h>
+#endif
+
+#if defined(HAVE_LIBAVUTIL_MEM_H)
 #  include <libavutil/mem.h>
 #endif
+
+#if defined(HAVE_AVUTIL_AVCODEC_H)
+#  include <libavcodec/avcodec.h>
+#else
+#  include <avcodec.h>
+#endif
+
 #ifdef HAVE_AVFORMAT
 #  include <libavformat/avformat.h> // 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 <math.h>
 #include <assert.h>
 
-#ifdef HAVE_FFMPEG_AVUTIL_H
-#  include <avcodec.h>
-#else
-#  include <libavcodec/avcodec.h>
+#if defined(HAVE_LIBAVUTIL_AVUTIL_H)
+#  include <libavutil/avutil.h>
+#endif
+
+#if defined(HAVE_LIBAVUTIL_MEM_H)
 #  include <libavutil/mem.h>
 #endif
 
+#if defined(HAVE_AVUTIL_AVCODEC_H)
+#  include <libavcodec/avcodec.h>
+#else
+#  include <avcodec.h>
+#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 <phintuka@users.sourceforge.net>
  *
  * This file is part of xine, a free video player.
@@ -28,6 +28,8 @@
 #include <string.h>
 #include <pthread.h>
 
+#include <libavutil/avutil.h>
+#include <libavcodec/avcodec.h>
 #include <libavformat/avio.h>
 
 #define LOG_MODULE "libavio"