diff options
author | Howard Stearns <aech@lindenlab.com> | 2022-01-24 16:52:29 +0000 |
---|---|---|
committer | Howard Stearns <aech@lindenlab.com> | 2022-01-24 16:52:29 +0000 |
commit | fec246a2e6d380971080d95446cc55059be01352 (patch) | |
tree | 358eca34c63a9256a26acadd0b3e379cb60dc0be /indra/media_plugins | |
parent | 67dc2924bf6f004326f8e22d1d92c4a071c946a4 (diff) | |
parent | 5ab34ccc5a5ec0abd6526b16379d7e29d8668ec4 (diff) |
Merged DRTVWR-544-maint into SL-316
Diffstat (limited to 'indra/media_plugins')
-rw-r--r-- | indra/media_plugins/libvlc/media_plugin_libvlc.cpp | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp index 1afe25e9a1..bbb15c3955 100644 --- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp +++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp @@ -93,8 +93,8 @@ private: bool mIsLooping; - float mCurTime; - float mDuration; + F64 mCurTime; + F64 mDuration; EStatus mVlcStatus; }; @@ -562,7 +562,24 @@ void MediaPluginLibVLC::receiveMessage(const char* message_string) mTextureWidth = texture_width; mTextureHeight = texture_height; + libvlc_time_t time = 1000.0 * mCurTime; + playMedia(); + + if (mLibVLCMediaPlayer) + { + libvlc_media_player_set_time(mLibVLCMediaPlayer, time); + time = libvlc_media_player_get_time(mLibVLCMediaPlayer); + if (time < 0) + { + // -1 if there is no media + mCurTime = 0; + } + else + { + mCurTime = (F64)time / 1000.0; + } + } }; }; @@ -606,11 +623,27 @@ void MediaPluginLibVLC::receiveMessage(const char* message_string) } else if (message_name == "seek") { - if (mDuration > 0) - { - F64 normalized_offset = message_in.getValueReal("time") / mDuration; - libvlc_media_player_set_position(mLibVLCMediaPlayer, normalized_offset); - } + if (mLibVLCMediaPlayer) + { + libvlc_time_t time = 1000.0 * message_in.getValueReal("time"); + libvlc_media_player_set_time(mLibVLCMediaPlayer, time); + time = libvlc_media_player_get_time(mLibVLCMediaPlayer); + if (time < 0) + { + // -1 if there is no media + mCurTime = 0; + } + else + { + mCurTime = (F64)time / 1000.0; + } + + if (!libvlc_media_player_is_playing(mLibVLCMediaPlayer)) + { + // if paused, won't trigger update, update now + setDirty(0, 0, mWidth, mHeight); + } + } } else if (message_name == "set_loop") { |