[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42922] trunk/blender: Add FFmpeg libraries versions to system-info.txt

Sergey Sharybin sergey.vfx at gmail.com
Wed Dec 28 13:36:04 CET 2011


Revision: 42922
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42922
Author:   nazgul
Date:     2011-12-28 12:35:58 +0000 (Wed, 28 Dec 2011)
Log Message:
-----------
Add FFmpeg libraries versions to system-info.txt

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/sys_info.py
    trunk/blender/source/blender/python/SConscript
    trunk/blender/source/blender/python/intern/CMakeLists.txt
    trunk/blender/source/blender/python/intern/bpy_app.c

Added Paths:
-----------
    trunk/blender/source/blender/python/intern/bpy_app_ffmpeg.c
    trunk/blender/source/blender/python/intern/bpy_app_ffmpeg.h

Modified: trunk/blender/release/scripts/modules/sys_info.py
===================================================================
--- trunk/blender/release/scripts/modules/sys_info.py	2011-12-28 11:20:45 UTC (rev 42921)
+++ trunk/blender/release/scripts/modules/sys_info.py	2011-12-28 12:35:58 UTC (rev 42922)
@@ -94,6 +94,16 @@
     output.write('autosave: {}\n'.format(bpy.utils.user_resource('AUTOSAVE')))
     output.write('tempdir: {}\n'.format(bpy.app.tempdir))
 
+    output.write('\nFFmpeg:\n')
+    output.write(lilies)
+    ffmpeg = bpy.app.ffmpeg
+    if ffmpeg.supported:
+        for lib in ['avcodec', 'avdevice', 'avformat', 'avutil', 'swscale']:
+            output.write('{}:{}{}\n'.format(lib, " "*(10-len(lib)),
+                         getattr(ffmpeg, lib + '_version_string')))
+    else:
+        output.write('Blender was built without FFmpeg support\n')
+
     if bpy.app.background:
         output.write('\nOpenGL: missing, background mode\n')
     else:

Modified: trunk/blender/source/blender/python/SConscript
===================================================================
--- trunk/blender/source/blender/python/SConscript	2011-12-28 11:20:45 UTC (rev 42921)
+++ trunk/blender/source/blender/python/SConscript	2011-12-28 12:35:58 UTC (rev 42922)
@@ -46,5 +46,8 @@
 if env['WITH_BF_CYCLES']:
     defs.append('WITH_CYCLES')
 
+if env['WITH_BF_FFMPEG']:
+    defs.append('WITH_FFMPEG')
+
 sources = env.Glob('intern/*.c')
 env.BlenderLib( libname = 'bf_python', sources = Split(sources), includes = Split(incs), defines = defs, libtype = ['core'], priority = [361])

Modified: trunk/blender/source/blender/python/intern/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/python/intern/CMakeLists.txt	2011-12-28 11:20:45 UTC (rev 42921)
+++ trunk/blender/source/blender/python/intern/CMakeLists.txt	2011-12-28 12:35:58 UTC (rev 42922)
@@ -42,9 +42,10 @@
 )
 
 set(SRC
-    gpu.c
+	gpu.c
 	bpy.c
 	bpy_app.c
+	bpy_app_ffmpeg.c
 	bpy_app_handlers.c
 	bpy_driver.c
 	bpy_interface.c
@@ -62,9 +63,10 @@
 	bpy_util.c
 	stubs.c
 
-    gpu.h
+	gpu.h
 	bpy.h
 	bpy_app.h
+	bpy_app_ffmpeg.h
 	bpy_app_handlers.h
 	bpy_driver.h
 	bpy_intern_string.h
@@ -101,7 +103,15 @@
 endif()
 
 if(WITH_INTERNATIONAL)
-        add_definitions(-DWITH_INTERNATIONAL)
+	add_definitions(-DWITH_INTERNATIONAL)
 endif()
 
+if(WITH_CODEC_FFMPEG)
+	list(APPEND INC_SYS
+		${FFMPEG_INCLUDE_DIRS}
+	)
+
+	add_definitions(-DWITH_FFMPEG)
+endif()
+
 blender_add_lib(bf_python "${SRC}" "${INC}" "${INC_SYS}")

Modified: trunk/blender/source/blender/python/intern/bpy_app.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_app.c	2011-12-28 11:20:45 UTC (rev 42921)
+++ trunk/blender/source/blender/python/intern/bpy_app.c	2011-12-28 12:35:58 UTC (rev 42922)
@@ -32,6 +32,9 @@
 #include <Python.h>
 
 #include "bpy_app.h"
+
+#include "bpy_app_ffmpeg.h"
+
 #include "bpy_app_handlers.h"
 #include "bpy_driver.h"
 
@@ -79,6 +82,7 @@
 	{(char *)"build_system", (char *)"Build system used"},
 
 	/* submodules */
+	{(char *)"ffmpeg", (char *)"FFmpeg library information backend"},
 	{(char *)"handlers", (char *)"Application handler callbacks"},
 	{NULL}
 };
@@ -147,6 +151,7 @@
 	SetStrItem("Unknown");
 #endif
 
+	SetObjItem(BPY_app_ffmpeg_struct());
 	SetObjItem(BPY_app_handlers_struct());
 
 #undef SetIntItem

