Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/modules/sys_info.py10
-rw-r--r--source/blender/python/SConscript3
-rw-r--r--source/blender/python/intern/CMakeLists.txt16
-rw-r--r--source/blender/python/intern/bpy_app.c5
-rw-r--r--source/blender/python/intern/bpy_app_ffmpeg.c139
-rw-r--r--source/blender/python/intern/bpy_app_ffmpeg.h32
6 files changed, 202 insertions, 3 deletions
diff --git a/release/scripts/modules/sys_info.py b/release/scripts/modules/sys_info.py
index 1272d81872d..64ff1c0f007 100644
--- a/release/scripts/modules/sys_info.py
+++ b/release/scripts/modules/sys_info.py
@@ -94,6 +94,16 @@ def write_sysinfo(op):
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:
diff --git a/source/blender/python/SConscript b/source/blender/python/SConscript
index 7075b0592b8..481d66a9de7 100644
--- a/source/blender/python/SConscript
+++ b/source/blender/python/SConscript
@@ -46,5 +46,8 @@ if env['WITH_BF_INTERNATIONAL']:
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])
diff --git a/source/blender/python/intern/CMakeLists.txt b/source/blender/python/intern/CMakeLists.txt
index 63ccdea3f0d..1899936cb50 100644
--- a/source/blender/python/intern/CMakeLists.txt
+++ b/source/blender/python/intern/CMakeLists.txt
@@ -42,9 +42,10 @@ set(INC_SYS
)
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 @@ set(SRC
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 @@ if(WITH_CYCLES)
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}")
diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c
index d5f0cd205fa..ea95c4ebd85 100644
--- a/source/blender/python/intern/bpy_app.c
+++ b/source/blender/python/intern/bpy_app.c
@@ -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 @@ static PyStructSequence_Field app_info_fields[] = {
{(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 @@ static PyObject *make_app_info(void)
SetStrItem("Unknown");
#endif
+ SetObjItem(BPY_app_ffmpeg_struct());
SetObjItem(BPY_app_handlers_struct());
#undef SetIntItem
diff --git a/source/blender/python/intern/bpy_app_ffmpeg.c b/source/blender/python/intern/bpy_app_ffmpeg.c
new file mode 100644
index 00000000000..9c4428919ec
--- /dev/null
+++ b/source/blender/python/intern/bpy_app_ffmpeg.c
@@ -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;
+}
diff --git a/source/blender/python/intern/bpy_app_ffmpeg.h b/source/blender/python/intern/bpy_app_ffmpeg.h
new file mode 100644
index 00000000000..4ed89cd7902
--- /dev/null
+++ b/source/blender/python/intern/bpy_app_ffmpeg.h
@@ -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