[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46440] tags/blender-2.63a-release/blender : blender 2.63a: merge changes from trunk into tag

Sergey Sharybin sergey.vfx at gmail.com
Wed May 9 00:20:15 CEST 2012


Revision: 46440
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46440
Author:   nazgul
Date:     2012-05-08 22:20:14 +0000 (Tue, 08 May 2012)
Log Message:
-----------
blender 2.63a: merge changes from trunk into tag

For details see
http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.63/Bug_Fixes#Fixes_since_2.63_.28for_bugfix_release.29

Merged listed revisions until 46419, currently not merged revisions from
Collada and Aligorith sections.

Revisions which caused difficulties with merge and which need to be verified:
* 46159: seems to be a fix for post-release merge tomato into trunk 46023
         with bunch of optimizations, changes are currently ignored
* 46179: some of changes in camera.cpp and object.cpp are related on 46114 which
         added support for motion vector and UV passes, later Brecht cleaned up
         all changes related holdout due to the got mixed with motion blur.
* 46181: changes in rna_lamp touches code from rev46134 (merge Harmony branch)
         and can not be applied on pre-merge state
* 46222: none changes applied - all of them is for code introduced in 46175
         which isn't getting backported to tag
* 46341: completely skip -- related to changes from 46279 which is not getting backported
* 46277: changes to mesh.c (which the only actual interesting changes here) are ignored.
         Comment says "improvement to LAST commit" and this LAST commit is not
         getting merged. Hopefully merge conflicts were resolved in a way which
         keeps file in a state previous to 46276.
* Commits related on solidify modifier. They got totally screwed up MOD_solidify.c
  due to all that style cleanup and so. Finished up backporting MOD_solidify.c from
  trunk into tag by reverting style commits (seems all actual changes need to be
  backported there). Hopefully it's fine now.
* 46417: some Changes in smoke.c are related on changes made in merge commit from
         smoke2 branch into trunk. Hopefully the same changes works fine with
         pre-merged smoke.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46134

