Skip to content

Commit 51dd319

Browse files
authored
[video_player] Fix seekTo so that it returns when seeking is completed (#256)
* [video_player] Fix seekTo is returned when seeking. * [video_player] Fix format issue. * [video_player] Fix the source as review result. * [video_player] Fix the format issue.
1 parent 6e62bff commit 51dd319

File tree

8 files changed

+47
-17
lines changed

8 files changed

+47
-17
lines changed

packages/video_player/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,7 @@
1818
## 2.2.1
1919

2020
* Update README
21+
22+
## 2.2.2
23+
24+
* Fix `seekTo` so that it returns when seeking is completed.

packages/video_player/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ This package is not an _endorsed_ implementation of `video_player`. Therefore, y
2727
```yaml
2828
dependencies:
2929
video_player: ^2.2.3
30-
video_player_tizen: ^2.2.1
30+
video_player_tizen: ^2.2.2
3131
```
3232
3333
Then you can import `video_player` in your Dart code:

packages/video_player/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description: Flutter plugin for displaying inline video with other Flutter
33
widgets on Tizen.
44
homepage: https://github.com/flutter-tizen/plugins
55
repository: https://github.com/flutter-tizen/plugins/tree/master/packages/video_player
6-
version: 2.2.1
6+
version: 2.2.2
77

88
flutter:
99
plugin:

packages/video_player/tizen/src/message.cc

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -517,16 +517,18 @@ void VideoPlayerApi::setup(flutter::BinaryMessenger *binaryMessenger,
517517
[api](const flutter::EncodableValue &message,
518518
flutter::MessageReply<flutter::EncodableValue> reply) {
519519
PositionMessage input = PositionMessage::fromMap(message);
520-
flutter::EncodableMap wrapped;
521520
try {
522-
api->seekTo(input);
523-
wrapped.emplace(flutter::EncodableValue("result"),
524-
flutter::EncodableValue());
521+
api->seekTo(input, [reply]() {
522+
flutter::EncodableMap wrapped = {
523+
{flutter::EncodableValue("result"),
524+
flutter::EncodableValue()}};
525+
reply(flutter::EncodableValue(wrapped));
526+
});
525527
} catch (const VideoPlayerError &e) {
526-
wrapped.emplace(flutter::EncodableValue("error"),
527-
VideoPlayerApi::wrapError(e));
528+
flutter::EncodableMap error = {{flutter::EncodableValue("error"),
529+
VideoPlayerApi::wrapError(e)}};
530+
reply(flutter::EncodableValue(error));
528531
}
529-
reply(flutter::EncodableValue(wrapped));
530532
});
531533
}
532534

packages/video_player/tizen/src/message.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ class MixWithOthersMessage {
139139
bool mixWithOthers_;
140140
};
141141

