diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2019-09-25 13:01:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-25 13:01:50 +0200 |
commit | 9b8c355eab9b0b4ab1597efac2b424fbaf24ff1f (patch) | |
tree | 2719376ef49d998a9e173a841235904d3fe53972 | |
parent | dec10dd776fca2994277faa3a97b13e70317f784 (diff) | |
parent | ec9c5171d27be642d3e4003989b6256c5dbe4453 (diff) |
Merge pull request #32199 from starryalley/fix_seek
Fix VideostreamGDNative seek
-rw-r--r-- | modules/gdnative/videodecoder/video_stream_gdnative.cpp | 14 | ||||
-rw-r--r-- | modules/gdnative/videodecoder/video_stream_gdnative.h | 1 |
2 files changed, 14 insertions, 1 deletions
diff --git a/modules/gdnative/videodecoder/video_stream_gdnative.cpp b/modules/gdnative/videodecoder/video_stream_gdnative.cpp index 212ff51b80..f3c34fd5e0 100644 --- a/modules/gdnative/videodecoder/video_stream_gdnative.cpp +++ b/modules/gdnative/videodecoder/video_stream_gdnative.cpp @@ -168,8 +168,12 @@ void VideoStreamPlaybackGDNative::update(float p_delta) { } } - while (interface->get_playback_position(data_struct) < time && playing) { + if (seek_backward) { + update_texture(); + seek_backward = false; + } + while (interface->get_playback_position(data_struct) < time && playing) { update_texture(); } } @@ -197,6 +201,7 @@ VideoStreamPlaybackGDNative::VideoStreamPlaybackGDNative() : mix_callback(NULL), num_channels(-1), time(0), + seek_backward(false), mix_rate(0), delay_compensation(0), pcm(NULL), @@ -261,6 +266,13 @@ void VideoStreamPlaybackGDNative::stop() { void VideoStreamPlaybackGDNative::seek(float p_time) { ERR_FAIL_COND(interface == NULL); interface->seek(data_struct, p_time); + if (p_time < time) + seek_backward = true; + time = p_time; + // reset audio buffers + memset(pcm, 0, num_channels * AUX_BUFFER_SIZE * sizeof(float)); + pcm_write_idx = -1; + samples_decoded = 0; } void VideoStreamPlaybackGDNative::set_paused(bool p_paused) { diff --git a/modules/gdnative/videodecoder/video_stream_gdnative.h b/modules/gdnative/videodecoder/video_stream_gdnative.h index b9f1c8e4da..9aed1fd2a0 100644 --- a/modules/gdnative/videodecoder/video_stream_gdnative.h +++ b/modules/gdnative/videodecoder/video_stream_gdnative.h @@ -121,6 +121,7 @@ class VideoStreamPlaybackGDNative : public VideoStreamPlayback { int num_channels; float time; + bool seek_backward; int mix_rate; double delay_compensation; |