From 575ee24a95dad771f2841789fac7a57cd279fa93 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Fri, 18 Sep 2026 16:32:56 +0900 Subject: [PATCH 1/2] [video_player_avplay] Use wrapper API Replace media, DRM and power proxies with ftpw calls in MediaPlayer and PlusPlayer. Link the wrapper and include its header and four native builds. Validated the existing host tests, four wrapper builds and ARM example TPK build, including the packaged wrapper and plugin linkage. --- packages/video_player_avplay/CHANGELOG.md | 1 + .../tizen/inc/ftpw_video_player_avplay.h | 125 ++++++++++ .../aarch64/libftpw_video_player_avplay.so | Bin 0 -> 15000 bytes .../lib/armel/libftpw_video_player_avplay.so | Bin 0 -> 9908 bytes .../lib/i586/libftpw_video_player_avplay.so | Bin 0 -> 14024 bytes .../lib/x86_64/libftpw_video_player_avplay.so | Bin 0 -> 19192 bytes .../tizen/project_def.prop | 3 + .../tizen/src/device_proxy.cc | 40 --- .../tizen/src/device_proxy.h | 27 -- .../tizen/src/drm_manager.cc | 37 ++- .../tizen/src/drm_manager_proxy.cc | 126 ---------- .../tizen/src/drm_manager_proxy.h | 145 ----------- .../tizen/src/media_player.cc | 36 ++- .../tizen/src/media_player.h | 6 +- .../tizen/src/media_player_proxy.cc | 231 ------------------ .../tizen/src/media_player_proxy.h | 140 ----------- .../tizen/src/plus_player.cc | 8 +- .../tizen/src/plus_player.h | 2 - 18 files changed, 167 insertions(+), 760 deletions(-) create mode 100644 packages/video_player_avplay/tizen/inc/ftpw_video_player_avplay.h create mode 100755 packages/video_player_avplay/tizen/lib/aarch64/libftpw_video_player_avplay.so create mode 100755 packages/video_player_avplay/tizen/lib/armel/libftpw_video_player_avplay.so create mode 100755 packages/video_player_avplay/tizen/lib/i586/libftpw_video_player_avplay.so create mode 100755 packages/video_player_avplay/tizen/lib/x86_64/libftpw_video_player_avplay.so delete mode 100644 packages/video_player_avplay/tizen/src/device_proxy.cc delete mode 100644 packages/video_player_avplay/tizen/src/device_proxy.h delete mode 100644 packages/video_player_avplay/tizen/src/drm_manager_proxy.cc delete mode 100644 packages/video_player_avplay/tizen/src/drm_manager_proxy.h delete mode 100644 packages/video_player_avplay/tizen/src/media_player_proxy.cc delete mode 100644 packages/video_player_avplay/tizen/src/media_player_proxy.h diff --git a/packages/video_player_avplay/CHANGELOG.md b/packages/video_player_avplay/CHANGELOG.md index e91c79e37..1e3b9a830 100644 --- a/packages/video_player_avplay/CHANGELOG.md +++ b/packages/video_player_avplay/CHANGELOG.md @@ -4,6 +4,7 @@ * Reformat with a line length of 100. * Replace Ecore pipes with GLib idle callbacks. * Apply clang-format-16 formatting. +* Use wrapper api. ## 0.8.18 diff --git a/packages/video_player_avplay/tizen/inc/ftpw_video_player_avplay.h b/packages/video_player_avplay/tizen/inc/ftpw_video_player_avplay.h new file mode 100644 index 000000000..a9108e224 --- /dev/null +++ b/packages/video_player_avplay/tizen/inc/ftpw_video_player_avplay.h @@ -0,0 +1,125 @@ +// Copyright 2026 Samsung Electronics Co., Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#ifndef FLUTTER_TIZEN_PLUGINS_WRAPPER_VIDEO_PLAYER_AVPLAY_H_ +#define FLUTTER_TIZEN_PLUGINS_WRAPPER_VIDEO_PLAYER_AVPLAY_H_ + +#include +#include + +#define MAX_STRING_NAME_LEN 255 +#define MMPLAYER_FOUR_CC_LEN 14 +#define PLAYER_LANG_NAME_SIZE 10 + +typedef struct { + char fourCC[MMPLAYER_FOUR_CC_LEN + 1]; /**< codec fourcc */ + char name[MAX_STRING_NAME_LEN]; /**< name: video/audio, it maybe not exit in + some track*/ + /*dynamic infos in hls,ss,dash streams*/ + int width; /**< resolution width */ + int height; /**< resolution height */ + int bit_rate; /**< bitrate in bps */ +} player_video_track_info_v2; + +typedef struct { + char fourCC[MMPLAYER_FOUR_CC_LEN + 1]; /**< codec fourcc */ + char language[PLAYER_LANG_NAME_SIZE]; /**< language info*/ + /*dynamic infos in hls,ss,dash streams*/ + int sample_rate; /**< sample rate in this track*/ + int channel; /**< channel in this track*/ + int bit_rate; /**< bitrate in this track*/ +} player_audio_track_info_v2; + +typedef struct { + char fourCC[MMPLAYER_FOUR_CC_LEN + 1]; /**< codec fourcc */ + char language[PLAYER_LANG_NAME_SIZE]; /**< language info*/ + int subtitle_type; /**< text subtitle = 0, picture subtitle = 1 */ +} player_subtitle_track_info_v2; + +typedef enum { + PLAYER_DRM_TYPE_EME = 14, +} player_drm_type_e; + +typedef enum { + PLAYER_ADAPTIVE_INFO_LIVE_DURATION = 3, + PLAYER_ADAPTIVE_INFO_IS_LIVE = 19, + PLAYER_ADAPTIVE_INFO_URL_CUSTOM = 23, +} player_adaptive_Info_e; + +typedef enum { + CENC = 0, + KEYIDS = 1, + WEBM = 2, +} drm_init_data_type; + +typedef bool (*security_init_complete_cb)(int *drmhandle, unsigned int length, + unsigned char *psshdata, + void *user_data); +typedef int (*set_drm_init_data_cb)(drm_init_data_type init_type, void *data, + int data_length, void *user_data); + +typedef enum { + DM_ERROR_NONE = 0, + DM_ERROR_INVALID_SESSION = 21, +} dm_error_e; + +typedef struct SetDataParam_s { + void *param1; /**< Parameter 1 */ + void *param2; /**< Parameter 2 */ + void *param3; /**< Parameter 3 */ + void *param4; /**< Parameter 4 */ +} SetDataParam_t; + +typedef void *DRMSessionHandle_t; + +#ifdef __cplusplus +extern "C" { +#endif + +// Native libraries remain loaded for the process lifetime (callbacks may +// outlive calls). + +int ftpw_video_player_avplay_player_set_ecore_wl_display(void *player, int type, + void *ecore_wl_window, + int x, int y, + int width, int height); +int ftpw_video_player_avplay_player_set_drm_handle(void *player, + player_drm_type_e drm_type, + int drm_handle); +int ftpw_video_player_avplay_player_set_drm_init_complete_cb( + void *player, security_init_complete_cb callback, void *user_data); +int ftpw_video_player_avplay_player_set_drm_init_data_cb( + void *player, set_drm_init_data_cb callback, void *user_data); +int ftpw_video_player_avplay_player_get_adaptive_streaming_info( + void *player, void *adaptive_info, int adaptive_type); +int ftpw_video_player_avplay_player_get_track_count_v2(void *player, int type, + int *pcount); +int ftpw_video_player_avplay_player_get_video_track_info_v2( + void *player, int index, player_video_track_info_v2 **track_info); +int ftpw_video_player_avplay_player_get_audio_track_info_v2( + void *player, int index, player_audio_track_info_v2 **track_info); +int ftpw_video_player_avplay_player_get_subtitle_track_info_v2( + void *player, int index, player_subtitle_track_info_v2 **track_info); +int ftpw_video_player_avplay_player_set_adaptive_streaming_info( + void *player, void *adaptive_info, int adaptive_type); +bool ftpw_video_player_avplay_device_power_is_standby(void); +int ftpw_video_player_avplay_DMGRSetData(DRMSessionHandle_t drm_session, + const char *data_type, + void *input_data); +int ftpw_video_player_avplay_DMGRGetData(DRMSessionHandle_t drm_session, + const char *data_type, + void *output_data); +void ftpw_video_player_avplay_DMGRSetDRMLocalMode(void); +DRMSessionHandle_t ftpw_video_player_avplay_DMGRCreateDRMSession( + const char *drm_sub_type); +bool ftpw_video_player_avplay_DMGRSecurityInitCompleteCB( + int *drm_handle, unsigned int len, unsigned char *pssh_data, + void *user_data); +int ftpw_video_player_avplay_DMGRReleaseDRMSession( + DRMSessionHandle_t drm_session); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/packages/video_player_avplay/tizen/lib/aarch64/libftpw_video_player_avplay.so b/packages/video_player_avplay/tizen/lib/aarch64/libftpw_video_player_avplay.so new file mode 100755 index 0000000000000000000000000000000000000000..61061d7af92503d5bb1efa239c3e6ae130413978 GIT binary patch literal 15000 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 HW?TOUdm1U= literal 0 HcmV?d00001 diff --git a/packages/video_player_avplay/tizen/lib/armel/libftpw_video_player_avplay.so b/packages/video_player_avplay/tizen/lib/armel/libftpw_video_player_avplay.so new file mode 100755 index 0000000000000000000000000000000000000000..78412ab6c08ff90c42f13134a5491b410cb4e18b GIT binary patch literal 9908 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 C<}t+p literal 0 HcmV?d00001 diff --git a/packages/video_player_avplay/tizen/project_def.prop b/packages/video_player_avplay/tizen/project_def.prop index d2e4125eb..1914b009a 100644 --- a/packages/video_player_avplay/tizen/project_def.prop +++ b/packages/video_player_avplay/tizen/project_def.prop @@ -27,3 +27,6 @@ USER_CPP_INC_FILES = USER_LIB_DIRS = lib/${BUILD_ARCH}/${API_VERSION} USER_LFLAGS = -Wl,-rpath='$$ORIGIN' USER_LIBS = stdc++ plusplayer-wrapper gstsubtitle_tvplus gstsubtitleparse_tvplus plusplayercore_tvplus tracksource_tvplus plusplayer_tvplus dashplusplayer_tvplus + +USER_LIB_DIRS += lib/${BUILD_ARCH} +USER_LIBS += ftpw_video_player_avplay diff --git a/packages/video_player_avplay/tizen/src/device_proxy.cc b/packages/video_player_avplay/tizen/src/device_proxy.cc deleted file mode 100644 index 53e686365..000000000 --- a/packages/video_player_avplay/tizen/src/device_proxy.cc +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2025 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "device_proxy.h" - -#include - -#include "log.h" - -typedef power_state_e (*FunDevicePowerGetState)(void); - -DeviceProxy::DeviceProxy() { - power_state_handle_ = dlopen("libdeviced.so.1", RTLD_LAZY); - if (power_state_handle_ == nullptr) { - LOG_ERROR("Failed to open libdeviced.so.1"); - } -} - -DeviceProxy::~DeviceProxy() { - if (power_state_handle_) { - dlclose(power_state_handle_); - power_state_handle_ = nullptr; - } -} - -power_state_e DeviceProxy::device_power_get_state(void) { - if (!power_state_handle_) { - LOG_ERROR("power_state_handle_ is invalid."); - return POWER_STATE_ERROR; - } - FunDevicePowerGetState device_power_get_state = - reinterpret_cast( - dlsym(power_state_handle_, "device_power_get_state")); - if (!device_power_get_state) { - LOG_ERROR("Failed to find device_power_get_state function."); - return POWER_STATE_ERROR; - } - return device_power_get_state(); -} diff --git a/packages/video_player_avplay/tizen/src/device_proxy.h b/packages/video_player_avplay/tizen/src/device_proxy.h deleted file mode 100644 index ee218b2da..000000000 --- a/packages/video_player_avplay/tizen/src/device_proxy.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2025 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_PLUGIN_DEVICE_PROXY_H_ -#define FLUTTER_PLUGIN_DEVICE_PROXY_H_ - -typedef enum { - POWER_STATE_NORMAL, /**< Normal state */ - POWER_STATE_PICTUREOFF, /**< Picture off state */ - POWER_STATE_STANDBY, /**< Background Standby state */ - POWER_STATE_OFF, /**< Cold Standby state */ - POWER_STATE_SUSPEND_STANDBY, /**< Suspend Standby state */ - POWER_STATE_ERROR /**< Error state */ -} power_state_e; - -class DeviceProxy { - public: - DeviceProxy(); - ~DeviceProxy(); - power_state_e device_power_get_state(void); - - private: - void* power_state_handle_ = nullptr; -}; - -#endif // FLUTTER_PLUGIN_DEVICE_PROXY_H_ diff --git a/packages/video_player_avplay/tizen/src/drm_manager.cc b/packages/video_player_avplay/tizen/src/drm_manager.cc index daa44d4ba..92f3d0117 100644 --- a/packages/video_player_avplay/tizen/src/drm_manager.cc +++ b/packages/video_player_avplay/tizen/src/drm_manager.cc @@ -8,7 +8,7 @@ #include #include "drm_license_helper.h" -#include "drm_manager_proxy.h" +#include "ftpw_video_player_avplay.h" #include "log.h" static std::string GetDrmSubType(int drm_type) { @@ -21,7 +21,7 @@ static std::string GetDrmSubType(int drm_type) { } } -DrmManager::DrmManager() : drm_type_(DM_TYPE_NONE) {} +DrmManager::DrmManager() : drm_type_(DRM_TYPE_NONE) {} DrmManager::~DrmManager() { ReleaseDrmSession(); @@ -33,14 +33,14 @@ DrmManager::~DrmManager() { bool DrmManager::CreateDrmSession(int drm_type, bool local_mode) { if (local_mode) { - DrmManagerProxy::GetInstance().DMGRSetDRMLocalMode(); + ftpw_video_player_avplay_DMGRSetDRMLocalMode(); } drm_type_ = drm_type; std::string sub_type = GetDrmSubType(drm_type); LOG_INFO("[DrmManager] drm type is %s", sub_type.c_str()); - drm_session_ = DrmManagerProxy::GetInstance().DMGRCreateDRMSession( - DM_TYPE_EME, sub_type.c_str()); + drm_session_ = + ftpw_video_player_avplay_DMGRCreateDRMSession(sub_type.c_str()); if (!drm_session_) { LOG_ERROR("[DrmManager] Fail to create drm session."); return false; @@ -51,7 +51,7 @@ bool DrmManager::CreateDrmSession(int drm_type, bool local_mode) { SetDataParam_t configure_param = {}; configure_param.param1 = reinterpret_cast(OnDrmManagerError); configure_param.param2 = drm_session_; - int ret = DrmManagerProxy::GetInstance().DMGRSetData( + int ret = ftpw_video_player_avplay_DMGRSetData( drm_session_, "error_event_callback", &configure_param); if (ret != DM_ERROR_NONE) { LOG_ERROR( @@ -88,15 +88,14 @@ void DrmManager::StopDrmSession() { SetDataParam_t challenge_data_param = {}; challenge_data_param.param1 = nullptr; challenge_data_param.param2 = nullptr; - int ret = DrmManagerProxy::GetInstance().DMGRSetData( + int ret = ftpw_video_player_avplay_DMGRSetData( drm_session_, "eme_request_key_callback", &challenge_data_param); if (ret != DM_ERROR_NONE) { LOG_ERROR("[DrmManager] Fail to unset eme_request_key_callback: %s", get_error_message(ret)); } - ret = DrmManagerProxy::GetInstance().DMGRSetData(drm_session_, "Finalize", - nullptr); + ret = ftpw_video_player_avplay_DMGRSetData(drm_session_, "Finalize", nullptr); if (ret != DM_ERROR_NONE) { LOG_ERROR("[DrmManager] Fail to set finalize to drm session: %s", @@ -110,7 +109,7 @@ void DrmManager::ReleaseDrmSession() { return; } - int ret = DrmManagerProxy::GetInstance().DMGRReleaseDRMSession(drm_session_); + int ret = ftpw_video_player_avplay_DMGRReleaseDRMSession(drm_session_); if (ret != DM_ERROR_NONE) { LOG_ERROR("[DrmManager] Fail to release drm session: %s", get_error_message(ret)); @@ -121,8 +120,8 @@ void DrmManager::ReleaseDrmSession() { bool DrmManager::GetDrmHandle(int *handle) { if (drm_session_) { *handle = 0; - int ret = DrmManagerProxy::GetInstance().DMGRGetData(drm_session_, - "drm_handle", handle); + int ret = ftpw_video_player_avplay_DMGRGetData(drm_session_, "drm_handle", + handle); if (ret != DM_ERROR_NONE) { LOG_ERROR("[DrmManager] Fail to get drm_handle from drm session: %s", get_error_message(ret)); @@ -145,7 +144,7 @@ int DrmManager::UpdatePsshData(const void *data, int length) { SetDataParam_t pssh_data_param = {}; pssh_data_param.param1 = const_cast(data); pssh_data_param.param2 = reinterpret_cast(length); - int ret = DrmManagerProxy::GetInstance().DMGRSetData( + int ret = ftpw_video_player_avplay_DMGRSetData( drm_session_, "update_pssh_data", &pssh_data_param); if (DM_ERROR_NONE != ret) { LOG_ERROR("[DrmManager] Fail to set update_pssh_data to drm session: %s", @@ -166,7 +165,7 @@ bool DrmManager::SecurityInitCompleteCB(int *drm_handle, unsigned int len, } security_param.param2 = drm_session_; - return DrmManagerProxy::GetInstance().DMGRSecurityInitCompleteCB( + return ftpw_video_player_avplay_DMGRSecurityInitCompleteCB( drm_handle, len, pssh_data, &security_param); } @@ -179,7 +178,7 @@ int DrmManager::SetChallenge(const std::string &media_url) { SetDataParam_t challenge_data_param = {}; challenge_data_param.param1 = reinterpret_cast(OnChallengeData); challenge_data_param.param2 = this; - int ret = DrmManagerProxy::GetInstance().DMGRSetData( + int ret = ftpw_video_player_avplay_DMGRSetData( drm_session_, "eme_request_key_callback", &challenge_data_param); if (ret != DM_ERROR_NONE) { LOG_ERROR( @@ -189,7 +188,7 @@ int DrmManager::SetChallenge(const std::string &media_url) { return ret; } - ret = DrmManagerProxy::GetInstance().DMGRSetData( + ret = ftpw_video_player_avplay_DMGRSetData( drm_session_, "set_playready_manifest", static_cast(const_cast(media_url.c_str()))); if (ret != DM_ERROR_NONE) { @@ -199,8 +198,8 @@ int DrmManager::SetChallenge(const std::string &media_url) { return ret; } - ret = DrmManagerProxy::GetInstance().DMGRSetData(drm_session_, "Initialize", - nullptr); + ret = + ftpw_video_player_avplay_DMGRSetData(drm_session_, "Initialize", nullptr); if (ret != DM_ERROR_NONE) { LOG_ERROR("[DrmManager] Fail to set initialize to drm session: %s", get_error_message(ret)); @@ -269,7 +268,7 @@ bool DrmManager::InstallKey(void *session_id, void *response_data, license_param.param1 = session_id; license_param.param2 = response_data; license_param.param3 = response_len; - int ret = DrmManagerProxy::GetInstance().DMGRSetData( + int ret = ftpw_video_player_avplay_DMGRSetData( drm_session_, "install_eme_key", &license_param); if (ret != DM_ERROR_NONE) { LOG_ERROR("[DrmManager] Fail to install eme key: %s", diff --git a/packages/video_player_avplay/tizen/src/drm_manager_proxy.cc b/packages/video_player_avplay/tizen/src/drm_manager_proxy.cc deleted file mode 100644 index 3caf75b86..000000000 --- a/packages/video_player_avplay/tizen/src/drm_manager_proxy.cc +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2022 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "drm_manager_proxy.h" - -#include - -#include "log.h" - -DrmManagerProxy::DrmManagerProxy() - : drm_manager_handle_(dlopen("libdrmmanager.so.0", RTLD_LAZY)) { - is_valid_ = Initialize(); -} - -bool DrmManagerProxy::Initialize() { - if (drm_manager_handle_ == nullptr) { - LOG_ERROR("Fail to open drm manager."); - return false; - } - - dmgr_set_data_ = reinterpret_cast( - dlsym(drm_manager_handle_, "DMGRSetData")); - if (dmgr_set_data_ == nullptr) { - LOG_ERROR("Fail to find DMGRSetData."); - return false; - } - - dmgr_get_data_ = reinterpret_cast( - dlsym(drm_manager_handle_, "DMGRGetData")); - if (dmgr_get_data_ == nullptr) { - LOG_ERROR("Fail to find DMGRGetData."); - return false; - } - - dmgr_set_drm_local_mode_ = reinterpret_cast( - dlsym(drm_manager_handle_, "DMGRSetDRMLocalMode")); - if (dmgr_set_drm_local_mode_ == nullptr) { - LOG_ERROR("Fail to find DMGRSetDRMLocalMode."); - return false; - } - - dmgr_create_drm_session_ = reinterpret_cast( - dlsym(drm_manager_handle_, "DMGRCreateDRMSession")); - if (dmgr_create_drm_session_ == nullptr) { - LOG_ERROR("Fail to find DMGRCreateDRMSession."); - return false; - } - - dmgr_security_init_complete_cb_ = - reinterpret_cast( - dlsym(drm_manager_handle_, "DMGRSecurityInitCompleteCB")); - if (dmgr_security_init_complete_cb_ == nullptr) { - LOG_ERROR("Fail to find DMGRSecurityInitCompleteCB."); - return false; - } - - dmgr_release_drm_session_ = reinterpret_cast( - dlsym(drm_manager_handle_, "DMGRReleaseDRMSession")); - if (dmgr_release_drm_session_ == nullptr) { - LOG_ERROR("Fail to find DMGRReleaseDRMSession."); - return false; - } - return true; -} - -int DrmManagerProxy::DMGRSetData(DRMSessionHandle_t drm_session, - const char* data_type, void* input_data) { - if (!is_valid_) { - LOG_ERROR("Fail to obtain address of DMGRSetData."); - return DM_ERROR_DL; - } - return dmgr_set_data_(drm_session, data_type, input_data); -} - -int DrmManagerProxy::DMGRGetData(DRMSessionHandle_t drm_session, - const char* data_type, void* output_data) { - if (!is_valid_) { - LOG_ERROR("Fail to obtain address of DMGRGetData."); - return DM_ERROR_DL; - } - return dmgr_get_data_(drm_session, data_type, output_data); -} - -void DrmManagerProxy::DMGRSetDRMLocalMode() { - if (!is_valid_) { - LOG_ERROR("Fail to obtain address of DMGRSetDRMLocalMode."); - return; - } - dmgr_set_drm_local_mode_(); -} - -DRMSessionHandle_t DrmManagerProxy::DMGRCreateDRMSession( - dm_type_e type, const char* drm_sub_type) { - if (!is_valid_) { - LOG_ERROR("Fail to obtain address of DMGRCreateDRMSession."); - return nullptr; - } - return dmgr_create_drm_session_(type, drm_sub_type); -} - -bool DrmManagerProxy::DMGRSecurityInitCompleteCB(int* drm_handle, - unsigned int len, - unsigned char* pssh_data, - void* user_data) { - if (!is_valid_) { - LOG_ERROR("Fail to obtain address of DMGRSecurityInitCompleteCB."); - return false; - } - return dmgr_security_init_complete_cb_(drm_handle, len, pssh_data, user_data); -} - -int DrmManagerProxy::DMGRReleaseDRMSession(DRMSessionHandle_t drm_session) { - if (!is_valid_) { - LOG_ERROR("Fail to obtain address of DMGRReleaseDRMSession."); - return DM_ERROR_DL; - } - return dmgr_release_drm_session_(drm_session); -} - -DrmManagerProxy::~DrmManagerProxy() { - if (drm_manager_handle_) { - dlclose(drm_manager_handle_); - drm_manager_handle_ = nullptr; - } -} diff --git a/packages/video_player_avplay/tizen/src/drm_manager_proxy.h b/packages/video_player_avplay/tizen/src/drm_manager_proxy.h deleted file mode 100644 index 078ce9f84..000000000 --- a/packages/video_player_avplay/tizen/src/drm_manager_proxy.h +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2022 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_PLUGIN_DRM_MANAGER_PROXY_H_ -#define FLUTTER_PLUGIN_DRM_MANAGER_PROXY_H_ - -typedef enum { - DM_ERROR_NONE = 0, /**< Success */ - DM_ERROR_INVALID_PARAM, /**< Invalid parameter */ - DM_ERROR_INVALID_OPERATE, /**< Invalid operation */ - DM_ERROR_INVALID_HANDLE, /**< Invalid handle */ - DM_ERROR_INTERNAL_ERROR, /**< Internal error */ - DM_ERROR_TIMEOUT, /**< Timeout */ - DM_ERROR_MANIFEST_DOWNLOAD_ERROR, /**< Manifest download error */ - DM_ERROR_MANIFEST_PARSE_ERROR, /**< Manifest parse error */ - DM_ERROR_FIND_NOPSSHDATA, /**< No pssh data */ - - DM_ERROR_MALLOC = 10, /**< Malloc error */ - DM_ERROR_DL, /**< Load so error */ - - DM_ERROR_INVALID_URL = 20, /**< Invalid url */ - DM_ERROR_INVALID_SESSION, /**< Invalid session */ - DM_ERROR_UNSUPPORTED_URL_SUFFIX, /**< Unsupported url suffix */ - DM_ERROR_INITIALIZE_FAILED, /**< Failed to initialize DRM */ - - DM_ERROR_DASH_INIT = 30, /**< DASH init failed */ - DM_ERROR_DASH_CLOSE, /**< DASH close failed */ - DM_ERROR_DASH_OPEN, /**< DASH open failed */ - - DM_ERROR_DRM_WEB_SET = 40, /**< DRM web set failed */ - - DM_ERROR_PR_HANDLE_CREATE = 50, /**< Playready handle create failed */ - DM_ERROR_PR_OPEN, /**< Playready open failed */ - DM_ERROR_PR_DESTROY, /**< Playready destroy failed */ - DM_ERROR_PR_GENCHALLENGE, /**< Playready genchallenge failed */ - DM_ERROR_PR_INSTALL_LICENSE, /**< Playready install license failed */ - DM_ERROR_PR_GETRIGHTS, /**< Playready get rights failed */ - DM_ERROR_PR_STATUS, /**< Playready get status failed */ - - DM_ERROR_VMX_HANDLE_CREATE = 60, /**< Verimatrix handle create failed */ - DM_ERROR_VMX_FINALIZE, /**< Verimatrix finalize failed */ - DM_ERROR_VMX_GET_UNIQUE_ID, /**< Verimatrix get unique ID failed */ - - DM_ERROR_MARLIN_OPEN = 70, /**< Marlin open failed */ - DM_ERROR_MARLIN_CLOSE, /**< Marlin close failed */ - DM_ERROR_MARLIN_GET_RIGHTS, /**< Marlin get rights failed */ - DM_ERROR_MARLIN_GET_LICENSE, /**< Marlin get license failed */ - - DM_ERROR_WVCDM_HANDLE_CREATE = 80, /**< Widevinecdm handle create failed */ - DM_ERROR_WVCDM_DESTROY, /**< Widevinecdm destroy failed */ - DM_ERROR_WVCDM_OPEN_SESSION, /**< Widevinecdm open failed */ - DM_ERROR_WVCDM_CLOSE_SESSION, /**< Widevinecdm close failed */ - DM_ERROR_WVCDM_GET_PROVISION, /**< Widevinecdm get provision failed */ - DM_ERROR_WVCDM_GENERATE_KEYREQUEST, /**< Widevinecdm generate key request - failed */ - DM_ERROR_WVCDM_ADD_KEY, /**< Widevinecdm add key failed */ - DM_ERROR_WVCDM_REGISTER_EVENT, /**< Widevinecdm register event failed */ - - DM_ERROR_EME_SESSION_HANDLE_CREATE = 90, /**< EME handle create failed */ - DM_ERROR_EME_SESSION_CREATE, /**< EME session create failed */ - DM_ERROR_EME_SESSION_DESTROY, /**< EME session destroy failed */ - DM_ERROR_EME_SESSION_UPDATE, /**< EME session update failed */ - DM_ERROR_EME_SESSION_REQUEST, /**< EME session request failed */ - DM_ERROR_EME_WEB_OPERATION, /**< EME web operation failed */ - DM_ERROR_EME_TYPE_NOT_SUPPORTED, /**< EME type not supported */ - //... - DM_ERROR_UNKOWN, -} dm_error_e; - -typedef enum { - DM_TYPE_NONE = 0, /**< None */ - DM_TYPE_PLAYREADY = 1, /**< Playready */ - DM_TYPE_MARLINMS3 = 2, /**< Marlinms3 */ - DM_TYPE_VERIMATRIX = 3, /**< Verimatrix */ - DM_TYPE_WIDEVINE_CLASSIC = 4, /**< Widevine classic */ - DM_TYPE_SECUREMEDIA = 5, /**< Securemedia */ - DM_TYPE_SDRM = 6, /**< SDRM */ - DM_TYPE_VUDU = 7, /**< Vudu */ - DM_TYPE_WIDEVINE = 8, /**< Widevine cdm */ - DM_TYPE_LYNK = 9, /**< Lynk */ - DM_TYPE_CLEARKEY = 13, /**< Clearkey */ - DM_TYPE_EME = 14, /**< EME */ - //... - DM_TYPE_MAX, -} dm_type_e; - -typedef struct SetDataParam_s { - void* param1; /**< Parameter 1 */ - void* param2; /**< Parameter 2 */ - void* param3; /**< Parameter 3 */ - void* param4; /**< Parameter 4 */ -} SetDataParam_t; - -typedef void* DRMSessionHandle_t; - -typedef int (*FuncDMGRSetData)(DRMSessionHandle_t drm_session, - const char* data_type, void* input_data); -typedef int (*FuncDMGRGetData)(DRMSessionHandle_t drm_session, - const char* data_type, void* output_data); -typedef void (*FuncDMGRSetDRMLocalMode)(); -typedef DRMSessionHandle_t (*FuncDMGRCreateDRMSession)( - dm_type_e type, const char* drm_sub_type); -typedef bool (*FuncDMGRSecurityInitCompleteCB)(int* drm_handle, - unsigned int len, - unsigned char* pssh_data, - void* user_data); -typedef int (*FuncDMGRReleaseDRMSession)(DRMSessionHandle_t drm_session); - -class DrmManagerProxy { - public: - static DrmManagerProxy& GetInstance() { - static DrmManagerProxy instance; - return instance; - } - DrmManagerProxy(const DrmManagerProxy&) = delete; - DrmManagerProxy(const DrmManagerProxy&&) = delete; - DrmManagerProxy& operator=(const DrmManagerProxy&) = delete; - - int DMGRSetData(DRMSessionHandle_t drm_session, const char* data_type, - void* input_data); - int DMGRGetData(DRMSessionHandle_t drm_session, const char* data_type, - void* output_data); - void DMGRSetDRMLocalMode(); - DRMSessionHandle_t DMGRCreateDRMSession(dm_type_e type, - const char* drm_sub_type); - bool DMGRSecurityInitCompleteCB(int* drm_handle, unsigned int len, - unsigned char* pssh_data, void* user_data); - int DMGRReleaseDRMSession(DRMSessionHandle_t drm_session); - - private: - DrmManagerProxy(); - ~DrmManagerProxy(); - bool Initialize(); - void* drm_manager_handle_ = nullptr; - FuncDMGRSetData dmgr_set_data_ = nullptr; - FuncDMGRGetData dmgr_get_data_ = nullptr; - FuncDMGRSetDRMLocalMode dmgr_set_drm_local_mode_ = nullptr; - FuncDMGRCreateDRMSession dmgr_create_drm_session_ = nullptr; - FuncDMGRSecurityInitCompleteCB dmgr_security_init_complete_cb_ = nullptr; - FuncDMGRReleaseDRMSession dmgr_release_drm_session_ = nullptr; - bool is_valid_ = false; -}; - -#endif // FLUTTER_PLUGIN_DRM_MANAGER_PROXY_H_ diff --git a/packages/video_player_avplay/tizen/src/media_player.cc b/packages/video_player_avplay/tizen/src/media_player.cc index bd11f7536..f7690a1bf 100644 --- a/packages/video_player_avplay/tizen/src/media_player.cc +++ b/packages/video_player_avplay/tizen/src/media_player.cc @@ -4,8 +4,6 @@ #include "media_player.h" -#include - #include #include "log.h" @@ -51,10 +49,7 @@ static player_stream_type_e ConvertTrackType(std::string track_type) { MediaPlayer::MediaPlayer(flutter::BinaryMessenger *messenger, FlutterDesktopViewRef flutter_view) - : VideoPlayer(messenger, flutter_view) { - media_player_proxy_ = std::make_unique(); - device_proxy_ = std::make_unique(); -} + : VideoPlayer(messenger, flutter_view) {} MediaPlayer::~MediaPlayer() { if (player_) { @@ -114,7 +109,7 @@ int64_t MediaPlayer::Create(const std::string &uri, std::string adaptive_info = flutter_common::GetValue( create_message.streaming_property(), "ADAPTIVE_INFO", std::string()); if (!adaptive_info.empty()) { - media_player_proxy_->player_set_adaptive_streaming_info( + ftpw_video_player_avplay_player_set_adaptive_streaming_info( player_, const_cast( reinterpret_cast(adaptive_info.c_str())), @@ -331,7 +326,7 @@ int64_t MediaPlayer::GetPosition() { bool MediaPlayer::IsLive() { int is_live = 0; - int ret = media_player_proxy_->player_get_adaptive_streaming_info( + int ret = ftpw_video_player_avplay_player_get_adaptive_streaming_info( player_, &is_live, PLAYER_ADAPTIVE_INFO_IS_LIVE); if (ret != PLAYER_ERROR_NONE) { LOG_ERROR("[MediaPlayer] player_get_adaptive_streaming_info failed: %s", @@ -345,7 +340,7 @@ std::pair MediaPlayer::GetLiveDuration() { std::string live_duration_str = ""; char *live_duration_buff = static_cast(malloc(sizeof(char) * 64)); memset(live_duration_buff, 0, sizeof(char) * 64); - int ret = media_player_proxy_->player_get_adaptive_streaming_info( + int ret = ftpw_video_player_avplay_player_get_adaptive_streaming_info( player_, (void *)&live_duration_buff, PLAYER_ADAPTIVE_INFO_LIVE_DURATION); if (ret != PLAYER_ERROR_NONE) { LOG_ERROR("[MediaPlayer] player_get_adaptive_streaming_info failed: %s", @@ -443,7 +438,7 @@ bool MediaPlayer::SetDisplay(const flutter::EncodableMap *window_geometry) { return false; } - int ret = media_player_proxy_->player_set_ecore_wl_display( + int ret = ftpw_video_player_avplay_player_set_ecore_wl_display( player_, PLAYER_DISPLAY_TYPE_OVERLAY, native_window, x, y, width, height); if (ret != PLAYER_ERROR_NONE) { LOG_ERROR("[MediaPlayer] player_set_ecore_wl_display failed: %s.", @@ -475,8 +470,8 @@ flutter::EncodableList MediaPlayer::GetTrackInfo(std::string track_type) { player_stream_type_e type = ConvertTrackType(track_type); int track_count = 0; - ret = media_player_proxy_->player_get_track_count_v2(player_, type, - &track_count); + ret = ftpw_video_player_avplay_player_get_track_count_v2(player_, type, + &track_count); if (ret != PLAYER_ERROR_NONE) { LOG_ERROR("[MediaPlayer] player_get_track_count_v2 failed: %s", get_error_message(ret)); @@ -496,7 +491,7 @@ flutter::EncodableList MediaPlayer::GetTrackInfo(std::string track_type) { for (int video_index = 0; video_index < track_count; video_index++) { player_video_track_info_v2 *video_track_info = nullptr; - ret = media_player_proxy_->player_get_video_track_info_v2( + ret = ftpw_video_player_avplay_player_get_video_track_info_v2( player_, video_index, &video_track_info); if (ret != PLAYER_ERROR_NONE) { LOG_ERROR("[MediaPlayer] player_get_video_track_info_v2 failed: %s", @@ -530,7 +525,7 @@ flutter::EncodableList MediaPlayer::GetTrackInfo(std::string track_type) { for (int audio_index = 0; audio_index < track_count; audio_index++) { player_audio_track_info_v2 *audio_track_info = nullptr; - ret = media_player_proxy_->player_get_audio_track_info_v2( + ret = ftpw_video_player_avplay_player_get_audio_track_info_v2( player_, audio_index, &audio_track_info); if (ret != PLAYER_ERROR_NONE) { LOG_ERROR("[MediaPlayer] player_get_audio_track_info_v2 failed: %s", @@ -564,7 +559,7 @@ flutter::EncodableList MediaPlayer::GetTrackInfo(std::string track_type) { for (int sub_index = 0; sub_index < track_count; sub_index++) { player_subtitle_track_info_v2 *sub_track_info = nullptr; - ret = media_player_proxy_->player_get_subtitle_track_info_v2( + ret = ftpw_video_player_avplay_player_get_subtitle_track_info_v2( player_, sub_index, &sub_track_info); if (ret != PLAYER_ERROR_NONE) { LOG_ERROR("[MediaPlayer] player_get_subtitle_track_info_v2 failed: %s", @@ -627,7 +622,7 @@ bool MediaPlayer::SetDrm(const std::string &uri, int drm_type, return false; } - int ret = media_player_proxy_->player_set_drm_handle( + int ret = ftpw_video_player_avplay_player_set_drm_handle( player_, PLAYER_DRM_TYPE_EME, drm_handle); if (ret != PLAYER_ERROR_NONE) { LOG_ERROR("[MediaPlayer] player_set_drm_handle failed : %s.", @@ -635,7 +630,7 @@ bool MediaPlayer::SetDrm(const std::string &uri, int drm_type, return false; } - ret = media_player_proxy_->player_set_drm_init_complete_cb( + ret = ftpw_video_player_avplay_player_set_drm_init_complete_cb( player_, OnDrmSecurityInitComplete, this); if (ret != PLAYER_ERROR_NONE) { LOG_ERROR("[MediaPlayer] player_set_drm_init_complete_cb failed : %s.", @@ -643,7 +638,7 @@ bool MediaPlayer::SetDrm(const std::string &uri, int drm_type, return false; } - ret = media_player_proxy_->player_set_drm_init_data_cb( + ret = ftpw_video_player_avplay_player_set_drm_init_data_cb( player_, OnDrmUpdatePsshData, this); if (ret != PLAYER_ERROR_NONE) { LOG_ERROR("[MediaPlayer] player_set_drm_init_complete_cb failed : %s.", @@ -866,8 +861,7 @@ bool MediaPlayer::Suspend() { "[MediaPlayer] Saved current player state: %d, playing time: %llu ms", pre_state_, pre_playing_time_); - res = device_proxy_->device_power_get_state(); - if (res == POWER_STATE_STANDBY) { + if (ftpw_video_player_avplay_device_power_is_standby()) { LOG_INFO("[MediaPlayer] Power state is standby."); if (!StopAndDestroy()) { LOG_ERROR("[MediaPlayer] Player StopAndDestroy fail."); @@ -876,7 +870,7 @@ bool MediaPlayer::Suspend() { LOG_INFO("[MediaPlayer] Standby state: close done successfully."); return true; } else { - LOG_INFO("[MediaPlayer] Player state is not standby: %d, do nothing.", res); + LOG_INFO("[MediaPlayer] Power state is not standby."); } if (player_state == PLAYER_STATE_IDLE) { diff --git a/packages/video_player_avplay/tizen/src/media_player.h b/packages/video_player_avplay/tizen/src/media_player.h index a7d4a71d6..85fcd2cd7 100644 --- a/packages/video_player_avplay/tizen/src/media_player.h +++ b/packages/video_player_avplay/tizen/src/media_player.h @@ -6,14 +6,14 @@ #define FLUTTER_PLUGIN_MEDIA_PLAYER_H_ #include +#include #include #include #include -#include "device_proxy.h" #include "drm_manager.h" -#include "media_player_proxy.h" +#include "ftpw_video_player_avplay.h" #include "video_player.h" namespace video_player_avplay_tizen { @@ -73,8 +73,6 @@ class MediaPlayer : public VideoPlayer { int data_length, void *user_data); player_h player_ = nullptr; - std::unique_ptr media_player_proxy_ = nullptr; - std::unique_ptr device_proxy_ = nullptr; std::unique_ptr drm_manager_; bool is_buffering_ = false; SeekCompletedCallback on_seek_completed_; diff --git a/packages/video_player_avplay/tizen/src/media_player_proxy.cc b/packages/video_player_avplay/tizen/src/media_player_proxy.cc deleted file mode 100644 index 1a2ed94dc..000000000 --- a/packages/video_player_avplay/tizen/src/media_player_proxy.cc +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright 2023 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "media_player_proxy.h" - -#include - -#include "log.h" - -typedef int (*FuncPlayerSetEcoreWlDisplay)(player_h player, - player_display_type_e type, - void* ecore_wl_window, int x, int y, - int width, int height); - -typedef int (*FuncPlayerSetDrmHandle)(player_h player, - player_drm_type_e drm_type, - int drm_handle); - -typedef int (*FuncPlayerSetDrmInitCompleteCB)( - player_h player, security_init_complete_cb callback, void* user_data); - -typedef int (*FuncPlayerSetDrmInitDataCB)(player_h player, - set_drm_init_data_cb callback, - void* user_data); - -typedef int (*FuncPlayerGetAdaptiveStreamingInfo)(player_h player, - void* adaptive_info, - int adaptive_type); - -typedef int (*FuncPlayerGetTrackCountV2)(player_h player, - player_stream_type_e type, - int* pcount); - -typedef int (*FuncPlayerGetVideoTrackInfoV2)( - player_h player, int index, player_video_track_info_v2** track_info); - -typedef int (*FuncPlayerGetAudioTrackInfoV2)( - player_h player, int index, player_audio_track_info_v2** track_info); - -typedef int (*FuncPlayerGetSubtitleTrackInfoV2)( - player_h player, int index, player_subtitle_track_info_v2** track_info); - -typedef int (*FuncPlayerSetAdaptiveStreamingInfo)(player_h player, - void* adaptive_info, - int adaptive_type); - -MediaPlayerProxy::MediaPlayerProxy() { - media_player_handle_ = dlopen("libcapi-media-player.so.0", RTLD_LAZY); - if (media_player_handle_ == nullptr) { - LOG_ERROR("Failed to open media player."); - } -} - -MediaPlayerProxy::~MediaPlayerProxy() { - if (media_player_handle_) { - dlclose(media_player_handle_); - media_player_handle_ = nullptr; - } -} - -int MediaPlayerProxy::player_set_ecore_wl_display(player_h player, - player_display_type_e type, - void* ecore_wl_window, int x, - int y, int width, - int height) { - if (!media_player_handle_) { - LOG_ERROR("media_player_handle_ not valid"); - return PLAYER_ERROR_NOT_AVAILABLE; - } - FuncPlayerSetEcoreWlDisplay player_set_ecore_wl_display = - reinterpret_cast( - dlsym(media_player_handle_, "player_set_ecore_wl_display")); - if (!player_set_ecore_wl_display) { - LOG_ERROR("Fail to find player_set_ecore_wl_display."); - return PLAYER_ERROR_NOT_AVAILABLE; - } - return player_set_ecore_wl_display(player, type, ecore_wl_window, x, y, width, - height); -} - -int MediaPlayerProxy::player_set_drm_handle(player_h player, - player_drm_type_e drm_type, - int drm_handle) { - if (!media_player_handle_) { - LOG_ERROR("media_player_handle_ not valid"); - return PLAYER_ERROR_NOT_AVAILABLE; - } - FuncPlayerSetDrmHandle player_set_drm_handle = - reinterpret_cast( - dlsym(media_player_handle_, "player_set_drm_handle")); - if (!player_set_drm_handle) { - LOG_ERROR("Fail to find player_set_ecore_wl_display."); - return PLAYER_ERROR_NOT_AVAILABLE; - } - return player_set_drm_handle(player, drm_type, drm_handle); -} - -int MediaPlayerProxy::player_set_drm_init_complete_cb( - player_h player, security_init_complete_cb callback, void* user_data) { - if (!media_player_handle_) { - LOG_ERROR("media_player_handle_ not valid"); - return PLAYER_ERROR_NOT_AVAILABLE; - } - FuncPlayerSetDrmInitCompleteCB player_set_drm_init_complete_cb = - reinterpret_cast( - dlsym(media_player_handle_, "player_set_drm_init_complete_cb")); - if (!player_set_drm_init_complete_cb) { - LOG_ERROR("Fail to find player_set_drm_init_complete_cb."); - return PLAYER_ERROR_NOT_AVAILABLE; - } - return player_set_drm_init_complete_cb(player, callback, user_data); -} - -int MediaPlayerProxy::player_set_drm_init_data_cb(player_h player, - set_drm_init_data_cb callback, - void* user_data) { - if (!media_player_handle_) { - LOG_ERROR("media_player_handle_ not valid"); - return PLAYER_ERROR_NOT_AVAILABLE; - } - FuncPlayerSetDrmInitDataCB player_set_drm_init_data_cb = - reinterpret_cast( - dlsym(media_player_handle_, "player_set_drm_init_data_cb")); - if (!player_set_drm_init_data_cb) { - LOG_ERROR("Fail to find player_set_drm_init_data_cb."); - return PLAYER_ERROR_NOT_AVAILABLE; - } - return player_set_drm_init_data_cb(player, callback, user_data); -} - -int MediaPlayerProxy::player_get_adaptive_streaming_info(player_h player, - void* adaptive_info, - int adaptive_type) { - if (!media_player_handle_) { - LOG_ERROR("media_player_handle_ not valid"); - return PLAYER_ERROR_NOT_AVAILABLE; - } - FuncPlayerGetAdaptiveStreamingInfo player_get_adaptive_streaming_info = - reinterpret_cast( - dlsym(media_player_handle_, "player_get_adaptive_streaming_info")); - if (!player_get_adaptive_streaming_info) { - LOG_ERROR("Fail to find player_get_adaptive_streaming_info."); - return PLAYER_ERROR_NOT_AVAILABLE; - } - return player_get_adaptive_streaming_info(player, adaptive_info, - adaptive_type); -} - -int MediaPlayerProxy::player_get_track_count_v2(player_h player, - player_stream_type_e type, - int* pcount) { - if (!media_player_handle_) { - LOG_ERROR("media_player_handle_ not valid"); - return PLAYER_ERROR_NOT_AVAILABLE; - } - FuncPlayerGetTrackCountV2 player_get_track_count_v2 = - reinterpret_cast( - dlsym(media_player_handle_, "player_get_track_count_v2")); - if (!player_get_track_count_v2) { - LOG_ERROR("Fail to find player_get_track_count_v2."); - return PLAYER_ERROR_NOT_AVAILABLE; - } - return player_get_track_count_v2(player, type, pcount); -} - -int MediaPlayerProxy::player_get_video_track_info_v2( - player_h player, int index, player_video_track_info_v2** track_info) { - if (!media_player_handle_) { - LOG_ERROR("media_player_handle_ not valid"); - return PLAYER_ERROR_NOT_AVAILABLE; - } - FuncPlayerGetVideoTrackInfoV2 player_get_video_track_info_v2 = - reinterpret_cast( - dlsym(media_player_handle_, "player_get_video_track_info_v2")); - if (!player_get_video_track_info_v2) { - LOG_ERROR("Fail to find player_get_video_track_info_v2."); - return PLAYER_ERROR_NOT_AVAILABLE; - } - return player_get_video_track_info_v2(player, index, track_info); -} - -int MediaPlayerProxy::player_get_audio_track_info_v2( - player_h player, int index, player_audio_track_info_v2** track_info) { - if (!media_player_handle_) { - LOG_ERROR("media_player_handle_ not valid"); - return PLAYER_ERROR_NOT_AVAILABLE; - } - FuncPlayerGetAudioTrackInfoV2 player_get_audio_track_info_v2 = - reinterpret_cast( - dlsym(media_player_handle_, "player_get_audio_track_info_v2")); - if (!player_get_audio_track_info_v2) { - LOG_ERROR("Fail to find player_get_audio_track_info_v2."); - return PLAYER_ERROR_NOT_AVAILABLE; - } - return player_get_audio_track_info_v2(player, index, track_info); -} - -int MediaPlayerProxy::player_get_subtitle_track_info_v2( - player_h player, int index, player_subtitle_track_info_v2** track_info) { - if (!media_player_handle_) { - LOG_ERROR("media_player_handle_ not valid"); - return PLAYER_ERROR_NOT_AVAILABLE; - } - FuncPlayerGetSubtitleTrackInfoV2 player_get_subtitle_track_info_v2 = - reinterpret_cast( - dlsym(media_player_handle_, "player_get_subtitle_track_info_v2")); - if (!player_get_subtitle_track_info_v2) { - LOG_ERROR("Fail to find player_get_subtitle_track_info_v2."); - return PLAYER_ERROR_NOT_AVAILABLE; - } - return player_get_subtitle_track_info_v2(player, index, track_info); -} - -int MediaPlayerProxy::player_set_adaptive_streaming_info(player_h player, - void* adaptive_info, - int adaptive_type) { - if (!media_player_handle_) { - LOG_ERROR("media_player_handle_ not valid"); - return PLAYER_ERROR_NOT_AVAILABLE; - } - FuncPlayerSetAdaptiveStreamingInfo player_set_adaptive_streaming_info = - reinterpret_cast( - dlsym(media_player_handle_, "player_set_adaptive_streaming_info")); - if (!player_set_adaptive_streaming_info) { - LOG_ERROR("Fail to find player_set_adaptive_streaming_info."); - return PLAYER_ERROR_NOT_AVAILABLE; - } - return player_set_adaptive_streaming_info(player, adaptive_info, - adaptive_type); -} diff --git a/packages/video_player_avplay/tizen/src/media_player_proxy.h b/packages/video_player_avplay/tizen/src/media_player_proxy.h deleted file mode 100644 index 2d21921db..000000000 --- a/packages/video_player_avplay/tizen/src/media_player_proxy.h +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2023 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_PLUGIN_MEDIA_PLAYER_PROXY_H_ -#define FLUTTER_PLUGIN_MEDIA_PLAYER_PROXY_H_ - -#include - -#define MAX_STRING_NAME_LEN 255 -#define MMPLAYER_FOUR_CC_LEN 14 -#define PLAYER_LANG_NAME_SIZE 10 - -typedef struct { - char fourCC[MMPLAYER_FOUR_CC_LEN + 1]; /**< codec fourcc */ - char name[MAX_STRING_NAME_LEN]; /**< name: video/audio, it maybe not exit in - some track*/ - /*dynamic infos in hls,ss,dash streams*/ - int width; /**< resolution width */ - int height; /**< resolution height */ - int bit_rate; /**< bitrate in bps */ -} player_video_track_info_v2; - -typedef struct { - char fourCC[MMPLAYER_FOUR_CC_LEN + 1]; /**< codec fourcc */ - char language[PLAYER_LANG_NAME_SIZE]; /**< language info*/ - /*dynamic infos in hls,ss,dash streams*/ - int sample_rate; /**< sample rate in this track*/ - int channel; /**< channel in this track*/ - int bit_rate; /**< bitrate in this track*/ -} player_audio_track_info_v2; - -typedef struct { - char fourCC[MMPLAYER_FOUR_CC_LEN + 1]; /**< codec fourcc */ - char language[PLAYER_LANG_NAME_SIZE]; /**< language info*/ - int subtitle_type; /**< text subtitle = 0, picture subtitle = 1 */ -} player_subtitle_track_info_v2; - -typedef enum { - PLAYER_DRM_TYPE_NONE = 0, - PLAYER_DRM_TYPE_PLAYREADY, - PLAYER_DRM_TYPE_MARLIN, - PLAYER_DRM_TYPE_VERIMATRIX, - PLAYER_DRM_TYPE_WIDEVINE_CLASSIC, - PLAYER_DRM_TYPE_SECUREMEDIA, - PLAYER_DRM_TYPE_SDRM, - PLAYER_DRM_TYPE_VUDU, - PLAYER_DRM_TYPE_WIDEVINE_CDM, - PLAYER_DRM_TYPE_AES128, - PLAYER_DRM_TYPE_HDCP, - PLAYER_DRM_TYPE_DTCP, - PLAYER_DRM_TYPE_SCSA, - PLAYER_DRM_TYPE_CLEARKEY, - PLAYER_DRM_TYPE_EME, - PLAYER_DRM_TYPE_MAX_COUNT, -} player_drm_type_e; - -typedef enum { - PLAYER_ADAPTIVE_INFO_BITRATE_INIT, - PLAYER_ADAPTIVE_INFO_BITRATE_INIT_NUM, - PLAYER_ADAPTIVE_INFO_DURATION, - PLAYER_ADAPTIVE_INFO_LIVE_DURATION, - PLAYER_ADAPTIVE_INFO_AVAILABLE_BITRATES, - PLAYER_ADAPTIVE_INFO_RATE_RETURNED, - PLAYER_ADAPTIVE_INFO_CURRENT_BITRATE, - PLAYER_ADAPTIVE_INFO_GET_BUFFER_SIZE, - PLAYER_ADAPTIVE_INFO_FIXED_BITRATE, - PLAYER_ADAPTIVE_INFO_ADAPTIVE_BITRATE, - PLAYER_ADAPTIVE_INFO_MAX_BYTES, - PLAYER_ADAPTIVE_INFO_DRM_TYPE, - PLAYER_ADAPTIVE_INFO_RATE_REQUESTED, - PLAYER_ADAPTIVE_INFO_AUDIO_TRACK_REQUESTED, - PLAYER_ADAPTIVE_INFO_FORMAT, - PLAYER_ADAPTIVE_INFO_BLOCK, - PLAYER_ADAPTIVE_INFO_MIN_PERCENT, - PLAYER_ADAPTIVE_INFO_MIN_LATENCY, - PLAYER_ADAPTIVE_INFO_MAX_LATENCY, - PLAYER_ADAPTIVE_INFO_IS_LIVE, - PLAYER_ADAPTIVE_INFO_EMIT_SIGNAL, - PLAYER_ADAPTIVE_INFO_LOG_LEVEL, - PLAYER_ADAPTIVE_INFO_CURRENT_BANDWIDTH, - PLAYER_ADAPTIVE_INFO_URL_CUSTOM, - PLAYER_ADAPTIVE_INFO_GET_AUDIO_INFO, - PLAYER_ADAPTIVE_INFO_GET_VIDEO_INFO, - PLAYER_ADAPTIVE_INFO_GET_TEXT_INFO, - PLAYER_ADAPTIVE_INFO_RESUME_TIME, - PLAYER_ADAPTIVE_INFO_AUDIO_INDEX, - PLAYER_ADAPTIVE_INFO_PROXY_SETTING, - PLAYER_ADAPTIVE_INFO_ATSC3_L1_SERVER_TIME, - PLAYER_ADAPTIVE_INFO_VIDEO_FRAMES_DROPPED, - PLAYER_ADAPTIVE_INFO_STREAMING_IS_BUFFERING, - PLAYER_ADAPTIVE_INFO_PRESELECTION_ID, - PLAYER_ADAPTIVE_INFO_URI_TYPE -} player_adaptive_Info_e; - -typedef enum { - CENC = 0, - KEYIDS = 1, - WEBM = 2, -} drm_init_data_type; - -typedef bool (*security_init_complete_cb)(int* drmhandle, unsigned int length, - unsigned char* psshdata, - void* user_data); -typedef int (*set_drm_init_data_cb)(drm_init_data_type init_type, void* data, - int data_length, void* user_data); - -class MediaPlayerProxy { - public: - MediaPlayerProxy(); - ~MediaPlayerProxy(); - int player_set_ecore_wl_display(player_h player, player_display_type_e type, - void* ecore_wl_window, int x, int y, - int width, int height); - int player_set_drm_handle(player_h player, player_drm_type_e drm_type, - int drm_handle); - int player_set_drm_init_complete_cb(player_h player, - security_init_complete_cb callback, - void* user_data); - int player_set_drm_init_data_cb(player_h player, - set_drm_init_data_cb callback, - void* user_data); - int player_get_adaptive_streaming_info(player_h player, void* adaptive_info, - int adaptive_type); - int player_get_track_count_v2(player_h player, player_stream_type_e type, - int* pcount); - int player_get_video_track_info_v2(player_h player, int index, - player_video_track_info_v2** track_info); - int player_get_audio_track_info_v2(player_h player, int index, - player_audio_track_info_v2** track_info); - int player_get_subtitle_track_info_v2( - player_h player, int index, player_subtitle_track_info_v2** track_info); - int player_set_adaptive_streaming_info(player_h player, void* adaptive_info, - int adaptive_type); - - private: - void* media_player_handle_ = nullptr; -}; - -#endif // FLUTTER_PLUGIN_MEDIA_PLAYER_PROXY_H_ diff --git a/packages/video_player_avplay/tizen/src/plus_player.cc b/packages/video_player_avplay/tizen/src/plus_player.cc index 931c0ec80..8f5e0f716 100644 --- a/packages/video_player_avplay/tizen/src/plus_player.cc +++ b/packages/video_player_avplay/tizen/src/plus_player.cc @@ -10,6 +10,7 @@ #include +#include "ftpw_video_player_avplay.h" #include "log.h" #include "rapidjson/document.h" #include "rapidjson/stringbuffer.h" @@ -67,7 +68,6 @@ PlusPlayer::PlusPlayer(flutter::BinaryMessenger *messenger, FlutterDesktopViewRef flutter_view) : VideoPlayer(messenger, flutter_view) { memento_ = std::make_unique(); - device_proxy_ = std::make_unique(); } PlusPlayer::~PlusPlayer() { @@ -881,8 +881,7 @@ bool PlusPlayer::Suspend() { return true; } - int power_state = device_proxy_->device_power_get_state(); - if (power_state == POWER_STATE_STANDBY) { + if (ftpw_video_player_avplay_device_power_is_standby()) { LOG_INFO("[PlusPlayer] Power state is standby."); if (!StopAndClose()) { LOG_ERROR("[PlusPlayer] Player need to stop and close, but failed."); @@ -891,8 +890,7 @@ bool PlusPlayer::Suspend() { LOG_INFO("[PlusPlayer] Standby state: close done successfully."); return true; } else { - LOG_INFO("[PlusPlayer] Player state is not standby: %d, do nothing.", - power_state); + LOG_INFO("[PlusPlayer] Power state is not standby."); } plusplayer::State player_state = GetState(player_); diff --git a/packages/video_player_avplay/tizen/src/plus_player.h b/packages/video_player_avplay/tizen/src/plus_player.h index a510c1334..bc110bbc6 100644 --- a/packages/video_player_avplay/tizen/src/plus_player.h +++ b/packages/video_player_avplay/tizen/src/plus_player.h @@ -10,7 +10,6 @@ #include #include -#include "device_proxy.h" #include "drm_manager.h" #include "messages.h" #include "plusplayer/plusplayer_wrapper.h" @@ -111,7 +110,6 @@ class PlusPlayer : public VideoPlayer { SeekCompletedCallback on_seek_completed_; std::unique_ptr memento_ = nullptr; std::string url_; - std::unique_ptr device_proxy_ = nullptr; CreateMessage create_message_; }; From 09542aee7596c9064ff0a2ab8601aea244f7d6a1 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Tue, 22 Sep 2026 10:50:53 +0900 Subject: [PATCH 2/2] style: annotate wrapper header guard endings --- .../video_player_avplay/tizen/inc/ftpw_video_player_avplay.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/video_player_avplay/tizen/inc/ftpw_video_player_avplay.h b/packages/video_player_avplay/tizen/inc/ftpw_video_player_avplay.h index a9108e224..6a0ef2e62 100644 --- a/packages/video_player_avplay/tizen/inc/ftpw_video_player_avplay.h +++ b/packages/video_player_avplay/tizen/inc/ftpw_video_player_avplay.h @@ -122,4 +122,4 @@ int ftpw_video_player_avplay_DMGRReleaseDRMSession( } #endif -#endif +#endif // FLUTTER_TIZEN_PLUGINS_WRAPPER_VIDEO_PLAYER_AVPLAY_H_