[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36960] trunk/blender: == FFMPEG ==

Peter Schlaile peter at schlaile.de
Sat May 28 01:33:41 CEST 2011


Revision: 36960
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36960
Author:   schlaile
Date:     2011-05-27 23:33:40 +0000 (Fri, 27 May 2011)
Log Message:
-----------
== FFMPEG ==

Added central compatibility header file, which enables blender to compile
against very old ffmpeg versions as well as very new versions using the
*NEW* API. (Old API functions are simulated using macros and inline functions)

Added a whole lot of additional checks, tested against 6 different versions
down the timeline, hopefully, now finally all is well.

Modified Paths:
--------------
    trunk/blender/intern/audaspace/CMakeLists.txt
    trunk/blender/intern/audaspace/SConscript
    trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
    trunk/blender/source/blender/blenkernel/CMakeLists.txt
    trunk/blender/source/blender/blenkernel/SConscript
    trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
    trunk/blender/source/blender/imbuf/CMakeLists.txt
    trunk/blender/source/blender/imbuf/SConscript
    trunk/blender/source/blender/imbuf/intern/anim_movie.c
    trunk/blender/source/blender/imbuf/intern/util.c
    trunk/blender/source/gameengine/VideoTexture/CMakeLists.txt
    trunk/blender/source/gameengine/VideoTexture/SConscript
    trunk/blender/source/gameengine/VideoTexture/VideoFFmpeg.h

Added Paths:
-----------
    trunk/blender/intern/ffmpeg/
    trunk/blender/intern/ffmpeg/ffmpeg_compat.h

Modified: trunk/blender/intern/audaspace/CMakeLists.txt
===================================================================
--- trunk/blender/intern/audaspace/CMakeLists.txt	2011-05-27 22:21:14 UTC (rev 36959)
+++ trunk/blender/intern/audaspace/CMakeLists.txt	2011-05-27 23:33:40 UTC (rev 36960)
@@ -26,6 +26,7 @@
 	FX SRC
 	${PTHREADS_INC}
 	${LIBSAMPLERATE_INC}
