int tdm_mute_id;
Eina_Bool cb_registered;
+ Eina_Bool need_force_render;
};
typedef struct _Tdm_Prop_Value
return EINA_TRUE;
}
+static Eina_Bool
+_e_video_parent_is_viewable(E_Video *video)
+{
+ E_Client *topmost_parent;
+
+ if (e_object_is_del(E_OBJECT(video->ec))) return EINA_FALSE;
+
+ topmost_parent = find_topmost_parent_get(video->ec);
+
+ if (!topmost_parent)
+ return EINA_FALSE;
+
+ if (topmost_parent == video->ec)
+ {
+ VDB("There is no video parent surface");
+ return EINA_FALSE;
+ }
+
+ if (!topmost_parent->visible)
+ {
+ VDB("parent(0x%08"PRIxPTR") not viewable", (Ecore_Window)e_client_util_win_get(topmost_parent));
+ return EINA_FALSE;
+ }
+
+ if (!e_pixmap_resource_get(topmost_parent->pixmap))
+ {
+ VDB("parent(0x%08"PRIxPTR") no comp buffer", (Ecore_Window)e_client_util_win_get(topmost_parent));
+ return EINA_FALSE;
+ }
+
+ return EINA_TRUE;
+}
+
static void
_e_video_input_buffer_cb_free(E_Devmgr_Buf *mbuf, void *data)
{
if (e_object_is_del(E_OBJECT(video->ec))) return;
+ if (video->need_force_render)
+ {
+ VIN("video forcely rendering..");
+ _e_video_render(video, __FUNCTION__);
+ }
+
/* if stand_alone is true, not show */
if (video->ec->comp_data->sub.data && video->ec->comp_data->sub.data->stand_alone)
{
video->ec = ec;
video->window = e_client_util_win_get(ec);
+ evas_object_event_callback_add(video->ec->frame, EVAS_CALLBACK_HIDE,
+ _e_video_cb_evas_hide, video);
+ evas_object_event_callback_add(video->ec->frame, EVAS_CALLBACK_SHOW,
+ _e_video_cb_evas_show, video);
+
if (dconfig->conf->eom_enable == EINA_TRUE)
{
video->external_video = e_devicemgr_eom_is_ec_external(ec);
_e_video_cb_evas_resize, video);
evas_object_event_callback_del_full(video->ec->frame, EVAS_CALLBACK_MOVE,
_e_video_cb_evas_move, video);
- evas_object_event_callback_del_full(video->ec->frame, EVAS_CALLBACK_HIDE,
- _e_video_cb_evas_hide, video);
- evas_object_event_callback_del_full(video->ec->frame, EVAS_CALLBACK_SHOW,
- _e_video_cb_evas_show, video);
}
+ evas_object_event_callback_del_full(video->ec->frame, EVAS_CALLBACK_HIDE,
+ _e_video_cb_evas_hide, video);
+ evas_object_event_callback_del_full(video->ec->frame, EVAS_CALLBACK_SHOW,
+ _e_video_cb_evas_show, video);
+
wl_resource_set_destructor(video->video_object, NULL);
_e_video_hide(video);
}
if (!_e_video_geometry_cal(video))
- return;
+ {
+ if(!video->need_force_render && !_e_video_parent_is_viewable(video))
+ {
+ VIN("need force render");
+ video->need_force_render = EINA_TRUE;
+ }
+ return;
+ }
if (!memcmp(&video->old_geo, &video->geo, sizeof video->geo) &&
video->old_comp_buffer == comp_buffer)
return;
+ video->need_force_render = EINA_FALSE;
+
DBG("====================================== (%s)", func);
VDB("old: "GEO_FMT" buf(%p)", GEO_ARG(&video->old_geo), video->old_comp_buffer);
VDB("new: "GEO_FMT" buf(%p) %c%c%c%c", GEO_ARG(&video->geo), comp_buffer, FOURCC_STR(video->tbmfmt));
_e_video_cb_evas_resize, video);
evas_object_event_callback_add(video->ec->frame, EVAS_CALLBACK_MOVE,
_e_video_cb_evas_move, video);
- evas_object_event_callback_add(video->ec->frame, EVAS_CALLBACK_HIDE,
- _e_video_cb_evas_hide, video);
- evas_object_event_callback_add(video->ec->frame, EVAS_CALLBACK_SHOW,
- _e_video_cb_evas_show, video);
video->cb_registered = EINA_TRUE;
}
DBG("======================================.");