Skip to content

Commit

Permalink
[video_player] Disable screensaver when player is playing (flutter-ti…
Browse files Browse the repository at this point in the history
  • Loading branch information
hyue7 authored Sep 7, 2023
1 parent 8ed18ee commit 8e82fd6
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 2 deletions.
4 changes: 4 additions & 0 deletions packages/video_player/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 2.4.8

* Disable screensaver when player is playing.

## 2.4.7

* Update pigeon to 10.0.0.
Expand Down
2 changes: 1 addition & 1 deletion packages/video_player/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ This package is not an _endorsed_ implementation of `video_player`. Therefore, y
```yaml
dependencies:
video_player: ^2.4.2
video_player_tizen: ^2.4.7
video_player_tizen: ^2.4.8
```
Then you can import `video_player` in your Dart code:
Expand Down
2 changes: 1 addition & 1 deletion packages/video_player/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: video_player_tizen
description: Tizen implementation of the video_player plugin.
homepage: https://github.com/flutter-tizen/plugins
repository: https://github.com/flutter-tizen/plugins/tree/master/packages/video_player
version: 2.4.7
version: 2.4.8

environment:
sdk: ">=2.18.0 <4.0.0"
Expand Down
68 changes: 68 additions & 0 deletions packages/video_player/tizen/src/video_player.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include "video_player.h"

#include <dlfcn.h>
#include <flutter/event_stream_handler_functions.h>
#include <flutter/standard_method_codec.h>

Expand Down Expand Up @@ -78,6 +79,35 @@ FlutterDesktopGpuSurfaceDescriptor *VideoPlayer::ObtainGpuSurface(
return gpu_surface_.get();
}

void VideoPlayer::InitScreenSaverApi() {
screensaver_handle_ = dlopen("libcapi-screensaver.so", RTLD_LAZY);
if (!screensaver_handle_) {
LOG_ERROR("[VideoPlayer] dlopen failed: %s", dlerror());
return;
}

screensaver_reset_timeout_ = reinterpret_cast<ScreensaverResetTimeout>(
dlsym(screensaver_handle_, "screensaver_reset_timeout"));
if (!screensaver_reset_timeout_) {
LOG_ERROR("[VideoPlayer] Symbol not found: %s", dlerror());
return;
}

ScreensaverOverrideReset screensaver_override_reset =
reinterpret_cast<ScreensaverOverrideReset>(
dlsym(screensaver_handle_, "screensaver_override_reset"));
if (!screensaver_override_reset) {
LOG_ERROR("[VideoPlayer] Symbol not found: %s", dlerror());
return;
}

int ret = screensaver_override_reset(false);
if (ret != 0) {
LOG_ERROR("screensaver_override_reset failed: %s", get_error_message(ret));
return;
}
}

VideoPlayer::VideoPlayer(flutter::PluginRegistrar *plugin_registrar,
flutter::TextureRegistrar *texture_registrar,
const std::string &uri, VideoPlayerOptions &options) {
Expand Down Expand Up @@ -155,6 +185,9 @@ VideoPlayer::VideoPlayer(flutter::PluginRegistrar *plugin_registrar,
get_error_message(ret));
}

#ifdef TV_PROFILE
InitScreenSaverApi();
#endif
SetUpEventChannel(plugin_registrar->messenger());
}

Expand Down Expand Up @@ -188,6 +221,9 @@ void VideoPlayer::Play() {
if (ret != PLAYER_ERROR_NONE) {
throw VideoPlayerError("player_start failed", get_error_message(ret));
}
#ifdef TV_PROFILE
timer_ = ecore_timer_add(30, ResetScreensaverTimeout, this);
#endif
}

void VideoPlayer::Pause() {
Expand All @@ -206,6 +242,12 @@ void VideoPlayer::Pause() {
if (ret != PLAYER_ERROR_NONE) {
throw VideoPlayerError("player_pause failed", get_error_message(ret));
}

if (timer_) {
LOG_DEBUG("[VideoPlayer] Delete ecore timer.");
ecore_timer_del(timer_);
timer_ = nullptr;
}
}

void VideoPlayer::SetLooping(bool is_looping) {
Expand Down Expand Up @@ -285,6 +327,16 @@ void VideoPlayer::Dispose() {
texture_registrar_->UnregisterTexture(texture_id_, nullptr);
texture_registrar_ = nullptr;
}

if (screensaver_handle_) {
dlclose(screensaver_handle_);
screensaver_handle_ = nullptr;
}

if (timer_) {
ecore_timer_del(timer_);
timer_ = nullptr;
}
}

void VideoPlayer::SetUpEventChannel(flutter::BinaryMessenger *messenger) {
Expand Down Expand Up @@ -373,6 +425,22 @@ void VideoPlayer::SendInitialized() {
}
}

Eina_Bool VideoPlayer::ResetScreensaverTimeout(void *data) {
LOG_DEBUG("[VideoPlayer] Reset screen saver timeout.");

auto *player = static_cast<VideoPlayer *>(data);
if (!player->screensaver_reset_timeout_) {
return ECORE_CALLBACK_CANCEL;
}
int ret = player->screensaver_reset_timeout_();
if (ret != 0) {
LOG_ERROR("screensaver_reset_timeout failed: %s", get_error_message(ret));
return ECORE_CALLBACK_CANCEL;
}

return ECORE_CALLBACK_RENEW;
}

void VideoPlayer::OnPrepared(void *data) {
LOG_DEBUG("[VideoPlayer] Player prepared.");

Expand Down
10 changes: 10 additions & 0 deletions packages/video_player/tizen/src/video_player.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#ifndef FLUTTER_PLUGIN_VIDEO_PLAYER_H_
#define FLUTTER_PLUGIN_VIDEO_PLAYER_H_

#include <Ecore.h>
#include <flutter/encodable_value.h>
#include <flutter/event_channel.h>
#include <flutter/plugin_registrar.h>
Expand All @@ -19,6 +20,9 @@

#include "video_player_options.h"

typedef int (*ScreensaverResetTimeout)(void);
typedef int (*ScreensaverOverrideReset)(bool onoff);

class VideoPlayer {
public:
using SeekCompletedCallback = std::function<void()>;
Expand Down Expand Up @@ -46,6 +50,7 @@ class VideoPlayer {
void SetUpEventChannel(flutter::BinaryMessenger *messenger);
void Initialize();
void SendInitialized();
void InitScreenSaverApi();

static void OnPrepared(void *data);
static void OnBuffering(int percent, void *data);
Expand All @@ -55,6 +60,7 @@ class VideoPlayer {
static void OnError(int error_code, void *data);
static void OnVideoFrameDecoded(media_packet_h packet, void *data);
static void ReleaseMediaPacket(void *packet);
static Eina_Bool ResetScreensaverTimeout(void *data);

void RequestRendering();
void OnRenderingCompleted();
Expand All @@ -79,6 +85,10 @@ class VideoPlayer {
std::queue<media_packet_h> packet_queue_;

SeekCompletedCallback on_seek_completed_;

void *screensaver_handle_;
ScreensaverResetTimeout screensaver_reset_timeout_;
Ecore_Timer *timer_;
};

#endif // FLUTTER_PLUGIN_VIDEO_PLAYER_H_

0 comments on commit 8e82fd6

Please sign in to comment.