svn merge ^/trunk/blender -r42920:42927
authorCampbell Barton <ideasman42@gmail.com>
Wed, 28 Dec 2011 13:33:35 +0000 (13:33 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 28 Dec 2011 13:33:35 +0000 (13:33 +0000)
13 files changed:
release/scripts/modules/sys_info.py
release/scripts/presets/ffmpeg/DV.py
release/scripts/presets/ffmpeg/DVD.py
release/scripts/presets/ffmpeg/SVCD.py
release/scripts/presets/ffmpeg/VCD.py
source/blender/makesdna/DNA_customdata_types.h
source/blender/makesdna/DNA_defs.h
source/blender/makesdna/DNA_mesh_types.h
source/blender/python/SConscript
source/blender/python/intern/CMakeLists.txt
source/blender/python/intern/bpy_app.c
source/blender/python/intern/bpy_app_ffmpeg.c [new file with mode: 0644]
source/blender/python/intern/bpy_app_ffmpeg.h [new file with mode: 0644]

index 1272d81872d99e955eae7f5b514367810e3e418f..64ff1c0f007d34f884495296e5978b3f93be690c 100644 (file)
@@ -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:
index 926fb241747b4e0362f78e31a12609d96e614be6..241d6938a5fb3dc1f673c89adc675a010cbfb4b1 100644 (file)
@@ -11,4 +11,4 @@ else:
 
 bpy.context.scene.render.ffmpeg_audio_mixrate = 48000
 bpy.context.scene.render.ffmpeg_audio_codec = "PCM"
-bpy.context.scene.render.ffmpeg_audio_channels = 2
+bpy.context.scene.render.ffmpeg_audio_channels = "STEREO"
index 196b5d68406bd7c405228586cd37659a75f34b98..07828a755cddee1d87e72ff8807586a90ffb11cd 100644 (file)
@@ -21,4 +21,4 @@ bpy.context.scene.render.ffmpeg_muxrate = 10080000
 bpy.context.scene.render.ffmpeg_audio_codec = "AC3"
 bpy.context.scene.render.ffmpeg_audio_bitrate = 448
 bpy.context.scene.render.ffmpeg_audio_mixrate = 48000
-bpy.context.scene.render.ffmpeg_audio_channels = 6
+bpy.context.scene.render.ffmpeg_audio_channels = "SURROUND51"
index e4459ab5c5c94c90e26aae1c99b18b86580e05f8..584f192c3d80ecd293b22f7824f6f86244352003 100644 (file)
@@ -21,4 +21,4 @@ bpy.context.scene.render.ffmpeg_muxrate = 0
 bpy.context.scene.render.ffmpeg_audio_bitrate = 224
 bpy.context.scene.render.ffmpeg_audio_mixrate = 44100
 bpy.context.scene.render.ffmpeg_audio_codec = "MP2"
-bpy.context.scene.render.ffmpeg_audio_channels = 2
+bpy.context.scene.render.ffmpeg_audio_channels = "STEREO"
index c2b73e682a2ea29f4eb753ff0d46a4d7b22ff5b2..35dda07a06426eb9aff91d8f3c968ee5d161f283 100644 (file)
@@ -21,4 +21,4 @@ bpy.context.scene.render.ffmpeg_muxrate = 2352 * 75 * 8
 bpy.context.scene.render.ffmpeg_audio_bitrate = 224
 bpy.context.scene.render.ffmpeg_audio_mixrate = 44100
 bpy.context.scene.render.ffmpeg_audio_codec = "MP2"
-bpy.context.scene.render.ffmpeg_audio_channels = 2
+bpy.context.scene.render.ffmpeg_audio_channels = "STEREO"
index b3ed49754bae8778afce3bc1e6e0303fe04e86a5..13a1f4fbe8a9b70d3a6adea321e942982ea13dc1 100644 (file)
@@ -36,6 +36,8 @@
 extern "C" {
 #endif
 
+#include "DNA_defs.h" /* USE_BMESH_FORWARD_COMPAT */
+
 /** descriptor and storage for a custom data layer */
 typedef struct CustomDataLayer {
        int type;       /* type of data in layer */
index 25d954196057ac839de957ff8972c2943c471013..54dfc18a03c29a1e3691ca4c0d882e1095ac55f0 100644 (file)
@@ -45,4 +45,6 @@
 /* hrmf, we need a better include then this */
 #include "../blenloader/BLO_sys_types.h" /* needed for int64_t only! */
 
+#define USE_BMESH_FORWARD_COMPAT
+
 #endif /* DNA_DEFS_H */
index 18dd682bfaf94efba23d0ebde9d02a8695a5a743..bedb3e7429bbb6ea502c88876e1ce78f0b6e0d93 100644 (file)
@@ -36,6 +36,8 @@
 #include "DNA_ID.h"
 #include "DNA_customdata_types.h"
 
+#include "DNA_defs.h" /* USE_BMESH_FORWARD_COMPAT */
+
 struct DerivedMesh;
 struct Ipo;
 struct Key;
index 7075b0592b8982efebf638176a0af62cf6ea5d06..481d66a9de77efb4f11baf6eda504eec20192f66 100644 (file)
@@ -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])
index 63ccdea3f0d20b5382673dffd93ab2e9e96de594..1899936cb5094a0ba9e02fafe6b3f52c25ab65d2 100644 (file)
@@ -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}")
index d5f0cd205fae7dd3a892a6031cf5470f27ec314c..ea95c4ebd8529fb250fde08a59827df7e62b1c8f 100644 (file)
@@ -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 (file)
index 0000000..9c44289
--- /dev/null
@@ -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 (file)
index 0000000..4ed89cd
--- /dev/null
@@ -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