From a3181f69eee3eee1c1ecb6e6bdaff1c9f5b36a87 Mon Sep 17 00:00:00 2001 From: xiaofang Date: Mon, 27 Feb 2023 10:19:08 +0800 Subject: [PATCH] [M108 Aura Migration] Add media playback ewk api ewk api: ewk_view_stop_video ewk_view_broadcast_decoder_set ewk_view_media_device_list_get ewk_settings_default_audio_input_device_set ewk_view_is_video_playing Refer: https://review.tizen.org/gerrit/#/c/270947/ https://review.tizen.org/gerrit/#/c/271619/ https://review.tizen.org/gerrit/#/c/284880/ https://review.tizen.org/gerrit/#/c/284853/ https://review.tizen.org/gerrit/#/c/276711/ https://review.tizen.org/gerrit/#/c/270211/ Change-Id: I406d049dca2b07ae4f4757c6412f0ceff9509e81 Signed-off-by: xiaofang --- .../ewk/efl_integration/eweb_view_callbacks.h | 26 +++++ .../public/ewk_media_playback_info.cc | 23 +++++ .../public/ewk_media_playback_info.h | 114 +++++++++++++++++++++ .../public/ewk_media_playback_info_product.h | 28 +++++ .../public/ewk_media_subtitle_info.h | 99 ++++++++++++++++++ .../ewk/efl_integration/public/ewk_settings.cc | 5 + .../efl_integration/public/ewk_settings_product.h | 1 + .../public/ewk_user_media_internal.h | 12 +++ tizen_src/ewk/efl_integration/public/ewk_view.cc | 23 +++++ .../ewk/efl_integration/public/ewk_view_internal.h | 20 ++++ .../ewk/efl_integration/public/ewk_view_product.h | 10 ++ 11 files changed, 361 insertions(+) create mode 100644 tizen_src/ewk/efl_integration/public/ewk_media_playback_info.h create mode 100644 tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info.h diff --git a/tizen_src/ewk/efl_integration/eweb_view_callbacks.h b/tizen_src/ewk/efl_integration/eweb_view_callbacks.h index 36b1345..7ab0b9d 100644 --- a/tizen_src/ewk/efl_integration/eweb_view_callbacks.h +++ b/tizen_src/ewk/efl_integration/eweb_view_callbacks.h @@ -107,6 +107,16 @@ enum CallbackType { EdgeRight, EdgeTop, EdgeBottom, +#if BUILDFLAG(IS_TIZEN_TV) + DeviceConnectionChanged, + PlaybackLoad, + PlaybackVideoReady, + PlaybackReady, + PlaybackStart, + PlaybackFinish, + PlaybackStop, + UserMediaState, +#endif OverscrolledLeft, OverscrolledRight, OverscrolledTop, @@ -251,6 +261,22 @@ DECLARE_EWK_VIEW_CALLBACK(EdgeLeft, "edge,left", void); DECLARE_EWK_VIEW_CALLBACK(EdgeTop, "edge,top", void); DECLARE_EWK_VIEW_CALLBACK(EdgeBottom, "edge,bottom", void); DECLARE_EWK_VIEW_CALLBACK(EdgeRight, "edge,right", void); +#if BUILDFLAG(IS_TIZEN_TV) +DECLARE_EWK_VIEW_CALLBACK(DeviceConnectionChanged, + "device,connection,changed", + int*); +DECLARE_EWK_VIEW_CALLBACK(PlaybackLoad, "notification,playback,load", void*); +DECLARE_EWK_VIEW_CALLBACK(PlaybackVideoReady, + "notification,playback,videoready", + void*); +DECLARE_EWK_VIEW_CALLBACK(PlaybackReady, "notification,playback,ready", void*); +DECLARE_EWK_VIEW_CALLBACK(PlaybackStart, "notification,playback,start", void*); +DECLARE_EWK_VIEW_CALLBACK(PlaybackStop, "notification,playback,stop", void*); +DECLARE_EWK_VIEW_CALLBACK(PlaybackFinish, + "notification,playback,finish", + void*); +DECLARE_EWK_VIEW_CALLBACK(UserMediaState, "usermedia,state", void*); +#endif DECLARE_EWK_VIEW_CALLBACK(OverscrolledLeft, "overscrolled,left", void); DECLARE_EWK_VIEW_CALLBACK(OverscrolledRight, "overscrolled,right", void); DECLARE_EWK_VIEW_CALLBACK(OverscrolledTop, "overscrolled,top", void); diff --git a/tizen_src/ewk/efl_integration/public/ewk_media_playback_info.cc b/tizen_src/ewk/efl_integration/public/ewk_media_playback_info.cc index b7baf7e..1d7d318 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_media_playback_info.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_media_playback_info.cc @@ -28,6 +28,16 @@ #include "build/build_config.h" #include "private/ewk_private.h" +struct _Ewk_Media_Playback_Info { + int video_id; + const char* media_url; + const char* mime_type; + Eina_Bool media_resource_acquired; + const char* translated_url; + const char* drm_info; + Ewk_Hardware_Decoders decoder; +}; + const char* ewk_media_playback_info_media_url_get( Ewk_Media_Playback_Info* data) { LOG_EWK_API_MOCKUP(); @@ -68,6 +78,19 @@ void ewk_media_playback_info_drm_info_set(Ewk_Media_Playback_Info* data, LOG_EWK_API_MOCKUP(); } +Ewk_Hardware_Decoders ewk_media_playback_info_decoder_get( + Ewk_Media_Playback_Info* data) { + EINA_SAFETY_ON_NULL_RETURN_VAL(data, EWK_HARDWARE_DECODERS_NONE); + return data->decoder; +} + +void ewk_media_playback_info_decoder_set( + Ewk_Media_Playback_Info* data, + Ewk_Hardware_Decoders decoder) { + if (data) + data->decoder = decoder; +} + const int ewk_media_playback_info_video_id_get(Ewk_Media_Playback_Info* data) { LOG_EWK_API_MOCKUP(); diff --git a/tizen_src/ewk/efl_integration/public/ewk_media_playback_info.h b/tizen_src/ewk/efl_integration/public/ewk_media_playback_info.h new file mode 100644 index 0000000..b12341e --- /dev/null +++ b/tizen_src/ewk/efl_integration/public/ewk_media_playback_info.h @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2022 Samsung Electronics. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY SAMSUNG ELECTRONICS. AND ITS CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SAMSUNG ELECTRONICS. OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file ewk_media_playback_info.h + * @brief This file describes the ewk media playback info API. + */ + +#ifndef ewk_media_playback_info_h +#define ewk_media_playback_info_h +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _Ewk_Media_Playback_Info Ewk_Media_Playback_Info; + +/** + * Get url of media. + * + * @param meia playback info's structure + * + * @return @c media url + */ +EXPORT_API const char* ewk_media_playback_info_media_url_get( + Ewk_Media_Playback_Info* data); + +/** + * Get mime type of media. + * + * @param meia playback info's structure + * + * @return @c mime type + */ +EXPORT_API const char* ewk_media_playback_info_mime_type_get( + Ewk_Media_Playback_Info* data); + +/** + * Get translated url of media. + * + * @param media playback info's structure + * + * @return @c translated url + */ +EXPORT_API const char* ewk_media_playback_info_translated_url_get( + Ewk_Media_Playback_Info* data); + +/** + * Get drm info of media. + * + * @param media playback info's structure + * + * @return @c drm info + */ +EXPORT_API const char* ewk_media_playback_info_drm_info_get( + Ewk_Media_Playback_Info* data); + +/** + * Set media resource acquired of media. + * + * @param media playback info's structure + */ +EXPORT_API void ewk_media_playback_info_media_resource_acquired_set( + Ewk_Media_Playback_Info* data, + Eina_Bool media_resource_acquired); + +/** + * Set translated url of media. + * + * @param media playback info's structure + */ +EXPORT_API void ewk_media_playback_info_translated_url_set( + Ewk_Media_Playback_Info* data, + const char* translated_url); + +/** + * Set drm info of media. + * + * @param media playback info's structure + */ +EXPORT_API void ewk_media_playback_info_drm_info_set( + Ewk_Media_Playback_Info* data, + const char* drm_info); + +#ifdef __cplusplus +} +#endif +#endif // ewk_media_playback_info_h + diff --git a/tizen_src/ewk/efl_integration/public/ewk_media_playback_info_product.h b/tizen_src/ewk/efl_integration/public/ewk_media_playback_info_product.h index a7689d5..3fbc080 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_media_playback_info_product.h +++ b/tizen_src/ewk/efl_integration/public/ewk_media_playback_info_product.h @@ -39,6 +39,15 @@ extern "C" { #endif +/** + * Enum values used to inform webengine about decoder used by broadcast. + */ +typedef enum Ewk_Hardware_Decoders { + EWK_HARDWARE_DECODERS_NONE, + EWK_HARDWARE_DECODERS_MAIN, + EWK_HARDWARE_DECODERS_SUB, +} Ewk_Hardware_Decoders; + typedef struct _Ewk_Media_Playback_Info Ewk_Media_Playback_Info; /** @@ -92,6 +101,16 @@ EXPORT_API const char* ewk_media_playback_info_drm_info_get( Ewk_Media_Playback_Info* data); /** + * Get decoder info of media. + * + * @param data playback info's structure + * + * @return @c decoder name + */ +EXPORT_API Ewk_Hardware_Decoders ewk_media_playback_info_decoder_get( + Ewk_Media_Playback_Info* data); + +/** * Set media resource acquired of media. * * @param media playback info's structure @@ -118,6 +137,15 @@ EXPORT_API void ewk_media_playback_info_drm_info_set( Ewk_Media_Playback_Info* data, const char* drm_info); +/** + * Set decoder info of media. + * + * @param media playback info's structure + */ +EXPORT_API void ewk_media_playback_info_decoder_set( + Ewk_Media_Playback_Info* data, + Ewk_Hardware_Decoders decoder); + Ewk_Media_Playback_Info* ewkMediaPlaybackInfoCreate(const int player_id, const char* url, const char* mime_type); diff --git a/tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info.h b/tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info.h new file mode 100644 index 0000000..ed82339 --- /dev/null +++ b/tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info.h @@ -0,0 +1,99 @@ +// Copyright 2022 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** +* @file ewk_media_subtitle_info.h +* @brief . +*/ + +#ifndef ewk_media_subtitle_info_h +#define ewk_media_subtitle_info_h +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _Ewk_Media_Subtitle_Info Ewk_Media_Subtitle_Info; + +/** +* Get id of subtitle. +* +* @param meia subtitle info's structure +* +* @return @c subtitle id +*/ +EXPORT_API int ewk_media_subtitle_info_id_get(Ewk_Media_Subtitle_Info *data); + +/** +* Get url of subtitle. +* +* @param meia subtitle info's structure +* +* @return @c subtitle url +*/ +EXPORT_API const char *ewk_media_subtitle_info_url_get(Ewk_Media_Subtitle_Info *data); + +/** +* Get srcLang of subtitle. +* +* @param meia subtitle info's structure +* +* @return @c subtitle srcLang +*/ +EXPORT_API const char *ewk_media_subtitle_info_lang_get(Ewk_Media_Subtitle_Info *data); + +/** +* Get label of subtitle. +* +* @param meia subtitle info's structure +* +* @return @c subtitle label +*/ +EXPORT_API const char *ewk_media_subtitle_info_label_get(Ewk_Media_Subtitle_Info *data); + +typedef struct _Ewk_Media_Subtitle_Data Ewk_Media_Subtitle_Data; + +/** +* Get id of subtitle. +* +* @param meia subtitle data's structure +* +* @return @c subtitle id +*/ +EXPORT_API int ewk_media_subtitle_data_id_get(Ewk_Media_Subtitle_Data *data); + +/** +* Get timestamp of subtitle. +* +* @param meia subtitle data's structure +* +* @return @c subtitle timestamp +*/ +EXPORT_API double ewk_media_subtitle_data_timestamp_get(Ewk_Media_Subtitle_Data *data); + +/** +* Get data size of subtitle. +* +* @param meia subtitle data's structure +* +* @return @c subtitle data size +*/ +EXPORT_API unsigned ewk_media_subtitle_data_size_get(Ewk_Media_Subtitle_Data *data); + +/** +* Get data of subtitle. +* +* @param meia subtitle data's structure +* +* @return @c subtitle data +*/ +EXPORT_API const void* ewk_media_subtitle_data_get(Ewk_Media_Subtitle_Data *data); + +#ifdef __cplusplus +} +#endif +#endif // ewk_media_subtitle_info_h \ No newline at end of file diff --git a/tizen_src/ewk/efl_integration/public/ewk_settings.cc b/tizen_src/ewk/efl_integration/public/ewk_settings.cc index 2891773..3fdb1e9 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_settings.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_settings.cc @@ -716,6 +716,11 @@ Eina_Bool ewk_settings_uses_scrollbar_thumb_focus_notifications_set(Ewk_Settings return EINA_FALSE; } +void ewk_settings_default_audio_input_device_set(Ewk_Settings* settings, const char* device_id) +{ + LOG_EWK_API_MOCKUP(); +} + void ewk_settings_media_playback_notification_set(Ewk_Settings* settings, Eina_Bool enabled) { LOG_EWK_API_MOCKUP(); diff --git a/tizen_src/ewk/efl_integration/public/ewk_settings_product.h b/tizen_src/ewk/efl_integration/public/ewk_settings_product.h index 7f6bdfa..ed82333 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_settings_product.h +++ b/tizen_src/ewk/efl_integration/public/ewk_settings_product.h @@ -869,6 +869,7 @@ EXPORT_API void ewk_settings_clipboard_enabled_set(Ewk_Settings* settings, Eina_ */ EXPORT_API Eina_Bool ewk_settings_clipboard_enabled_get(const Ewk_Settings* settings); +EXPORT_API void ewk_settings_default_audio_input_device_set(Ewk_Settings* settings, const char* device_id); #ifdef __cplusplus } diff --git a/tizen_src/ewk/efl_integration/public/ewk_user_media_internal.h b/tizen_src/ewk/efl_integration/public/ewk_user_media_internal.h index d6c0ce6..9b933e9 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_user_media_internal.h +++ b/tizen_src/ewk/efl_integration/public/ewk_user_media_internal.h @@ -55,6 +55,18 @@ enum _Ewk_User_Media_Device_Type { typedef enum _Ewk_User_Media_Device_Type Ewk_User_Media_Device_Type; /** + * struct _Ewk_User_Media_State_Info + * @brief Get user media device usability status. + * + */ +struct _Ewk_User_Media_State_Info { + Ewk_User_Media_Device_Type device_type; + uint32_t previous_state; + uint32_t current_state; +}; +typedef struct _Ewk_User_Media_State_Info Ewk_User_Media_State_Info; + +/** * Requests for getting origin of local media permission request. * * @param request Ewk_User_Media_Permission_Request object to get origin for diff --git a/tizen_src/ewk/efl_integration/public/ewk_view.cc b/tizen_src/ewk/efl_integration/public/ewk_view.cc index e2c3269..de1b81a 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_view.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_view.cc @@ -1503,12 +1503,31 @@ Eina_Bool ewk_view_key_system_whitelist_set(Evas_Object* ewkView, const char** l return EINA_FALSE; } +Eina_Bool ewk_view_is_video_playing(Evas_Object* o, Ewk_Is_Video_Playing_Callback callback, void* user_data) +{ + LOG_EWK_API_MOCKUP(); + return EINA_FALSE; +} + Eina_Bool ewk_view_active_drm_set(Evas_Object* view, const char* drm_system_id) { LOG_EWK_API_MOCKUP(); return EINA_FALSE; } +void ewk_view_broadcast_decoder_set( + Evas_Object* view, + Ewk_Hardware_Decoders decoder) +{ +#if BUILDFLAG(IS_TIZEN_TV) + EWK_VIEW_IMPL_GET_OR_RETURN(view, impl); + /* waiting for implement*/ + //impl->SetBroadcastDecoder(decoder); +#else + LOG_EWK_API_MOCKUP("Only for Tizen TV."); +#endif +} + void ewk_media_set_subtitle_lang(Evas_Object* ewkView, const char* lang_list) { LOG_EWK_API_MOCKUP(); @@ -1629,3 +1648,7 @@ void ewk_view_request_manifest(Evas_Object* o, EWK_VIEW_IMPL_GET_OR_RETURN(o, impl); impl->RequestManifest(callback, user_data); } + +void ewk_view_media_device_list_get(Evas_Object* o, Ewk_Media_Device_List_Get_Callback callback, void* user_data) { + //TODO +} \ No newline at end of file diff --git a/tizen_src/ewk/efl_integration/public/ewk_view_internal.h b/tizen_src/ewk/efl_integration/public/ewk_view_internal.h index 986e3ef..a7ba801 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_view_internal.h +++ b/tizen_src/ewk/efl_integration/public/ewk_view_internal.h @@ -33,6 +33,8 @@ #ifndef ewk_view_internal_h #define ewk_view_internal_h +#include + #include "ewk_app_installation_request_internal.h" #include "ewk_auth_challenge_internal.h" #include "ewk_context_internal.h" @@ -157,6 +159,20 @@ enum Ewk_Mouse_Button_Type { }; typedef enum Ewk_Mouse_Button_Type Ewk_Mouse_Button_Type; +typedef enum _EwkMediaDeviceType{ + MEDIA_DEVICE_TYPE_AUDIO_INPUT, + MEDIA_DEVICE_TYPE_VIDEO_INPUT, + MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, + NUM_MEDIA_DEVICE_TYPES, +} EwkMediaDeviceType; + +typedef struct _EwkMediaDeviceInfo{ + const char* device_id; + const char* label; + EwkMediaDeviceType type; + bool connected; +} EwkMediaDeviceInfo; + /// Ewk view's class, to be overridden by sub-classes. struct Ewk_View_Smart_Class { Evas_Smart_Class sc; /**< all but 'data' is free to be changed. */ @@ -285,6 +301,8 @@ typedef void (*Ewk_View_Scale_Changed_Callback)(Evas_Object *o, double scale_fac */ typedef void (*Ewk_View_SmartRC_Mic_Notification_Callback)(Evas_Object *o, Eina_Bool show, void *user_data); +typedef void (*Ewk_Media_Device_List_Get_Callback)(EwkMediaDeviceInfo* device_list, int size, void* user_data); + /** * The version you have to put into the version field * in the @a Ewk_View_Smart_Class structure. @@ -1487,6 +1505,8 @@ EXPORT_API void ewk_view_feed_mouse_wheel(Evas_Object* o, int x, int y); +EXPORT_API void ewk_view_media_device_list_get(Evas_Object* o, Ewk_Media_Device_List_Get_Callback callback, void* user_data); + #ifdef __cplusplus } #endif diff --git a/tizen_src/ewk/efl_integration/public/ewk_view_product.h b/tizen_src/ewk/efl_integration/public/ewk_view_product.h index 18b8752..6afdf45 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_view_product.h +++ b/tizen_src/ewk/efl_integration/public/ewk_view_product.h @@ -34,6 +34,7 @@ #define ewk_view_product_h #include "ewk_context_product.h" +#include "ewk_media_playback_info_product.h" #include "ewk_value_product.h" #include "ewk_view_internal.h" @@ -792,6 +793,15 @@ EXPORT_API Eina_Bool ewk_view_key_system_whitelist_set(Evas_Object* ewkView, EXPORT_API Eina_Bool ewk_view_active_drm_set(Evas_Object* view, const char* drm_system_id); /** + * Inform webengine about decoder used by broadcast for dual decoding. + * + * @param view View object + * @param decoder Identifier of used decoder + */ +EXPORT_API void ewk_view_broadcast_decoder_set(Evas_Object* view, + Ewk_Hardware_Decoders decoder); + +/** * Set the selected text track language to media player. * * @param ewkView view object -- 2.7.4