142+
using SeekCompletedCb = std::function<void()>;
143+
142144
class VideoPlayerApi {
143145
public:
144146
virtual void initialize() = 0;
@@ -150,7 +152,8 @@ class VideoPlayerApi {
150152
virtual void play(const TextureMessage &textureMsg) = 0;
151153
virtual void pause(const TextureMessage &textureMsg) = 0;
152154
virtual PositionMessage position(const TextureMessage &textureMsg) = 0;
153-
virtual void seekTo(const PositionMessage &positionMsg) = 0;
155+
virtual void seekTo(const PositionMessage &positionMsg,
156+
const SeekCompletedCb &onSeekCompleted) = 0;
154157
virtual void setMixWithOthers(
155158
const MixWithOthersMessage &mixWithOthersMsg) = 0;
156159

packages/video_player/tizen/src/video_player.cc

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,14 +261,18 @@ void VideoPlayer::setPlaybackSpeed(double speed) {
261261
}
262262
}
263263

264-
void VideoPlayer::seekTo(int position) {
264+
void VideoPlayer::seekTo(int position,
265+
const SeekCompletedCb &seek_completed_cb) {
265266
LOG_DEBUG("[VideoPlayer.seekTo] position: %d", position);
266-
int ret = player_set_play_position(player_, position, true, nullptr, nullptr);
267+
int ret =
268+
player_set_play_position(player_, position, true, onSeekCompleted, this);
267269
if (ret != PLAYER_ERROR_NONE) {
268270
LOG_ERROR("[VideoPlayer.seekTo] player_set_play_position failed: %s",
269271
get_error_message(ret));
270272
throw VideoPlayerError("player_set_play_position failed",
271273
get_error_message(ret));
274+
} else {
275+
on_seek_completed_ = seek_completed_cb;
272276
}
273277
}
274278

@@ -467,6 +471,16 @@ void VideoPlayer::onBuffering(int percent, void *data) {
467471
LOG_DEBUG("[VideoPlayer.onBuffering] percent: %d", percent);
468472
}
469473

474+
void VideoPlayer::onSeekCompleted(void *data) {
475+
VideoPlayer *player = (VideoPlayer *)data;
476+
LOG_DEBUG("[VideoPlayer.onSeekCompleted] completed to seek");
477+
478+
if (player->on_seek_completed_) {
479+
player->on_seek_completed_();
480+
player->on_seek_completed_ = nullptr;
481+
}
482+
}
483+
470484
void VideoPlayer::onPlayCompleted(void *data) {
471485
VideoPlayer *player = (VideoPlayer *)data;
472486
LOG_DEBUG("[VideoPlayer.onPlayCompleted] completed to playe video");

packages/video_player/tizen/src/video_player.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
#include "video_player_options.h"
1313

14+
using SeekCompletedCb = std::function<void()>;
15+
1416
class VideoPlayer {
1517
public:
1618
VideoPlayer(flutter::PluginRegistrar *plugin_registrar,
@@ -24,8 +26,9 @@ class VideoPlayer {
2426
void setLooping(bool is_looping);
2527
void setVolume(double volume);
2628
void setPlaybackSpeed(double speed);
27-
void seekTo(int position); // milliseconds
28-
int getPosition(); // milliseconds
29+
void seekTo(int position,
30+
const SeekCompletedCb &seek_completed_cb); // milliseconds
31+
int getPosition(); // milliseconds
2932
void dispose();
3033

3134
private:
@@ -40,6 +43,7 @@ class VideoPlayer {
4043

4144
static void onPrepared(void *data);
4245
static void onBuffering(int percent, void *data);
46+
static void onSeekCompleted(void *data);
4347
static void onPlayCompleted(void *data);
4448
static void onInterrupted(player_interrupted_code_e code, void *data);
4549
static void onErrorOccurred(int code, void *data);
@@ -56,6 +60,7 @@ class VideoPlayer {
5660
std::unique_ptr<FlutterDesktopGpuBuffer> flutter_desktop_gpu_buffer_;
5761
std::mutex mutex_;
5862
media_packet_h media_packet_ = nullptr;
63+
SeekCompletedCb on_seek_completed_;
5964
};
6065

6166
#endif // VIDEO_PLAYER_H_

packages/video_player/tizen/src/video_player_tizen_plugin.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ class VideoPlayerTizenPlugin : public flutter::Plugin, public VideoPlayerApi {
3232
virtual void play(const TextureMessage &textureMsg) override;
3333
virtual void pause(const TextureMessage &textureMsg) override;
3434
virtual PositionMessage position(const TextureMessage &textureMsg) override;
35-
virtual void seekTo(const PositionMessage &positionMsg) override;
35+
virtual void seekTo(const PositionMessage &positionMsg,
36+
const SeekCompletedCb &onSeekCompleted) override;
3637
virtual void setMixWithOthers(
3738
const MixWithOthersMessage &mixWithOthersMsg) override;
3839

@@ -199,15 +200,16 @@ PositionMessage VideoPlayerTizenPlugin::position(
199200
return result;
200201
}
201202

202-
void VideoPlayerTizenPlugin::seekTo(const PositionMessage &positionMsg) {
203+
void VideoPlayerTizenPlugin::seekTo(const PositionMessage &positionMsg,
204+
const SeekCompletedCb &onSeekCompleted) {
203205
LOG_DEBUG("[VideoPlayerTizenPlugin.seekTo] textureId: %ld",
204206
positionMsg.getTextureId());
205207
LOG_DEBUG("[VideoPlayerTizenPlugin.seekTo] position: %ld",
206208
positionMsg.getPosition());
207209

208210
auto iter = videoPlayers_.find(positionMsg.getTextureId());
209211
if (iter != videoPlayers_.end()) {
210-
iter->second->seekTo(positionMsg.getPosition());
212+
iter->second->seekTo(positionMsg.getPosition(), onSeekCompleted);
211213
}
212214
}
213215

0 commit comments

Comments
 (0)