From 8c4e83946b8d82f7e1c181186dc5b088ae6a5ef8 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Fri, 18 Sep 2026 15:05:42 +0900 Subject: [PATCH] [video_player_videohole] use wrapper API --- .../tizen/inc/ftpw_video_player_videohole.h | 121 +++++++++++ .../aarch64/libftpw_video_player_videohole.so | Bin 0 -> 14968 bytes .../armel/libftpw_video_player_videohole.so | Bin 0 -> 9892 bytes .../i586/libftpw_video_player_videohole.so | Bin 0 -> 14008 bytes .../x86_64/libftpw_video_player_videohole.so | Bin 0 -> 19160 bytes .../tizen/project_def.prop | 3 + .../tizen/src/device_proxy.cc | 40 ---- .../tizen/src/device_proxy.h | 27 --- .../tizen/src/drm_manager.cc | 69 +++--- .../tizen/src/drm_manager.h | 3 - .../tizen/src/drm_manager_proxy.cc | 64 ------ .../tizen/src/drm_manager_proxy.h | 121 ----------- .../tizen/src/media_player.cc | 33 ++- .../tizen/src/media_player.h | 6 +- .../tizen/src/media_player_proxy.cc | 204 ------------------ .../tizen/src/media_player_proxy.h | 138 ------------ 16 files changed, 167 insertions(+), 662 deletions(-) create mode 100644 packages/video_player_videohole/tizen/inc/ftpw_video_player_videohole.h create mode 100755 packages/video_player_videohole/tizen/lib/aarch64/libftpw_video_player_videohole.so create mode 100755 packages/video_player_videohole/tizen/lib/armel/libftpw_video_player_videohole.so create mode 100755 packages/video_player_videohole/tizen/lib/i586/libftpw_video_player_videohole.so create mode 100755 packages/video_player_videohole/tizen/lib/x86_64/libftpw_video_player_videohole.so delete mode 100644 packages/video_player_videohole/tizen/src/device_proxy.cc delete mode 100644 packages/video_player_videohole/tizen/src/device_proxy.h delete mode 100644 packages/video_player_videohole/tizen/src/drm_manager_proxy.cc delete mode 100644 packages/video_player_videohole/tizen/src/drm_manager_proxy.h delete mode 100644 packages/video_player_videohole/tizen/src/media_player_proxy.cc delete mode 100644 packages/video_player_videohole/tizen/src/media_player_proxy.h diff --git a/packages/video_player_videohole/tizen/inc/ftpw_video_player_videohole.h b/packages/video_player_videohole/tizen/inc/ftpw_video_player_videohole.h new file mode 100644 index 000000000..63f0ee808 --- /dev/null +++ b/packages/video_player_videohole/tizen/inc/ftpw_video_player_videohole.h @@ -0,0 +1,121 @@ +// 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_VIDEOHOLE_H_ +#define FLUTTER_TIZEN_PLUGINS_WRAPPER_VIDEO_PLAYER_VIDEOHOLE_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_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_videohole_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_videohole_player_set_drm_handle( + void *player, player_drm_type_e drm_type, int drm_handle); +int ftpw_video_player_videohole_player_set_drm_init_complete_cb( + void *player, security_init_complete_cb callback, void *user_data); +int ftpw_video_player_videohole_player_set_drm_init_data_cb( + void *player, set_drm_init_data_cb callback, void *user_data); +int ftpw_video_player_videohole_player_get_adaptive_streaming_info( + void *player, void *adaptive_info, int adaptive_type); +int ftpw_video_player_videohole_player_get_track_count_v2(void *player, + int type, + int *pcount); +int ftpw_video_player_videohole_player_get_video_track_info_v2( + void *player, int index, player_video_track_info_v2 **track_info); +int ftpw_video_player_videohole_player_get_audio_track_info_v2( + void *player, int index, player_audio_track_info_v2 **track_info); +int ftpw_video_player_videohole_player_get_subtitle_track_info_v2( + void *player, int index, player_subtitle_track_info_v2 **track_info); +bool ftpw_video_player_videohole_device_power_is_standby(void); +int ftpw_video_player_videohole_DMGRSetData(DRMSessionHandle_t drm_session, + const char *data_type, + void *input_data); +int ftpw_video_player_videohole_DMGRGetData(DRMSessionHandle_t drm_session, + const char *data_type, + void *output_data); +void ftpw_video_player_videohole_DMGRSetDRMLocalMode(void); +DRMSessionHandle_t ftpw_video_player_videohole_DMGRCreateDRMSession( + const char *drm_sub_type); +bool ftpw_video_player_videohole_DMGRSecurityInitCompleteCB( + int *drm_handle, unsigned int len, unsigned char *pssh_data, + void *user_data); +int ftpw_video_player_videohole_DMGRReleaseDRMSession( + DRMSessionHandle_t drm_session); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/packages/video_player_videohole/tizen/lib/aarch64/libftpw_video_player_videohole.so b/packages/video_player_videohole/tizen/lib/aarch64/libftpw_video_player_videohole.so new file mode 100755 index 0000000000000000000000000000000000000000..efff221826f60deb17cb84b460ac701200a62cd0 GIT binary patch literal 14968 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 Y^t&BpcCzEy*J_u)jd-KB0<>fNKf@NRzyJUM literal 0 HcmV?d00001 diff --git a/packages/video_player_videohole/tizen/lib/i586/libftpw_video_player_videohole.so b/packages/video_player_videohole/tizen/lib/i586/libftpw_video_player_videohole.so new file mode 100755 index 0000000000000000000000000000000000000000..e6560853f4989bd352443859ed1ae64be84cc78d GIT binary patch literal 14008 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 - -#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_videohole/tizen/src/device_proxy.h b/packages/video_player_videohole/tizen/src/device_proxy.h deleted file mode 100644 index ee218b2da..000000000 --- a/packages/video_player_videohole/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_videohole/tizen/src/drm_manager.cc b/packages/video_player_videohole/tizen/src/drm_manager.cc index 56af62eac..1fbb37d6a 100644 --- a/packages/video_player_videohole/tizen/src/drm_manager.cc +++ b/packages/video_player_videohole/tizen/src/drm_manager.cc @@ -8,7 +8,7 @@ #include #include "drm_license_helper.h" -#include "drm_manager_proxy.h" +#include "ftpw_video_player_videohole.h" #include "log.h" static std::string GetDrmSubType(int drm_type) { @@ -21,20 +21,7 @@ static std::string GetDrmSubType(int drm_type) { } } -DrmManager::DrmManager() : drm_type_(DM_TYPE_NONE) { - drm_manager_proxy_ = OpenDrmManagerProxy(); - if (drm_manager_proxy_) { - int ret = InitDrmManagerProxy(drm_manager_proxy_); - if (ret != DM_ERROR_NONE) { - LOG_ERROR("[DrmManager] Fail to initialize DRM manager: %s", - get_error_message(ret)); - CloseDrmManagerProxy(drm_manager_proxy_); - drm_manager_proxy_ = nullptr; - } - } else { - LOG_ERROR("[DrmManager] Fail to dlopen libdrmmanager."); - } - +DrmManager::DrmManager() : drm_type_(DRM_TYPE_NONE) { // Initialize GMainContext and license request state main_context_ = std::unique_ptr( g_main_context_ref_thread_default()); @@ -58,27 +45,18 @@ DrmManager::~DrmManager() { } main_context_.reset(); - - if (drm_manager_proxy_) { - CloseDrmManagerProxy(drm_manager_proxy_); - drm_manager_proxy_ = nullptr; - } } bool DrmManager::CreateDrmSession(int drm_type, bool local_mode) { - if (!drm_manager_proxy_) { - LOG_ERROR("[DrmManager] Invalid handle of libdrmmanager."); - return false; - } - if (local_mode) { - DMGRSetDRMLocalMode(); + ftpw_video_player_videohole_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_ = DMGRCreateDRMSession(DM_TYPE_EME, sub_type.c_str()); + drm_session_ = ftpw_video_player_videohole_DMGRCreateDRMSession( + sub_type.c_str()); if (!drm_session_) { LOG_ERROR("[DrmManager] Fail to create drm session."); return false; @@ -89,7 +67,8 @@ 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 = DMGRSetData(drm_session_, "error_event_callback", &configure_param); + int ret = ftpw_video_player_videohole_DMGRSetData( + drm_session_, "error_event_callback", &configure_param); if (ret != DM_ERROR_NONE) { LOG_ERROR( "[DrmManager] Fail to set error_event_callback to drm session: %s", @@ -125,14 +104,15 @@ void DrmManager::StopDrmSession() { SetDataParam_t challenge_data_param = {}; challenge_data_param.param1 = nullptr; challenge_data_param.param2 = nullptr; - int ret = DMGRSetData(drm_session_, "eme_request_key_callback", - &challenge_data_param); + int ret = ftpw_video_player_videohole_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 = DMGRSetData(drm_session_, "Finalize", nullptr); + ret = ftpw_video_player_videohole_DMGRSetData(drm_session_, "Finalize", + nullptr); if (ret != DM_ERROR_NONE) { LOG_ERROR("[DrmManager] Fail to set finalize to drm session: %s", @@ -146,7 +126,7 @@ void DrmManager::ReleaseDrmSession() { return; } - int ret = DMGRReleaseDRMSession(drm_session_); + int ret = ftpw_video_player_videohole_DMGRReleaseDRMSession(drm_session_); if (ret != DM_ERROR_NONE) { LOG_ERROR("[DrmManager] Fail to release drm session: %s", get_error_message(ret)); @@ -157,7 +137,8 @@ void DrmManager::ReleaseDrmSession() { bool DrmManager::GetDrmHandle(int *handle) { if (drm_session_) { *handle = 0; - int ret = DMGRGetData(drm_session_, "drm_handle", handle); + int ret = ftpw_video_player_videohole_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)); @@ -180,7 +161,8 @@ 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 = DMGRSetData(drm_session_, "update_pssh_data", &pssh_data_param); + int ret = ftpw_video_player_videohole_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", get_error_message(ret)); @@ -200,8 +182,8 @@ bool DrmManager::SecurityInitCompleteCB(int *drm_handle, unsigned int len, } security_param.param2 = drm_session_; - return DMGRSecurityInitCompleteCB(drm_handle, len, pssh_data, - &security_param); + return ftpw_video_player_videohole_DMGRSecurityInitCompleteCB( + drm_handle, len, pssh_data, &security_param); } int DrmManager::SetChallenge(const std::string &media_url) { @@ -213,8 +195,8 @@ 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 = DMGRSetData(drm_session_, "eme_request_key_callback", - &challenge_data_param); + int ret = ftpw_video_player_videohole_DMGRSetData( + drm_session_, "eme_request_key_callback", &challenge_data_param); if (ret != DM_ERROR_NONE) { LOG_ERROR( "[DrmManager] Fail to set eme_request_key_callback to drm session: " @@ -223,8 +205,9 @@ int DrmManager::SetChallenge(const std::string &media_url) { return ret; } - ret = DMGRSetData(drm_session_, "set_playready_manifest", - static_cast(const_cast(media_url.c_str()))); + ret = ftpw_video_player_videohole_DMGRSetData( + drm_session_, "set_playready_manifest", + static_cast(const_cast(media_url.c_str()))); if (ret != DM_ERROR_NONE) { LOG_ERROR( "[DrmManager] Fail to set set_playready_manifest to drm session: %s", @@ -232,7 +215,8 @@ int DrmManager::SetChallenge(const std::string &media_url) { return ret; } - ret = DMGRSetData(drm_session_, "Initialize", nullptr); + ret = ftpw_video_player_videohole_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)); @@ -299,7 +283,8 @@ void 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 = DMGRSetData(drm_session_, "install_eme_key", &license_param); + int ret = ftpw_video_player_videohole_DMGRSetData( + drm_session_, "install_eme_key", &license_param); if (ret != DM_ERROR_NONE) { LOG_ERROR("[DrmManager] Fail to install eme key: %s", get_error_message(ret)); diff --git a/packages/video_player_videohole/tizen/src/drm_manager.h b/packages/video_player_videohole/tizen/src/drm_manager.h index 5881e54b6..f129b1699 100644 --- a/packages/video_player_videohole/tizen/src/drm_manager.h +++ b/packages/video_player_videohole/tizen/src/drm_manager.h @@ -11,8 +11,6 @@ #include #include -#include "drm_manager_proxy.h" - class DrmManager { public: typedef enum { @@ -61,7 +59,6 @@ class DrmManager { request_license_channel_; void *drm_session_ = nullptr; - void *drm_manager_proxy_ = nullptr; int drm_type_; std::string license_server_url_; diff --git a/packages/video_player_videohole/tizen/src/drm_manager_proxy.cc b/packages/video_player_videohole/tizen/src/drm_manager_proxy.cc deleted file mode 100644 index 5a59c9c14..000000000 --- a/packages/video_player_videohole/tizen/src/drm_manager_proxy.cc +++ /dev/null @@ -1,64 +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 - -FuncDMGRSetData DMGRSetData = nullptr; -FuncDMGRGetData DMGRGetData = nullptr; -FuncDMGRSetDRMLocalMode DMGRSetDRMLocalMode = nullptr; -FuncDMGRCreateDRMSession DMGRCreateDRMSession = nullptr; -FuncDMGRSecurityInitCompleteCB DMGRSecurityInitCompleteCB = nullptr; -FuncDMGRReleaseDRMSession DMGRReleaseDRMSession = nullptr; - -void* OpenDrmManagerProxy() { return dlopen("libdrmmanager.so.0", RTLD_LAZY); } - -int InitDrmManagerProxy(void* handle) { - if (!handle) { - return DM_ERROR_INVALID_PARAM; - } - - DMGRSetData = reinterpret_cast(dlsym(handle, "DMGRSetData")); - if (!DMGRSetData) { - return DM_ERROR_DL; - } - - DMGRGetData = reinterpret_cast(dlsym(handle, "DMGRGetData")); - if (!DMGRGetData) { - return DM_ERROR_DL; - } - - DMGRSetDRMLocalMode = reinterpret_cast( - dlsym(handle, "DMGRSetDRMLocalMode")); - if (!DMGRSetDRMLocalMode) { - return DM_ERROR_DL; - } - - DMGRCreateDRMSession = reinterpret_cast( - dlsym(handle, "DMGRCreateDRMSession")); - if (!DMGRCreateDRMSession) { - return DM_ERROR_DL; - } - - DMGRSecurityInitCompleteCB = reinterpret_cast( - dlsym(handle, "DMGRSecurityInitCompleteCB")); - if (!DMGRSecurityInitCompleteCB) { - return DM_ERROR_DL; - } - - DMGRReleaseDRMSession = reinterpret_cast( - dlsym(handle, "DMGRReleaseDRMSession")); - if (!DMGRReleaseDRMSession) { - return DM_ERROR_DL; - } - - return DM_ERROR_NONE; -} - -void CloseDrmManagerProxy(void* handle) { - if (handle) { - dlclose(handle); - } -} diff --git a/packages/video_player_videohole/tizen/src/drm_manager_proxy.h b/packages/video_player_videohole/tizen/src/drm_manager_proxy.h deleted file mode 100644 index 02261d1b1..000000000 --- a/packages/video_player_videohole/tizen/src/drm_manager_proxy.h +++ /dev/null @@ -1,121 +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); - -void* OpenDrmManagerProxy(); -int InitDrmManagerProxy(void* handle); -void CloseDrmManagerProxy(void* handle); - -extern FuncDMGRSetData DMGRSetData; -extern FuncDMGRGetData DMGRGetData; -extern FuncDMGRSetDRMLocalMode DMGRSetDRMLocalMode; -extern FuncDMGRCreateDRMSession DMGRCreateDRMSession; -extern FuncDMGRSecurityInitCompleteCB DMGRSecurityInitCompleteCB; -extern FuncDMGRReleaseDRMSession DMGRReleaseDRMSession; - -#endif // FLUTTER_PLUGIN_DRM_MANAGER_PROXY_H_ diff --git a/packages/video_player_videohole/tizen/src/media_player.cc b/packages/video_player_videohole/tizen/src/media_player.cc index 4736afad4..a1d5c4cc2 100644 --- a/packages/video_player_videohole/tizen/src/media_player.cc +++ b/packages/video_player_videohole/tizen/src/media_player.cc @@ -4,7 +4,6 @@ #include "media_player.h" -#include #include #include @@ -42,10 +41,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() { Dispose(); } @@ -434,7 +430,7 @@ bool MediaPlayer::SetDisplay() { "[MediaPlayer] Window geometry: x[%d], y[%d], width[%d], height[%d].", x, y, width, height); - int ret = media_player_proxy_->player_set_ecore_wl_display( + int ret = ftpw_video_player_videohole_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.", @@ -453,7 +449,7 @@ bool MediaPlayer::SetDisplay() { bool MediaPlayer::IsLive() { int is_live = 0; - int ret = media_player_proxy_->player_get_adaptive_streaming_info( + int ret = ftpw_video_player_videohole_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", @@ -478,7 +474,7 @@ std::pair MediaPlayer::GetLiveDuration() { 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_videohole_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", @@ -512,8 +508,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_videohole_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)); @@ -535,7 +531,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_videohole_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", @@ -569,7 +565,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_videohole_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", @@ -603,7 +599,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_videohole_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", @@ -666,7 +662,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_videohole_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.", @@ -674,7 +670,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_videohole_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.", @@ -682,7 +678,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_videohole_player_set_drm_init_data_cb( player_, OnDrmUpdatePsshData, this); if (ret != PLAYER_ERROR_NONE) { LOG_ERROR("[MediaPlayer] player_set_drm_init_data_cb failed : %s.", @@ -793,8 +789,7 @@ bool MediaPlayer::Suspend() { return true; } - res = device_proxy_->device_power_get_state(); - if (res == POWER_STATE_STANDBY) { + if (ftpw_video_player_videohole_device_power_is_standby()) { LOG_INFO("[MediaPlayer] Power state is standby."); if (!StopAndDestroy()) { LOG_ERROR("[MediaPlayer] Player StopAndDestroy fail."); @@ -803,7 +798,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 || player_state == PLAYER_STATE_READY) { diff --git a/packages/video_player_videohole/tizen/src/media_player.h b/packages/video_player_videohole/tizen/src/media_player.h index 379592d0d..31dad0b1c 100644 --- a/packages/video_player_videohole/tizen/src/media_player.h +++ b/packages/video_player_videohole/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_videohole.h" #include "video_player.h" namespace video_player_videohole_tizen { @@ -73,12 +73,10 @@ class MediaPlayer : public VideoPlayer { int data_length, void *user_data); player_h player_ = nullptr; - std::unique_ptr media_player_proxy_ = nullptr; std::unique_ptr drm_manager_; bool is_buffering_ = false; SeekCompletedCallback on_seek_completed_; bool is_seeking_ = false; - std::unique_ptr device_proxy_ = nullptr; std::string url_; CreateMessage create_message_; player_state_e pre_state_; diff --git a/packages/video_player_videohole/tizen/src/media_player_proxy.cc b/packages/video_player_videohole/tizen/src/media_player_proxy.cc deleted file mode 100644 index a6927b8c8..000000000 --- a/packages/video_player_videohole/tizen/src/media_player_proxy.cc +++ /dev/null @@ -1,204 +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); - -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); -} diff --git a/packages/video_player_videohole/tizen/src/media_player_proxy.h b/packages/video_player_videohole/tizen/src/media_player_proxy.h deleted file mode 100644 index 1229a42b4..000000000 --- a/packages/video_player_videohole/tizen/src/media_player_proxy.h +++ /dev/null @@ -1,138 +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); - - private: - void* media_player_handle_ = nullptr; -}; - -#endif // FLUTTER_PLUGIN_MEDIA_PLAYER_PROXY_H_