From: Seunghun Lee Date: Mon, 24 Dec 2018 04:18:45 +0000 (+0900) Subject: e_client_video: Add APIs for a video module to allow set functions which is needed... X-Git-Tag: accepted/tizen/unified/20181226.063554~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F53%2F196153%2F1;p=platform%2Fupstream%2Fenlightenment.git e_client_video: Add APIs for a video module to allow set functions which is needed by hwc implementation. Change-Id: Idf852f49e679e91881f1fc90382047281e0807a0 --- diff --git a/src/bin/video/e_client_video.c b/src/bin/video/e_client_video.c index f29a1bd..11098ae 100644 --- a/src/bin/video/e_client_video.c +++ b/src/bin/video/e_client_video.c @@ -27,6 +27,13 @@ struct _E_Client_Video E_Client *ec; Ecore_Event_Handler *eeh_zone_set; + + struct + { + E_Client_Video_Info_Get_Cb info_get; + E_Client_Video_Commit_Data_Release_Cb commit_data_release; + E_Client_Video_Tbm_Surface_Get_Cb tbm_surface_get; + } cb; }; static E_Hwc_Policy @@ -275,23 +282,71 @@ e_client_video_available_properties_get(E_Client *ec, const tdm_prop **props, in EINTERN Eina_Bool e_client_video_info_get(E_Client *ec, E_Client_Video_Info *info) { - IFACE_CHECK_RET(info_get, EINA_FALSE); + INTERNAL_DATA_GET; + + if (!ecv) + return EINA_FALSE; + + if (ecv->cb.info_get) + return ecv->cb.info_get(ec, info); + else if (ecv->iface->info_get) + return ecv->iface->info_get(ecv->iface, info); - return ecv->iface->info_get(ecv->iface, info); + return EINA_FALSE; } EINTERN Eina_Bool e_client_video_commit_data_release(E_Client *ec, unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec) { - IFACE_CHECK_RET(commit_data_release, EINA_FALSE); + INTERNAL_DATA_GET; + + if (!ecv) + return EINA_FALSE; + + if (ecv->cb.commit_data_release) + return ecv->cb.commit_data_release(ec, sequence, tv_sec, tv_usec); + else if (ecv->iface->commit_data_release) + return ecv->iface->commit_data_release(ecv->iface, sequence, tv_sec, tv_usec); - return ecv->iface->commit_data_release(ecv->iface, sequence, tv_sec, tv_usec); + return EINA_FALSE; } EINTERN tbm_surface_h e_client_video_tbm_surface_get(E_Client *ec) { - IFACE_CHECK_RET(tbm_surface_get, NULL); + INTERNAL_DATA_GET; + + if (!ecv) + return NULL; + + if (ecv->cb.tbm_surface_get) + return ecv->cb.tbm_surface_get(ec); + else if (ecv->iface->tbm_surface_get) + return ecv->iface->tbm_surface_get(ecv->iface); + + return NULL; +} + +EINTERN void +e_client_video_info_get_func_set(E_Client *ec, E_Client_Video_Info_Get_Cb func) +{ + API_ENTRY; + + ecv->cb.info_get = func; +} + +EINTERN void +e_client_video_commit_data_release_func_set(E_Client *ec, E_Client_Video_Commit_Data_Release_Cb func) +{ + API_ENTRY; + + ecv->cb.commit_data_release = func; +} + +EINTERN void +e_client_video_tbm_surface_get_func_set(E_Client *ec, E_Client_Video_Tbm_Surface_Get_Cb func) +{ + API_ENTRY; - return ecv->iface->tbm_surface_get(ecv->iface); + ecv->cb.tbm_surface_get = func; } diff --git a/src/bin/video/e_client_video.h b/src/bin/video/e_client_video.h index f348736..8d8353f 100644 --- a/src/bin/video/e_client_video.h +++ b/src/bin/video/e_client_video.h @@ -15,6 +15,10 @@ struct _E_Client_Video_Info tdm_transform transform; }; +typedef Eina_Bool (*E_Client_Video_Info_Get_Cb)(E_Client *ec, E_Client_Video_Info *info); +typedef Eina_Bool (*E_Client_Video_Commit_Data_Release_Cb)(E_Client *ec, unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec); +typedef tbm_surface_h (*E_Client_Video_Tbm_Surface_Get_Cb)(E_Client *ec); + EINTERN Eina_Bool e_client_video_set(E_Client *ec); EINTERN void e_client_video_unset(E_Client *ec); @@ -33,4 +37,8 @@ EINTERN Eina_Bool e_client_video_commit_data_release(E_Client *ec, unsigned i EINTERN tbm_surface_h e_client_video_tbm_surface_get(E_Client *ec); +EINTERN void e_client_video_info_get_func_set(E_Client *ec, E_Client_Video_Info_Get_Cb func); +EINTERN void e_client_video_commit_data_release_func_set(E_Client *ec, E_Client_Video_Commit_Data_Release_Cb func); +EINTERN void e_client_video_tbm_surface_get_func_set(E_Client *ec, E_Client_Video_Tbm_Surface_Get_Cb func); + #endif