Modified Paths:
--------------
    tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_C-API.cpp
    tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_C-API.h
    tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_FileWriter.cpp
    tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_FileWriter.h
    tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_Reference.h
    tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_ReferenceHandler.cpp
    tags/blender-2.63a-release/blender/intern/cycles/blender/blender_object.cpp
    tags/blender-2.63a-release/blender/intern/cycles/blender/blender_sync.cpp
    tags/blender-2.63a-release/blender/intern/cycles/blender/blender_sync.h
    tags/blender-2.63a-release/blender/intern/cycles/device/device_cuda.cpp
    tags/blender-2.63a-release/blender/intern/cycles/util/util_math.h
    tags/blender-2.63a-release/blender/intern/cycles/util/util_transform.h
    tags/blender-2.63a-release/blender/intern/ghost/intern/GHOST_NDOFManagerX11.cpp
    tags/blender-2.63a-release/blender/intern/guardedalloc/cpp/mallocn.cpp
    tags/blender-2.63a-release/blender/release/scripts/startup/bl_operators/image.py
    tags/blender-2.63a-release/blender/release/scripts/startup/bl_operators/uvcalc_lightmap.py
    tags/blender-2.63a-release/blender/release/scripts/startup/bl_ui/properties_animviz.py
    tags/blender-2.63a-release/blender/release/scripts/startup/bl_ui/properties_data_armature.py
    tags/blender-2.63a-release/blender/release/scripts/startup/bl_ui/properties_object.py
    tags/blender-2.63a-release/blender/release/scripts/startup/bl_ui/space_userpref.py
    tags/blender-2.63a-release/blender/release/scripts/startup/bl_ui/space_view3d.py
    tags/blender-2.63a-release/blender/release/scripts/templates/operator_modal_timer.py
    tags/blender-2.63a-release/blender/source/blender/blenkernel/BKE_constraint.h
    tags/blender-2.63a-release/blender/source/blender/blenkernel/BKE_customdata.h
    tags/blender-2.63a-release/blender/source/blender/blenkernel/BKE_object.h
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/anim.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/anim_sys.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/armature.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/constraint.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/customdata.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/editderivedmesh.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/fluidsim.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/mesh.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/multires.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/object.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/particle_system.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/scene.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/sequencer.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/smoke.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/softbody.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/text.c
    tags/blender-2.63a-release/blender/source/blender/blenkernel/intern/tracking.c
    tags/blender-2.63a-release/blender/source/blender/blenlib/BLI_fileops.h
    tags/blender-2.63a-release/blender/source/blender/blenlib/BLI_ghash.h
    tags/blender-2.63a-release/blender/source/blender/blenlib/BLI_math_matrix.h
    tags/blender-2.63a-release/blender/source/blender/blenlib/intern/BLI_ghash.c
    tags/blender-2.63a-release/blender/source/blender/blenlib/intern/math_matrix.c
    tags/blender-2.63a-release/blender/source/blender/blenlib/intern/storage.c
    tags/blender-2.63a-release/blender/source/blender/blenlib/intern/string_cursor_utf8.c
    tags/blender-2.63a-release/blender/source/blender/blenloader/intern/readfile.c
    tags/blender-2.63a-release/blender/source/blender/blenloader/intern/writefile.c
    tags/blender-2.63a-release/blender/source/blender/bmesh/intern/bmesh_construct.c
    tags/blender-2.63a-release/blender/source/blender/bmesh/intern/bmesh_core.c
    tags/blender-2.63a-release/blender/source/blender/bmesh/intern/bmesh_interp.c
    tags/blender-2.63a-release/blender/source/blender/bmesh/intern/bmesh_interp.h
    tags/blender-2.63a-release/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    tags/blender-2.63a-release/blender/source/blender/bmesh/intern/bmesh_operators.h
    tags/blender-2.63a-release/blender/source/blender/bmesh/intern/bmesh_private.h
    tags/blender-2.63a-release/blender/source/blender/bmesh/operators/bmo_dissolve.c
    tags/blender-2.63a-release/blender/source/blender/bmesh/operators/bmo_primitive.c
    tags/blender-2.63a-release/blender/source/blender/bmesh/operators/bmo_subdivide.c
    tags/blender-2.63a-release/blender/source/blender/bmesh/operators/bmo_subdivide.h
    tags/blender-2.63a-release/blender/source/blender/collada/AnimationImporter.cpp
    tags/blender-2.63a-release/blender/source/blender/collada/AnimationImporter.h
    tags/blender-2.63a-release/blender/source/blender/collada/ArmatureImporter.cpp
    tags/blender-2.63a-release/blender/source/blender/collada/DocumentImporter.cpp
    tags/blender-2.63a-release/blender/source/blender/collada/GeometryExporter.h
    tags/blender-2.63a-release/blender/source/blender/collada/MeshImporter.cpp
    tags/blender-2.63a-release/blender/source/blender/collada/MeshImporter.h
    tags/blender-2.63a-release/blender/source/blender/collada/SkinInfo.cpp
    tags/blender-2.63a-release/blender/source/blender/collada/collada_utils.cpp
    tags/blender-2.63a-release/blender/source/blender/collada/collada_utils.h
    tags/blender-2.63a-release/blender/source/blender/editors/animation/anim_filter.c
    tags/blender-2.63a-release/blender/source/blender/editors/armature/poseobject.c
    tags/blender-2.63a-release/blender/source/blender/editors/interface/interface_draw.c
    tags/blender-2.63a-release/blender/source/blender/editors/interface/interface_widgets.c
    tags/blender-2.63a-release/blender/source/blender/editors/mesh/editmesh_knife.c
    tags/blender-2.63a-release/blender/source/blender/editors/mesh/editmesh_loopcut.c
    tags/blender-2.63a-release/blender/source/blender/editors/mesh/editmesh_tools.c
    tags/blender-2.63a-release/blender/source/blender/editors/mesh/mesh_data.c
    tags/blender-2.63a-release/blender/source/blender/editors/mesh/mesh_navmesh.c
    tags/blender-2.63a-release/blender/source/blender/editors/object/object_add.c
    tags/blender-2.63a-release/blender/source/blender/editors/object/object_edit.c
    tags/blender-2.63a-release/blender/source/blender/editors/object/object_hook.c
    tags/blender-2.63a-release/blender/source/blender/editors/object/object_modifier.c
    tags/blender-2.63a-release/blender/source/blender/editors/render/render_opengl.c
    tags/blender-2.63a-release/blender/source/blender/editors/sculpt_paint/paint_vertex.c
    tags/blender-2.63a-release/blender/source/blender/editors/sound/sound_ops.c
    tags/blender-2.63a-release/blender/source/blender/editors/space_graph/space_graph.c
    tags/blender-2.63a-release/blender/source/blender/editors/space_node/drawnode.c
    tags/blender-2.63a-release/blender/source/blender/editors/space_node/node_edit.c
    tags/blender-2.63a-release/blender/source/blender/editors/space_node/node_ops.c
    tags/blender-2.63a-release/blender/source/blender/editors/space_sequencer/sequencer_add.c
    tags/blender-2.63a-release/blender/source/blender/editors/space_sequencer/space_sequencer.c
    tags/blender-2.63a-release/blender/source/blender/editors/space_view3d/drawmesh.c
    tags/blender-2.63a-release/blender/source/blender/editors/space_view3d/drawobject.c
    tags/blender-2.63a-release/blender/source/blender/editors/space_view3d/view3d_intern.h
    tags/blender-2.63a-release/blender/source/blender/editors/transform/transform.c
    tags/blender-2.63a-release/blender/source/blender/editors/transform/transform_ops.c
    tags/blender-2.63a-release/blender/source/blender/editors/uvedit/uvedit_ops.c
    tags/blender-2.63a-release/blender/source/blender/editors/uvedit/uvedit_smart_stitch.c
    tags/blender-2.63a-release/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
    tags/blender-2.63a-release/blender/source/blender/gpu/intern/gpu_draw.c
    tags/blender-2.63a-release/blender/source/blender/gpu/intern/gpu_material.c
    tags/blender-2.63a-release/blender/source/blender/imbuf/intern/tiff.c
    tags/blender-2.63a-release/blender/source/blender/imbuf/intern/util.c
    tags/blender-2.63a-release/blender/source/blender/makesdna/DNA_smoke_types.h
    tags/blender-2.63a-release/blender/source/blender/makesrna/RNA_enum_types.h
    tags/blender-2.63a-release/blender/source/blender/makesrna/intern/rna_animation.c
    tags/blender-2.63a-release/blender/source/blender/makesrna/intern/rna_animviz.c
    tags/blender-2.63a-release/blender/source/blender/makesrna/intern/rna_constraint.c
    tags/blender-2.63a-release/blender/source/blender/makesrna/intern/rna_modifier.c
    tags/blender-2.63a-release/blender/source/blender/makesrna/intern/rna_nla.c
    tags/blender-2.63a-release/blender/source/blender/makesrna/intern/rna_nodetree.c
    tags/blender-2.63a-release/blender/source/blender/makesrna/intern/rna_scene.c
    tags/blender-2.63a-release/blender/source/blender/modifiers/intern/MOD_mirror.c
    tags/blender-2.63a-release/blender/source/blender/modifiers/intern/MOD_solidify.c
    tags/blender-2.63a-release/blender/source/blender/modifiers/intern/MOD_subsurf.c
    tags/blender-2.63a-release/blender/source/blender/modifiers/intern/MOD_weightvgedit.c
    tags/blender-2.63a-release/blender/source/blender/modifiers/intern/MOD_weightvgmix.c
    tags/blender-2.63a-release/blender/source/blender/nodes/composite/nodes/node_composite_chromaMatte.c
    tags/blender-2.63a-release/blender/source/blender/nodes/composite/nodes/node_composite_diffMatte.c
    tags/blender-2.63a-release/blender/source/blender/nodes/composite/nodes/node_composite_distanceMatte.c
    tags/blender-2.63a-release/blender/source/blender/nodes/intern/node_common.c
    tags/blender-2.63a-release/blender/source/blender/nodes/shader/nodes/node_shader_common.c
    tags/blender-2.63a-release/blender/source/blender/nodes/texture/nodes/node_texture_common.c
    tags/blender-2.63a-release/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c
    tags/blender-2.63a-release/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.c
    tags/blender-2.63a-release/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.h
    tags/blender-2.63a-release/blender/source/blender/python/intern/bpy_props.c
    tags/blender-2.63a-release/blender/source/blender/python/intern/bpy_rna.c
    tags/blender-2.63a-release/blender/source/blender/render/intern/include/strand.h
    tags/blender-2.63a-release/blender/source/blender/render/intern/raytrace/rayobject.cpp
    tags/blender-2.63a-release/blender/source/blender/render/intern/source/strand.c
    tags/blender-2.63a-release/blender/source/blender/render/intern/source/zbuf.c
    tags/blender-2.63a-release/blender/source/blender/windowmanager/intern/wm_operators.c
    tags/blender-2.63a-release/blender/source/blenderplayer/bad_level_call_stubs/stubs.c
    tags/blender-2.63a-release/blender/source/creator/creator.c
    tags/blender-2.63a-release/blender/source/gameengine/GamePlayer/common/GPC_Canvas.cpp
    tags/blender-2.63a-release/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp

