-fixes to theora video ending sooner than expected, fixes #3066

This commit is contained in:
Juan Linietsky 2015-12-15 09:17:32 -03:00
parent 4713bcccf3
commit b12a2f456c
2 changed files with 13 additions and 5 deletions

View file

@ -504,6 +504,10 @@ void VideoStreamPlaybackTheora::update(float p_delta) {
bool audio_pending = false; bool audio_pending = false;
bool no_vorbis=false;
bool no_theora=false;
while (vorbis_p) { while (vorbis_p) {
int ret; int ret;
float **pcm; float **pcm;
@ -575,6 +579,7 @@ void VideoStreamPlaybackTheora::update(float p_delta) {
} }
} else { /* we need more data; break out to suck in another page */ } else { /* we need more data; break out to suck in another page */
//printf("need moar data\n"); //printf("need moar data\n");
no_vorbis=true;
break; break;
}; };
} }
@ -625,17 +630,19 @@ void VideoStreamPlaybackTheora::update(float p_delta) {
/*If we are too slow, reduce the pp level.*/ /*If we are too slow, reduce the pp level.*/
pp_inc=pp_level>0?-1:0; pp_inc=pp_level>0?-1:0;
} }
} else {
} }
} else { } else {
no_theora=true;
break; break;
} }
} }
#ifdef THEORA_USE_THREAD_STREAMING #ifdef THEORA_USE_THREAD_STREAMING
if (file && thread_eof && ring_buffer.data_left()==0) { if (file && thread_eof && && (no_vorbis || no_theora) && ring_buffer.data_left()==0) {
#else #else
if (file && /*!videobuf_ready && */ file->eof_reached()) { if (file && /*!videobuf_ready && */ (no_vorbis || no_theora) && file->eof_reached()) {
#endif #endif
printf("video done, stopping\n"); printf("video done, stopping\n");
stop(); stop();
@ -723,7 +730,7 @@ bool VideoStreamPlaybackTheora::is_playing() const {
void VideoStreamPlaybackTheora::set_paused(bool p_paused) { void VideoStreamPlaybackTheora::set_paused(bool p_paused) {
playing = !p_paused; //pau = !p_paused;
}; };
bool VideoStreamPlaybackTheora::is_paused(bool p_paused) const { bool VideoStreamPlaybackTheora::is_paused(bool p_paused) const {

View file

@ -117,8 +117,9 @@ void VideoPlayer::_notification(int p_notification) {
case NOTIFICATION_ENTER_TREE: { case NOTIFICATION_ENTER_TREE: {
//set_idle_process(false); //don't annoy //set_idle_process(false); //don't annoy
if (stream.is_valid() && autoplay && !get_tree()->is_editor_hint()) if (stream.is_valid() && autoplay && !get_tree()->is_editor_hint()) {
play(); play();
}
} break; } break;
case NOTIFICATION_PROCESS: { case NOTIFICATION_PROCESS: {