+	../ffmpeg
 )
 
 set(SRC

Modified: trunk/blender/intern/audaspace/SConscript
===================================================================
--- trunk/blender/intern/audaspace/SConscript	2011-05-27 22:21:14 UTC (rev 36959)
+++ trunk/blender/intern/audaspace/SConscript	2011-05-27 23:33:40 UTC (rev 36960)
@@ -8,7 +8,7 @@
 
 if env['WITH_BF_FFMPEG']:
     sources += env.Glob('ffmpeg/*.cpp')
-    incs += ' ffmpeg ' + env['BF_FFMPEG_INC']
+    incs += ' ffmpeg  #/intern/ffmpeg ' + env['BF_FFMPEG_INC']
     defs.append('WITH_FFMPEG')
 
 if env['WITH_BF_SDL']:

Modified: trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
===================================================================
--- trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp	2011-05-27 22:21:14 UTC (rev 36959)
+++ trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp	2011-05-27 23:33:40 UTC (rev 36960)
@@ -39,6 +39,7 @@
 extern "C" {
 #include <libavcodec/avcodec.h>
 #include <libavformat/avformat.h>
+#include "ffmpeg_compat.h"
 }
 
 int AUD_FFMPEGReader::decode(AVPacket* packet, AUD_Buffer& buffer)

Added: trunk/blender/intern/ffmpeg/ffmpeg_compat.h
===================================================================
--- trunk/blender/intern/ffmpeg/ffmpeg_compat.h	                        (rev 0)
+++ trunk/blender/intern/ffmpeg/ffmpeg_compat.h	2011-05-27 23:33:40 UTC (rev 36960)
@@ -0,0 +1,133 @@
+#ifndef __ffmpeg_compat_h_included__
+#define __ffmpeg_compat_h_included__ 1
+
+/*
+ * $Id$
+ *
+ * compatibility macros to make every ffmpeg installation appear
+ * like the most current installation (wrapping some functionality sometimes)
+ * it also includes all ffmpeg header files at once, no need to do it 
+ * seperately.
+ *
+ * Copyright (c) 2011 Peter Schlaile
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ */
+
+
+#include <libavformat/avformat.h>
+#include <libavcodec/avcodec.h>
+#include <libavutil/rational.h>
+
+#if (LIBAVFORMAT_VERSION_MAJOR > 52) || ((LIBAVFORMAT_VERSION_MAJOR >= 52) && (LIBAVFORMAT_VERSION_MINOR >= 101))
+#define FFMPEG_HAVE_PARSE_UTILS 1
+#include <libavutil/parseutils.h>
+#endif
+
+#include <libswscale/swscale.h>
+#include <libavcodec/opt.h>
+
+#if (LIBAVFORMAT_VERSION_MAJOR > 52) || ((LIBAVFORMAT_VERSION_MAJOR >= 52) && (LIBAVFORMAT_VERSION_MINOR >= 105))
+#define FFMPEG_HAVE_AVIO 1
+#endif
+
+#if (LIBAVFORMAT_VERSION_MAJOR > 53) || ((LIBAVFORMAT_VERSION_MAJOR >= 53) && (LIBAVFORMAT_VERSION_MINOR >= 1))
+#define FFMPEG_HAVE_DEFAULT_VAL_UNION 1
+#endif
+
+#if (LIBAVFORMAT_VERSION_MAJOR > 52) || ((LIBAVFORMAT_VERSION_MAJOR >= 52) && (LIBAVFORMAT_VERSION_MINOR >= 101))
+#define FFMPEG_HAVE_AV_DUMP_FORMAT 1
+#endif
+
+#if (LIBAVFORMAT_VERSION_MAJOR > 52) || ((LIBAVFORMAT_VERSION_MAJOR >= 52) && (LIBAVFORMAT_VERSION_MINOR >= 45))
+#define FFMPEG_HAVE_AV_GUESS_FORMAT 1
+#endif
+
+#if (LIBAVCODEC_VERSION_MAJOR > 52) || ((LIBAVCODEC_VERSION_MAJOR >= 52) && (LIBAVCODEC_VERSION_MINOR >= 23))
+#define FFMPEG_HAVE_DECODE_AUDIO3 1
+#define FFMPEG_HAVE_DECODE_VIDEO2 1
+#endif
+
+#if (LIBAVCODEC_VERSION_MAJOR > 52) || ((LIBAVCODEC_VERSION_MAJOR >= 52) && (LIBAVCODEC_VERSION_MINOR >= 64))
+#define FFMPEG_HAVE_AVMEDIA_TYPES 1
+#endif
+
+#if (LIBAVCODEC_VERSION_MAJOR >= 52) && (LIBAVCODEC_VERSION_MINOR >= 29) && \
+	 (LIBSWSCALE_VERSION_MAJOR >= 0) && (LIBSWSCALE_VERSION_MINOR >= 10)
+#define FFMPEG_SWSCALE_COLOR_SPACE_SUPPORT
+#endif
+
+#ifndef FFMPEG_HAVE_AVIO
+#define AVIO_FLAG_WRITE URL_WRONLY
+#define avio_open url_fopen
+#define avio_tell url_ftell
+#define avio_close url_fclose
+#endif
+
+/* there are some version inbetween, which have avio_... functions but no
+   AVIO_FLAG_... */
+#ifndef AVIO_FLAG_WRITE
+#define AVIO_FLAG_WRITE URL_WRONLY
+#endif
+
+#ifndef AV_PKT_FLAG_KEY
+#define AV_PKT_FLAG_KEY PKT_FLAG_KEY
+#endif
+
+#ifndef FFMPEG_HAVE_AV_DUMP_FORMAT
+#define av_dump_format dump_format
+#endif
+
+#ifndef FFMPEG_HAVE_AV_GUESS_FORMAT
+#define av_guess_format guess_format
+#endif
+
+#ifndef FFMPEG_HAVE_PARSE_UTILS
+#define av_parse_video_rate av_parse_video_frame_rate
+#endif
+
+#ifdef FFMPEG_HAVE_DEFAULT_VAL_UNION
+#define FFMPEG_DEF_OPT_VAL_INT(OPT) OPT->default_val.i64
+#define FFMPEG_DEF_OPT_VAL_DOUBLE(OPT) OPT->default_val.dbl
+#else
+#define FFMPEG_DEF_OPT_VAL_INT(OPT) OPT->default_val
+#define FFMPEG_DEF_OPT_VAL_DOUBLE(OPT) OPT->default_val
+#endif
+
+#ifndef FFMPEG_HAVE_AVMEDIA_TYPES
+#define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO
+#define AVMEDIA_TYPE_AUDIO CODEC_TYPE_AUDIO
+#endif
+
+#ifndef FFMPEG_HAVE_DECODE_AUDIO3
+static inline 
+int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples,
+			  int *frame_size_ptr, AVPacket *avpkt)
+{
+	return avcodec_decode_audio2(avctx, samples,
+				     frame_size_ptr, avpkt->data,
+				     avpkt->size);
+}
+#endif
+
+#ifndef FFMPEG_HAVE_DECODE_VIDEO2
+static inline
+int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
+                         int *got_picture_ptr,
+                         AVPacket *avpkt)
+{
+	return avcodec_decode_video(avctx, picture, got_picture_ptr,
+				    avpkt->data, avpkt->size);
+}
+#endif
+
+#endif