Added Paths:
-----------
    tags/blender-2.63a-release/blender/release/scripts/presets/tracking_settings/blurry_movie.py

Property Changed:
----------------
    tags/blender-2.63a-release/blender/
    tags/blender-2.63a-release/blender/source/blender/editors/space_outliner/


Property changes on: tags/blender-2.63a-release/blender
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/soc-2011-tomato:42376,42378-42379,42383,42385,42395,42397-42400,42407,42411,42418,42443-42444,42446,42467,42472,42486,42650-42652,42654-42655,42709-42710,42733-42734,42801,43872,44130,44141,44147-44149,44151-44152,44229-44230
   + /branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/soc-2011-tomato:42376,42378-42379,42383,42385,42395,42397-42400,42407,42411,42418,42443-42444,42446,42467,42472,42486,42650-42652,42654-42655,42709-42710,42733-42734,42801,43872,44130,44141,44147-44149,44151-44152,44229-44230
/trunk/blender:46003-46005,46014-46016,46027-46028,46035-46036,46039,46043,46072,46077,46085,46091,46093,46095,46116-46117,46120,46125,46127,46131,46136,46138,46140-46143,46148-46149,46152,46156-46160,46172,46178-46181,46183-46184,46192,46194,46196-46197,46205-46206,46213-46215,46222,46224-46236,46241,46246,46250,46253,46260-46261,46264-46265,46269,46273,46277-46278,46280,46282,46289-46290,46294,46305,46308,46310-46311,46316,46327,46341-46342,46346-46347,46354,46361-46363,46385,46391,46393,46410-46412,46416-46417

