2
0
Эх сурвалжийг харах

Fix Theora video playback without a Vorbis stream

- prevent audio resampler errors when number of channels is 0,
- don't check for 'audio_done' when there is no audio data.

(cherry picked from commit 763b29f34e8c99c2f9559dcc31b59f99d0d6dee3)
Błażej Szczygieł 9 жил өмнө
parent
commit
aebad5de5f

+ 1 - 1
drivers/theora/video_stream_theora.cpp

@@ -513,7 +513,7 @@ void VideoStreamPlaybackTheora::update(float p_delta) {
 	}
 
 	bool frame_done=false;
-	bool audio_done=false;
+	bool audio_done=!vorbis_p;
 
 	bool theora_done=false;
 

+ 9 - 2
scene/gui/video_player.cpp

@@ -208,10 +208,17 @@ void VideoPlayer::set_stream(const Ref<VideoStream> &p_stream) {
 		playback->set_paused(paused);
 		texture=playback->get_texture();
 
+		const int channels = playback->get_channels();
+
 		AudioServer::get_singleton()->lock();
-		resampler.setup(playback->get_channels(),playback->get_mix_rate(),server_mix_rate,buffering_ms,0);
+		if (channels > 0)
+			resampler.setup(channels,playback->get_mix_rate(),server_mix_rate,buffering_ms,0);
+		else
+			resampler.clear();
 		AudioServer::get_singleton()->unlock();
-		playback->set_mix_callback(_audio_mix_callback,this);
+
+		if (channels > 0)
+			playback->set_mix_callback(_audio_mix_callback,this);
 
 	} else {
 		texture.unref();