Modified: trunk/blender/source/blender/blenkernel/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/blenkernel/CMakeLists.txt	2011-05-27 22:21:14 UTC (rev 36959)
+++ trunk/blender/source/blender/blenkernel/CMakeLists.txt	2011-05-27 23:33:40 UTC (rev 36960)
@@ -44,6 +44,7 @@
 	../editors/include
 	../render/extern/include
 	../../../intern/audaspace/intern
+	../../../intern/ffmpeg
 	../../../intern/bsp/extern ../blenfont
 	../../../intern/decimation/extern
 	../../../intern/elbeem/extern

Modified: trunk/blender/source/blender/blenkernel/SConscript
===================================================================
--- trunk/blender/source/blender/blenkernel/SConscript	2011-05-27 22:21:14 UTC (rev 36959)
+++ trunk/blender/source/blender/blenkernel/SConscript	2011-05-27 23:33:40 UTC (rev 36960)
@@ -14,6 +14,7 @@
 incs += ' #/intern/smoke/extern'
 incs += ' #/intern/mikktspace'
 incs += ' #/intern/audaspace/intern'
+incs += ' #/intern/ffmpeg'
 
 incs += ' ' + env['BF_OPENGL_INC']
 incs += ' ' + env['BF_ZLIB_INC']

Modified: trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c	2011-05-27 22:21:14 UTC (rev 36959)
+++ trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c	2011-05-27 23:33:40 UTC (rev 36960)
@@ -61,35 +61,8 @@
 #include "IMB_imbuf_types.h"
 #include "IMB_imbuf.h"
 
-#if (LIBAVFORMAT_VERSION_MAJOR > 52) || ((LIBAVFORMAT_VERSION_MAJOR >= 52) && (LIBAVFORMAT_VERSION_MINOR >= 105))
-#define FFMPEG_HAVE_AVIO 1
-#endif
+#include "ffmpeg_compat.h"
 
