e_client_video: Add APIs for a video module to allow set functions which is needed... 53/196153/1
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 24 Dec 2018 04:18:45 +0000 (13:18 +0900)
committerSeunghun Lee <shiin.lee@samsung.com>
Mon, 24 Dec 2018 04:22:23 +0000 (13:22 +0900)
Change-Id: Idf852f49e679e91881f1fc90382047281e0807a0

src/bin/video/e_client_video.c
src/bin/video/e_client_video.h

index f29a1bd..11098ae 100644 (file)
@@ -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;
 }
index f348736..8d8353f 100644 (file)
@@ -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