[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36092] trunk/blender: Fix for [#26652] " Audio Muted" in Time Line Editor is not working

Joerg Mueller nexyon at gmail.com
Mon Apr 11 00:40:37 CEST 2011


Revision: 36092
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36092
Author:   nexyon
Date:     2011-04-10 22:40:37 +0000 (Sun, 10 Apr 2011)
Log Message:
-----------
Fix for [#26652] "Audio Muted" in Time Line Editor is not working
-> The feature was completely missing o_O
Also fixed an ffmpeg seeking bug.

Modified Paths:
--------------
    trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
    trunk/blender/intern/audaspace/intern/AUD_C-API.cpp
    trunk/blender/intern/audaspace/intern/AUD_C-API.h
    trunk/blender/intern/audaspace/intern/AUD_SequencerFactory.cpp
    trunk/blender/intern/audaspace/intern/AUD_SequencerFactory.h
    trunk/blender/intern/audaspace/intern/AUD_SequencerReader.cpp
    trunk/blender/source/blender/blenkernel/BKE_sound.h
    trunk/blender/source/blender/blenkernel/intern/sound.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c

Modified: trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
===================================================================
--- trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp	2011-04-10 18:15:24 UTC (rev 36091)
+++ trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp	2011-04-10 22:40:37 UTC (rev 36092)
@@ -253,7 +253,7 @@
 	if(position >= 0)
 	{
 		uint64_t st_time = m_formatCtx->start_time;
-		uint64_t seek_pos = position * AV_TIME_BASE / m_specs.rate;
+		uint64_t seek_pos = ((uint64_t)position) * ((uint64_t)AV_TIME_BASE) / ((uint64_t)m_specs.rate);
 
 		if (seek_pos < 0) {
 			seek_pos = 0;

Modified: trunk/blender/intern/audaspace/intern/AUD_C-API.cpp
===================================================================
--- trunk/blender/intern/audaspace/intern/AUD_C-API.cpp	2011-04-10 18:15:24 UTC (rev 36091)
+++ trunk/blender/intern/audaspace/intern/AUD_C-API.cpp	2011-04-10 22:40:37 UTC (rev 36092)
@@ -864,7 +864,7 @@
 	}
 }
 
-AUD_Sound* AUD_createSequencer(void* data, AUD_volumeFunction volume)
+AUD_Sound* AUD_createSequencer(int muted, void* data, AUD_volumeFunction volume)
 {
 /* AUD_XXX should be this: but AUD_createSequencer is called before the device
  * is initialized.
@@ -874,7 +874,7 @@
 	AUD_Specs specs;
 	specs.channels = AUD_CHANNELS_STEREO;
 	specs.rate = AUD_RATE_44100;
-	return new AUD_SequencerFactory(specs, data, volume);
+	return new AUD_SequencerFactory(specs, muted, data, volume);
 }
 
 void AUD_destroySequencer(AUD_Sound* sequencer)
@@ -882,6 +882,11 @@
 	delete ((AUD_SequencerFactory*)sequencer);
 }
 
+void AUD_setSequencerMuted(AUD_Sound* sequencer, int muted)
+{
+	((AUD_SequencerFactory*)sequencer)->mute(muted);
+}
+
 AUD_SequencerEntry* AUD_addSequencer(AUD_Sound** sequencer, AUD_Sound* sound,
 								 float begin, float end, float skip, void* data)
 {

Modified: trunk/blender/intern/audaspace/intern/AUD_C-API.h
===================================================================
--- trunk/blender/intern/audaspace/intern/AUD_C-API.h	2011-04-10 18:15:24 UTC (rev 36091)
+++ trunk/blender/intern/audaspace/intern/AUD_C-API.h	2011-04-10 22:40:37 UTC (rev 36092)
@@ -459,10 +459,12 @@
  */
 extern AUD_Channel* AUD_pauseAfter(AUD_Channel* handle, float seconds);
 
-extern AUD_Sound* AUD_createSequencer(void* data, AUD_volumeFunction volume);
+extern AUD_Sound* AUD_createSequencer(int muted, void* data, AUD_volumeFunction volume);
 
 extern void AUD_destroySequencer(AUD_Sound* sequencer);
 
+extern void AUD_setSequencerMuted(AUD_Sound* sequencer, int muted);
+
 extern AUD_SequencerEntry* AUD_addSequencer(AUD_Sound** sequencer, AUD_Sound* sound,
 										float begin, float end, float skip, void* data);
 

Modified: trunk/blender/intern/audaspace/intern/AUD_SequencerFactory.cpp
===================================================================
--- trunk/blender/intern/audaspace/intern/AUD_SequencerFactory.cpp	2011-04-10 18:15:24 UTC (rev 36091)
+++ trunk/blender/intern/audaspace/intern/AUD_SequencerFactory.cpp	2011-04-10 22:40:37 UTC (rev 36092)
@@ -34,9 +34,11 @@
 
 typedef std::list<AUD_SequencerReader*>::iterator AUD_ReaderIterator;
 
-AUD_SequencerFactory::AUD_SequencerFactory(AUD_Specs specs, void* data,
+AUD_SequencerFactory::AUD_SequencerFactory(AUD_Specs specs, bool muted,
+										   void* data,
 										   AUD_volumeFunction volume) :
 	m_specs(specs),
+	m_muted(muted),
 	m_data(data),
 	m_volume(volume)
 {
@@ -62,6 +64,16 @@
 	}
 }
 
+void AUD_SequencerFactory::mute(bool muted)
+{
+	m_muted = muted;
+}
+
+bool AUD_SequencerFactory::getMute() const
+{
+	return m_muted;
+}
+
 AUD_IReader* AUD_SequencerFactory::newReader()
 {
 	AUD_SequencerReader* reader = new AUD_SequencerReader(this, m_entries,

Modified: trunk/blender/intern/audaspace/intern/AUD_SequencerFactory.h
===================================================================
--- trunk/blender/intern/audaspace/intern/AUD_SequencerFactory.h	2011-04-10 18:15:24 UTC (rev 36091)
+++ trunk/blender/intern/audaspace/intern/AUD_SequencerFactory.h	2011-04-10 22:40:37 UTC (rev 36092)
@@ -63,6 +63,7 @@
 
 	std::list<AUD_SequencerEntry*> m_entries;
 	std::list<AUD_SequencerReader*> m_readers;
+	bool m_muted;
 	void* m_data;
 	AUD_volumeFunction m_volume;
 
@@ -73,9 +74,11 @@
 	AUD_SequencerFactory& operator=(const AUD_SequencerFactory&);
 
 public:
-	AUD_SequencerFactory(AUD_Specs specs, void* data, AUD_volumeFunction volume);
+	AUD_SequencerFactory(AUD_Specs specs, bool muted, void* data, AUD_volumeFunction volume);
 	~AUD_SequencerFactory();
 
+	void mute(bool muted);
+	bool getMute() const;
 	AUD_SequencerEntry* add(AUD_IFactory** sound, float begin, float end, float skip, void* data);
 	void remove(AUD_SequencerEntry* entry);
 	void move(AUD_SequencerEntry* entry, float begin, float end, float skip);

Modified: trunk/blender/intern/audaspace/intern/AUD_SequencerReader.cpp
===================================================================
--- trunk/blender/intern/audaspace/intern/AUD_SequencerReader.cpp	2011-04-10 18:15:24 UTC (rev 36091)
+++ trunk/blender/intern/audaspace/intern/AUD_SequencerReader.cpp	2011-04-10 22:40:37 UTC (rev 36092)
@@ -182,55 +182,58 @@
 		m_buffer.resize(size);
 	buffer = m_buffer.getBuffer();
 
-	for(AUD_StripIterator i = m_strips.begin(); i != m_strips.end(); i++)
+	if(!m_factory->getMute())
 	{
-		strip = *i;
-		if(!strip->entry->muted)
+		for(AUD_StripIterator i = m_strips.begin(); i != m_strips.end(); i++)
 		{
-			if(strip->old_sound != *strip->entry->sound)
+			strip = *i;
+			if(!strip->entry->muted)
 			{
-				strip->old_sound = *strip->entry->sound;
-				if(strip->reader)
-					delete strip->reader;
+				if(strip->old_sound != *strip->entry->sound)
+				{
+					strip->old_sound = *strip->entry->sound;
+					if(strip->reader)
+						delete strip->reader;
 
-				if(strip->old_sound)
-				{
-					try
+					if(strip->old_sound)
 					{
-						strip->reader = m_mixer->prepare(strip->old_sound->createReader());
+						try
+						{
+							strip->reader = m_mixer->prepare(strip->old_sound->createReader());
+						}
+						catch(AUD_Exception)
+						{
+							strip->reader = NULL;
+						}
 					}
-					catch(AUD_Exception)
-					{
+					else
 						strip->reader = NULL;
-					}
 				}
-				else
-					strip->reader = NULL;
-			}
 
-			if(strip->reader)
-			{
-				end = floor(strip->entry->end * rate);
-				if(m_position < end)
+				if(strip->reader)
 				{
-					start = floor(strip->entry->begin * rate);
-					if(m_position + length > start)
+					end = floor(strip->entry->end * rate);
+					if(m_position < end)
 					{
-						current = m_position - start;
-						if(current < 0)
+						start = floor(strip->entry->begin * rate);
+						if(m_position + length > start)
 						{
-							skip = -current;
-							current = 0;
+							current = m_position - start;
+							if(current < 0)
+							{
+								skip = -current;
+								current = 0;
+							}
+							else
+								skip = 0;
+							current += strip->entry->skip * rate;
+							len = length > end - m_position ? end - m_position : length;
+							len -= skip;
+							if(strip->reader->getPosition() != current)
+								strip->reader->seek(current);
+							strip->reader->read(len, buf);
+							m_mixer->add(buf, skip, len, m_volume(m_data, strip->entry->data, (float)m_position / (float)rate));
 						}
-						else
-							skip = 0;
-						current += strip->entry->skip * rate;
-						len = length > end - m_position ? end - m_position : length;
-						len -= skip;
-						if(strip->reader->getPosition() != current)
-							strip->reader->seek(current);
-						strip->reader->read(len, buf);
-						m_mixer->add(buf, skip, len, m_volume(m_data, strip->entry->data, (float)m_position / (float)rate));
 					}
 				}
 			}

Modified: trunk/blender/source/blender/blenkernel/BKE_sound.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sound.h	2011-04-10 18:15:24 UTC (rev 36091)
+++ trunk/blender/source/blender/blenkernel/BKE_sound.h	2011-04-10 22:40:37 UTC (rev 36092)
@@ -78,6 +78,8 @@
 
 void sound_destroy_scene(struct Scene *scene);
 
+void sound_mute_scene(struct Scene *scene, int muted);
+
 void* sound_scene_add_scene_sound(struct Scene *scene, struct Sequence* sequence, int startframe, int endframe, int frameskip);
 
 void* sound_add_scene_sound(struct Scene *scene, struct Sequence* sequence, int startframe, int endframe, int frameskip);

Modified: trunk/blender/source/blender/blenkernel/intern/sound.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sound.c	2011-04-10 18:15:24 UTC (rev 36091)
+++ trunk/blender/source/blender/blenkernel/intern/sound.c	2011-04-10 22:40:37 UTC (rev 36092)
@@ -347,7 +347,7 @@
 
 void sound_create_scene(struct Scene *scene)
 {
-	scene->sound_scene = AUD_createSequencer(scene, (AUD_volumeFunction)&sound_get_volume);
+	scene->sound_scene = AUD_createSequencer(scene->audio.flag & AUDIO_MUTE, scene, (AUD_volumeFunction)&sound_get_volume);
 }
 
 void sound_destroy_scene(struct Scene *scene)
@@ -358,6 +358,12 @@
 		AUD_destroySequencer(scene->sound_scene);
 }
 
+void sound_mute_scene(struct Scene *scene, int muted)
+{
+	if(scene->sound_scene)
+		AUD_setSequencerMuted(scene->sound_scene, muted);
+}
+
 void* sound_scene_add_scene_sound(struct Scene *scene, struct Sequence* sequence, int startframe, int endframe, int frameskip)
 {
 	if(scene != sequence->scene)

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2011-04-10 18:15:24 UTC (rev 36091)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2011-04-10 22:40:37 UTC (rev 36092)
@@ -912,6 +912,24 @@
 		rna_Scene_use_simplify_update(bmain, scene, ptr);
 }
 
+static int rna_Scene_use_audio_get(PointerRNA *ptr)
+{
+	Scene *scene= (Scene*)ptr->data;
+	return scene->audio.flag & AUDIO_MUTE;
+}
+
+static void rna_Scene_use_audio_set(PointerRNA *ptr, int value)
+{
+	Scene *scene= (Scene*)ptr->data;
+
+	if(value)
+		scene->audio.flag |= AUDIO_MUTE;
+	else
+		scene->audio.flag &= ~AUDIO_MUTE;
+
+	sound_mute_scene(scene, value);
+}
+
 static int rna_Scene_sync_mode_get(PointerRNA *ptr)
 {
 	Scene *scene= (Scene*)ptr->data;
@@ -3350,7 +3368,7 @@
 
 	/* Audio Settings */
 	prop= RNA_def_property(srna, "use_audio", PROP_BOOLEAN, PROP_NONE);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list