Modified: tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_C-API.cpp
===================================================================
--- tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_C-API.cpp	2012-05-08 22:11:16 UTC (rev 46439)
+++ tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_C-API.cpp	2012-05-08 22:20:14 UTC (rev 46440)
@@ -41,6 +41,7 @@
 #include <cstdlib>
 #include <cstring>
 #include <cmath>
+#include <sstream>
 
 #include "AUD_NULLDevice.h"
 #include "AUD_I3DDevice.h"
@@ -1236,6 +1237,47 @@
 	}
 }
 
+const char* AUD_mixdown_per_channel(AUD_Sound* sound, unsigned int start, unsigned int length, unsigned int buffersize, const char* filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate)
+{
+	try
+	{
+		AUD_SequencerFactory* f = dynamic_cast<AUD_SequencerFactory*>(sound->get());
+
+		f->setSpecs(specs.specs);
+
+		std::vector<AUD_Reference<AUD_IWriter> > writers;
+
+		int channels = specs.channels;
+		specs.channels = AUD_CHANNELS_MONO;
+
+		for(int i = 0; i < channels; i++)
+		{
+			std::stringstream stream;
+			std::string fn = filename;
+			size_t index = fn.find_last_of('.');
+			size_t index_slash = fn.find_last_of('/');
+			size_t index_backslash = fn.find_last_of('\\');
+			if((index == std::string::npos) ||
+					((index < index_slash) && (index_slash != std::string::npos)) ||
+					((index < index_backslash) && (index_backslash != std::string::npos)))
+				stream << filename << "_" << (i + 1);
+			else
+				stream << fn.substr(0, index) << "_" << (i + 1) << fn.substr(index);
+			writers.push_back(AUD_FileWriter::createWriter(stream.str(), specs, format, codec, bitrate));
+		}
+
+		AUD_Reference<AUD_IReader> reader = f->createQualityReader();
+		reader->seek(start);
+		AUD_FileWriter::writeReader(reader, writers, length, buffersize);
+
+		return NULL;
+	}
+	catch(AUD_Exception& e)
+	{
+		return e.str;
+	}
+}
+
 AUD_Device* AUD_openMixdownDevice(AUD_DeviceSpecs specs, AUD_Sound* sequencer, float volume, float start)
 {
 	try

Modified: tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_C-API.h
===================================================================
--- tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_C-API.h	2012-05-08 22:11:16 UTC (rev 46439)
+++ tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_C-API.h	2012-05-08 22:20:14 UTC (rev 46440)
@@ -710,6 +710,21 @@
 extern const char* AUD_mixdown(AUD_Sound* sound, unsigned int start, unsigned int length, unsigned int buffersize, const char* filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate);
 
 /**
+ * Mixes a sound down into multiple files.
+ * \param sound The sound scene to mix down.
+ * \param start The start frame.
+ * \param length The count of frames to write.
+ * \param buffersize How many samples should be written at once.
+ * \param filename The file to write to, the channel number and an underscore are added at the beginning.
+ * \param specs The file's audio specification.
+ * \param format The file's container format.
+ * \param codec The codec used for encoding the audio data.
+ * \param bitrate The bitrate for encoding.
+ * \return An error message or NULL in case of success.
+ */
+extern const char* AUD_mixdown_per_channel(AUD_Sound* sound, unsigned int start, unsigned int length, unsigned int buffersize, const char* filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate);
+
+/**
  * Opens a read device and prepares it for mixdown of the sound scene.
  * \param specs Output audio specifications.
  * \param sequencer The sound scene to mix down.

Modified: tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_FileWriter.cpp
===================================================================
--- tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_FileWriter.cpp	2012-05-08 22:11:16 UTC (rev 46439)
+++ tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_FileWriter.cpp	2012-05-08 22:20:14 UTC (rev 46440)
@@ -93,3 +93,39 @@
 		writer->write(len, buf);
 	}
 }
+
+void AUD_FileWriter::writeReader(AUD_Reference<AUD_IReader> reader, std::vector<AUD_Reference<AUD_IWriter> >& writers, unsigned int length, unsigned int buffersize)
+{
+	AUD_Buffer buffer(buffersize * AUD_SAMPLE_SIZE(reader->getSpecs()));
+	AUD_Buffer buffer2(buffersize * sizeof(sample_t));
+	sample_t* buf = buffer.getBuffer();
+	sample_t* buf2 = buffer2.getBuffer();
+
+	int len;
+	bool eos = false;
+	int channels = reader->getSpecs().channels;
+
+	for(unsigned int pos = 0; ((pos < length) || (length <= 0)) && !eos; pos += len)
+	{
+		len = buffersize;
+		if((len > length - pos) && (length > 0))
+			len = length - pos;
+		reader->read(len, eos, buf);
+
+		for(int channel = 0; channel < channels; channel++)
+		{
+			for(int i = 0; i < len; i++)
+			{
+				// clamping!
+				if(buf[i * channels + channel] > 1)
+					buf2[i] = 1;
+				else if(buf[i * channels + channel] < -1)
+					buf2[i] = -1;
+				else
+					buf2[i] = buf[i * channels + channel];
+			}
+
+			writers[channel]->write(len, buf2);
+		}
+	}
+}

Modified: tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_FileWriter.h
===================================================================
--- tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_FileWriter.h	2012-05-08 22:11:16 UTC (rev 46439)
+++ tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_FileWriter.h	2012-05-08 22:20:14 UTC (rev 46440)
@@ -31,6 +31,7 @@
 #define __AUD_FILEWRITER_H__
 
 #include <string>
+#include <vector>
 
 #include "AUD_Reference.h"
 
@@ -68,6 +69,15 @@
 	 * \param buffersize How many samples should be transfered at once.
 	 */
 	static void writeReader(AUD_Reference<AUD_IReader> reader, AUD_Reference<AUD_IWriter> writer, unsigned int length, unsigned int buffersize);
+
+	/**
+	 * Writes a reader to several writers.
+	 * \param reader The reader to read from.
+	 * \param writers The writers to write to.
+	 * \param length How many samples should be transfered.
+	 * \param buffersize How many samples should be transfered at once.
+	 */
+	static void writeReader(AUD_Reference<AUD_IReader> reader, std::vector<AUD_Reference<AUD_IWriter> >& writers, unsigned int length, unsigned int buffersize);
 };
 
 #endif //__AUD_FILEWRITER_H__