-#if (LIBAVFORMAT_VERSION_MAJOR > 53) || ((LIBAVFORMAT_VERSION_MAJOR >= 53) && (LIBAVFORMAT_VERSION_MINOR >= 1))
-#define FFMPEG_HAVE_DEFAULT_VAL_UNION 1
-#endif
-
-#if (LIBAVFORMAT_VERSION_MAJOR > 52) || ((LIBAVFORMAT_VERSION_MAJOR >= 52) && (LIBAVFORMAT_VERSION_MINOR >= 101))
-#define FFMPEG_HAVE_AV_DUMP_FORMAT 1
-#endif
-
-#ifndef FFMPEG_HAVE_AVIO
-#define AVIO_FLAG_WRITE URL_WRONLY
-#define avio_open url_fopen
-#define avio_tell url_ftell
-#define avio_close url_fclose
-#endif
-
-/* make OpenSuSe special "in-between" ffmpeg 0.6.2 version(tm) happy... 
-   Arrrrgh */
-#ifndef AVIO_FLAG_WRITE
-#define AVIO_FLAG_WRITE URL_WRONLY
-#endif
-
-#ifndef FFMPEG_HAVE_AV_DUMP_FORMAT
-#define av_dump_format dump_format
-#endif
-
 extern void do_init_ffmpeg(void);
 
 static int ffmpeg_type = 0;
@@ -1080,20 +1053,12 @@
 	switch (o->type) {
 	case FF_OPT_TYPE_INT:
 	case FF_OPT_TYPE_INT64:
-#ifdef FFMPEG_HAVE_DEFAULT_VAL_UNION
-		val.i = o->default_val.i64;
-#else
-		val.i = o->default_val;
-#endif
+		val.i = FFMPEG_DEF_OPT_VAL_INT(o);
 		idp_type = IDP_INT;
 		break;
 	case FF_OPT_TYPE_DOUBLE:
 	case FF_OPT_TYPE_FLOAT:
-#ifdef FFMPEG_HAVE_DEFAULT_VAL_UNION
-		val.f = o->default_val.dbl;
-#else
-		val.f = o->default_val;
-#endif
+		val.f = FFMPEG_DEF_OPT_VAL_DOUBLE(o);
 		idp_type = IDP_FLOAT;
 		break;
 	case FF_OPT_TYPE_STRING:

Modified: trunk/blender/source/blender/imbuf/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/imbuf/CMakeLists.txt	2011-05-27 22:21:14 UTC (rev 36959)
+++ trunk/blender/source/blender/imbuf/CMakeLists.txt	2011-05-27 23:33:40 UTC (rev 36960)
@@ -38,6 +38,7 @@
 	../makesdna
 	../../../intern/memutil
 	../../../intern/guardedalloc
+	../../../intern/ffmpeg
 	${JPEG_INCLUDE_DIR}
 	${PNG_INCLUDE_DIR}
 	${ZLIB_INCLUDE_DIRS}

Modified: trunk/blender/source/blender/imbuf/SConscript
===================================================================
--- trunk/blender/source/blender/imbuf/SConscript	2011-05-27 22:21:14 UTC (rev 36959)
+++ trunk/blender/source/blender/imbuf/SConscript	2011-05-27 23:33:40 UTC (rev 36960)
@@ -5,8 +5,8 @@
 
 incs = '. ../makesdna #/intern/guardedalloc #/intern/memutil ../blenlib'
 incs += ' ../avi ../blenkernel ../blenloader'
+incs += ' #/intern/ffmpeg'
 
-
 incs += ' ' + env['BF_JPEG_INC']
 incs += ' ' + env['BF_PNG_INC']
 incs += ' ' + env['BF_TIFF_INC']

Modified: trunk/blender/source/blender/imbuf/intern/anim_movie.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/anim_movie.c	2011-05-27 22:21:14 UTC (rev 36959)
+++ trunk/blender/source/blender/imbuf/intern/anim_movie.c	2011-05-27 23:33:40 UTC (rev 36960)
@@ -97,25 +97,8 @@
 #include <libavutil/rational.h>
 #include <libswscale/swscale.h>
 
-#if LIBAVFORMAT_VERSION_INT < (49 << 16)
-#define FFMPEG_OLD_FRAME_RATE 1
-#else

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list