diff --git a/packages/video_player/CHANGELOG.md b/packages/video_player/CHANGELOG.md index 37a9433..6311ade 100644 --- a/packages/video_player/CHANGELOG.md +++ b/packages/video_player/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.3 +* Improve the error handling. +* Add the missing mutex. + ## 0.9.2 * Changed to send stream completed messages from main thread. diff --git a/packages/video_player/elinux/gst_video_player.cc b/packages/video_player/elinux/gst_video_player.cc index ecf57d1..eed8340 100644 --- a/packages/video_player/elinux/gst_video_player.cc +++ b/packages/video_player/elinux/gst_video_player.cc @@ -155,11 +155,16 @@ int64_t GstVideoPlayer::GetCurrentPosition() { // received from GStreamer cannot be processed directly in a callback // function. This is because the event channel message of playback complettion // needs to be thrown in the main thread. - if (is_completed_) { - is_completed_ = false; - stream_handler_->OnNotifyCompleted(); - if (auto_repeat_) { - SetSeek(0); + { + std::unique_lock lock(mutex_event_completed_); + if (is_completed_) { + is_completed_ = false; + lock.unlock(); + + stream_handler_->OnNotifyCompleted(); + if (auto_repeat_) { + SetSeek(0); + } } } @@ -382,6 +387,7 @@ GstBusSyncReply GstVideoPlayer::HandleGstMessage(GstBus* bus, switch (GST_MESSAGE_TYPE(message)) { case GST_MESSAGE_EOS: { auto* self = reinterpret_cast(user_data); + std::lock_guard lock(self->mutex_event_completed_); self->is_completed_ = true; break; } diff --git a/packages/video_player/elinux/gst_video_player.h b/packages/video_player/elinux/gst_video_player.h index 73a9ae2..d7fc41e 100644 --- a/packages/video_player/elinux/gst_video_player.h +++ b/packages/video_player/elinux/gst_video_player.h @@ -66,6 +66,7 @@ class GstVideoPlayer { bool mute_ = false; bool auto_repeat_ = false; bool is_completed_ = false; + std::mutex mutex_event_completed_; std::shared_mutex mutex_buffer_; std::unique_ptr stream_handler_; }; diff --git a/packages/video_player/pubspec.yaml b/packages/video_player/pubspec.yaml index b0d4418..3f7852e 100644 --- a/packages/video_player/pubspec.yaml +++ b/packages/video_player/pubspec.yaml @@ -1,6 +1,6 @@ name: video_player_elinux description: Flutter plugin for displaying inline video with other Flutter widgets on Embedded Linux. -version: 0.9.2 +version: 0.9.3 homepage: https://github.com/sony/flutter-elinux-plugins repository: https://github.com/sony/flutter-elinux-plugins/tree/main/packages/video_player/video_player