Modified: tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_Reference.h
===================================================================
--- tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_Reference.h	2012-05-08 22:11:16 UTC (rev 46439)
+++ tags/blender-2.63a-release/blender/intern/audaspace/intern/AUD_Reference.h	2012-05-08 22:20:14 UTC (rev 46440)
@@ -31,6 +31,7 @@
 
 #include <map>
 #include <cstddef>
+#include <pthread.h>
 
 // #define MEM_DEBUG
 
@@ -49,8 +50,13 @@
 	 * Saves the reference counts.
 	 */
 	static std::map<void*, unsigned int> m_references;
+	static pthread_mutex_t m_mutex;
+	static bool m_mutex_initialised;
 
 public:
+
+	static pthread_mutex_t* getMutex();
+
 	/**
 	 * Reference increment.
 	 * \param reference The reference.
@@ -108,6 +114,7 @@
 	template <class U>
 	AUD_Reference(U* reference)
 	{
+		pthread_mutex_lock(AUD_ReferenceHandler::getMutex());
 		m_original = reference;
 		m_reference = dynamic_cast<T*>(reference);
 		AUD_ReferenceHandler::incref(m_original);
@@ -115,6 +122,7 @@
 		if(m_reference != NULL)
 			std::cerr << "+" << typeid(*m_reference).name() << std::endl;
 #endif
+		pthread_mutex_unlock(AUD_ReferenceHandler::getMutex());
 	}
 
 	AUD_Reference()
@@ -129,6 +137,7 @@
 	 */
 	AUD_Reference(const AUD_Reference& ref)
 	{
+		pthread_mutex_lock(AUD_ReferenceHandler::getMutex());
 		m_original = ref.m_original;
 		m_reference = ref.m_reference;
 		AUD_ReferenceHandler::incref(m_original);
@@ -136,11 +145,13 @@
 		if(m_reference != NULL)
 			std::cerr << "+" << typeid(*m_reference).name() << std::endl;
 #endif
+		pthread_mutex_unlock(AUD_ReferenceHandler::getMutex());
 	}
 
 	template <class U>
 	explicit AUD_Reference(const AUD_Reference<U>& ref)
 	{
+		pthread_mutex_lock(AUD_ReferenceHandler::getMutex());
 		m_original = ref.get();
 		m_reference = dynamic_cast<T*>(ref.get());
 		AUD_ReferenceHandler::incref(m_original);
@@ -148,6 +159,7 @@
 		if(m_reference != NULL)
 			std::cerr << "+" << typeid(*m_reference).name() << std::endl;
 #endif
+		pthread_mutex_unlock(AUD_ReferenceHandler::getMutex());
 	}
 
 	/**
@@ -156,12 +168,20 @@
 	 */
 	~AUD_Reference()
 	{
+		pthread_mutex_lock(AUD_ReferenceHandler::getMutex());
 #ifdef MEM_DEBUG
 		if(m_reference != NULL)
 			std::cerr << "-" << typeid(*m_reference).name() << std::endl;
 #endif
 		if(AUD_ReferenceHandler::decref(m_original))
+		{
+			pthread_mutex_unlock(AUD_ReferenceHandler::getMutex());
 			delete m_reference;
+		}
+		else
+		{
+			pthread_mutex_unlock(AUD_ReferenceHandler::getMutex());
+		}
 	}
 
 	/**
@@ -173,12 +193,18 @@
 		if(&ref == this)
 			return *this;
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list