Added: trunk/blender/source/blender/python/intern/bpy_app_ffmpeg.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_app_ffmpeg.c	                        (rev 0)
+++ trunk/blender/source/blender/python/intern/bpy_app_ffmpeg.c	2011-12-28 12:35:58 UTC (rev 42922)
@@ -0,0 +1,139 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Sergey Sharybin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/intern/bpy_app_ffmpeg.c
+ *  \ingroup pythonintern
+ */
+
+#include <Python.h>
+#include "BLI_utildefines.h"
+#include "BLI_callbacks.h"
+
+#include "RNA_types.h"
+#include "RNA_access.h"
+#include "bpy_rna.h"
+
+#ifdef WITH_FFMPEG
+#include <libavcodec/avcodec.h>
+#include <libavdevice/avdevice.h>
+#include <libavformat/avformat.h>
+#include <libavutil/avutil.h>
+#include <libswscale/swscale.h>
+#endif
+
+static PyTypeObject BlenderAppFFmpegType;
+
+#define DEF_FFMPEG_LIB_VERSION(lib) \
+	{(char *)(#lib "_version"), (char *)("The " #lib " version  as a tuple of 3 numbers")}, \
+	{(char *)(#lib "_version_string"), (char *)("The " #lib " version formatted as a string")},
+
+static PyStructSequence_Field app_ffmpeg_info_fields[] = {
+	{(char *)"supported", (char *)("Boolean, True when Blender is built with FFmpeg support")},
+
+	DEF_FFMPEG_LIB_VERSION(avcodec)
+	DEF_FFMPEG_LIB_VERSION(avdevice)
+	DEF_FFMPEG_LIB_VERSION(avformat)
+	DEF_FFMPEG_LIB_VERSION(avutil)
+	DEF_FFMPEG_LIB_VERSION(swscale)
+	{NULL}
+};
+
+#undef DEF_FFMPEG_LIB_VERSION
+
+static PyStructSequence_Desc app_ffmpeg_info_desc = {
+	(char *)"bpy.app.ffmpeg",     /* name */
+	(char *)"This module contains information about FFmpeg blender is linked against",    /* doc */
+	app_ffmpeg_info_fields,    /* fields */
+	(sizeof(app_ffmpeg_info_fields) / sizeof(PyStructSequence_Field)) - 1
+};
+
+static PyObject *make_ffmpeg_info(void)
+{
+	PyObject *ffmpeg_info;
+	int pos = 0, curversion;
+
+	ffmpeg_info = PyStructSequence_New(&BlenderAppFFmpegType);
+	if (ffmpeg_info == NULL) {
+		return NULL;
+	}
+
+#define SetIntItem(flag) \
+	PyStructSequence_SET_ITEM(ffmpeg_info, pos++, PyLong_FromLong(flag))
+#define SetStrItem(str) \
+	PyStructSequence_SET_ITEM(ffmpeg_info, pos++, PyUnicode_FromString(str))
+#define SetObjItem(obj) \
+	PyStructSequence_SET_ITEM(ffmpeg_info, pos++, obj)
+
+#ifdef WITH_FFMPEG
+	#define FFMPEG_LIB_VERSION(lib) \
+		curversion = lib ## _version(); \
+		SetObjItem(Py_BuildValue("(iii)", \
+				curversion >> 16, (curversion >> 8) % 256, curversion % 256)); \
+		SetObjItem(PyUnicode_FromFormat("%2d, %2d, %2d", \
+				curversion >> 16, (curversion >> 8) % 256, curversion % 256));
+#else
+	#define FFMPEG_LIB_VERSION(lib) \
+		SetStrItem("Unknown"); \
+		SetStrItem("Unknown");
+#endif
+
+#ifdef WITH_FFMPEG
+	SetObjItem(PyBool_FromLong(1));
+#else
+	SetObjItem(PyBool_FromLong(0));
+#endif
+
+	FFMPEG_LIB_VERSION(avcodec);
+	FFMPEG_LIB_VERSION(avdevice);
+	FFMPEG_LIB_VERSION(avformat);
+	FFMPEG_LIB_VERSION(avutil);
+	FFMPEG_LIB_VERSION(swscale);
+
+#undef FFMPEG_LIB_VERSION
+
+	if (PyErr_Occurred()) {
+		Py_CLEAR(ffmpeg_info);
+		return NULL;
+	}
+
+#undef SetIntItem
+#undef SetStrItem
+#undef SetObjItem
+
+	return ffmpeg_info;
+}
+
+PyObject *BPY_app_ffmpeg_struct(void)
+{
+	PyObject *ret;
+
+	PyStructSequence_InitType(&BlenderAppFFmpegType, &app_ffmpeg_info_desc);
+
+	ret = make_ffmpeg_info();
+
+	/* prevent user from creating new instances */
+	BlenderAppFFmpegType.tp_init = NULL;
+	BlenderAppFFmpegType.tp_new = NULL;
+	BlenderAppFFmpegType.tp_hash = (hashfunc)_Py_HashPointer; /* without this we can't do set(sys.modules) [#29635] */
+
+	return ret;
+}

Added: trunk/blender/source/blender/python/intern/bpy_app_ffmpeg.h
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_app_ffmpeg.h	                        (rev 0)
+++ trunk/blender/source/blender/python/intern/bpy_app_ffmpeg.h	2011-12-28 12:35:58 UTC (rev 42922)
@@ -0,0 +1,32 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Sergey Sharybin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/intern/bpy_app_ffmpeg.h
+ *  \ingroup pythonintern
+ */
+
+#ifndef BPY_APP_FFMPEG_H
+#define BPY_APP_FFMPEG_H
+
+PyObject *BPY_app_ffmpeg_struct(void);
+
+#endif // BPY_APP_FFMPEG_H




More information about the Bf-blender-cvs mailing list