video: delay mute off only when ec is invisible 94/130994/1
authorBoram Park <boram1288.park@samsung.com>
Tue, 23 May 2017 09:40:00 +0000 (18:40 +0900)
committerBoram Park <boram1288.park@samsung.com>
Thu, 25 May 2017 03:07:00 +0000 (12:07 +0900)
The delayed mute off will be done after tdm_layer_commit

Change-Id: Ic3149220e57499bf4eb710df342614d2bff94388

src/e_devicemgr_video.c

index 6682d0608316e200a648483062b488617198db28..62383def8c378958f99d7ddcf6a34810d5b7e0d6 100755 (executable)
@@ -1175,7 +1175,8 @@ _e_video_frame_buffer_show(E_Video *video, E_Devmgr_Buf *mbuf)
    tdm_info_layer info, old_info;
    tdm_error ret;
    E_Client *topmost;
-   Eina_Bool first_commit = EINA_FALSE;
+   Tdm_Prop_Value *prop;
+   Eina_List *l = NULL;
 
    if (!mbuf)
      {
@@ -1203,7 +1204,6 @@ _e_video_frame_buffer_show(E_Video *video, E_Devmgr_Buf *mbuf)
              VIN("call property(%s), value(%d)", prop->name, (unsigned int)prop->value.u32);
              tdm_layer_set_property(video->layer, prop->id, prop->value);
           }
-        first_commit = EINA_TRUE;
      }
 
    CLEAR(old_info);
@@ -1240,16 +1240,10 @@ _e_video_frame_buffer_show(E_Video *video, E_Devmgr_Buf *mbuf)
 
    video->waiting_vblank = EINA_TRUE;
 
-   if (first_commit && video->layer)
+   EINA_LIST_FOREACH(video->late_tdm_prop_list, l, prop)
      {
-        // need late call tdm property in list
-        Tdm_Prop_Value *prop;
-        Eina_List *l = NULL;
-        EINA_LIST_FOREACH(video->late_tdm_prop_list, l, prop)
-          {
-             VIN("call property(%s), value(%d)", prop->name, (unsigned int)prop->value.u32);
-             tdm_layer_set_property(video->layer, prop->id, prop->value);
-          }
+        VIN("call property(%s), value(%d)", prop->name, (unsigned int)prop->value.u32);
+        tdm_layer_set_property(video->layer, prop->id, prop->value);
      }
 
    topmost = find_topmost_parent_get(video->ec);
@@ -1371,6 +1365,7 @@ _e_video_cb_evas_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU
    if ((video->ec->comp_data->sub.data && video->ec->comp_data->sub.data->stand_alone) ||
        (video->ec->comp_data->sub.data && video->follow_topmost_visibility))
      {
+#if 0 //mute off is managed by client. mute off in server made many issues.
         if (!video->layer) return;
 
         if (video->tdm_mute_id != -1)
@@ -1379,6 +1374,7 @@ _e_video_cb_evas_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU
              VIN("video surface show. mute off (ec:%p)", video->ec);
              tdm_layer_set_property(video->layer, video->tdm_mute_id, v);
           }
+#endif
         return;
      }
 
@@ -2225,6 +2221,22 @@ _e_devicemgr_video_object_cb_set_attribute(struct wl_client *client,
           }
      }
 
+   if (!_e_video_is_visible(video))
+     {
+        /* if mute off, need to do it after buffer commit */
+        if (!strncmp(props[i].name, "mute", TDM_NAME_LEN && value == 0))
+          {
+             Tdm_Prop_Value *prop = calloc(1, sizeof(Tdm_Prop_Value));
+             if(!prop) return;
+             prop->value.u32 = value;
+             prop->id = props[i].id;
+             memcpy(prop->name, props[i].name, sizeof(props[i].name));
+             VIN("Add property(%s) value(%d)", prop->name, value);
+             video->late_tdm_prop_list = eina_list_append(video->late_tdm_prop_list, prop);
+             return;
+          }
+     }
+
    // check set video layer
    if(!video->layer)
      {
@@ -2258,14 +2270,7 @@ _e_devicemgr_video_object_cb_set_attribute(struct wl_client *client,
         prop->id = props[i].id;
         memcpy(prop->name, props[i].name, sizeof(props[i].name));
         VIN("Add property(%s) value(%d)", prop->name, value);
-        if (!strncmp(prop->name, "mute", TDM_NAME_LEN))
-          {
-             video->late_tdm_prop_list = eina_list_append(video->late_tdm_prop_list, prop);
-          }
-        else
-          {
-             video->tdm_prop_list = eina_list_append(video->tdm_prop_list, prop);
-          }
+        video->tdm_prop_list = eina_list_append(video->tdm_prop_list, prop);
      }
    // if set layer call property
    else
@@ -2306,7 +2311,7 @@ _e_devicemgr_video_object_cb_unfollow_topmost_visibility(struct wl_client *clien
    if(!video->ec || !video->follow_topmost_visibility)
      return;
 
-   VIN("unset follow_topmost_visibility");
+   VIN("set unfollow_topmost_visibility");
 
    video->follow_topmost_visibility= EINA_FALSE;