add _e_eom_output_stop_presentation and execute it for disconnecting when presentatio... 59/84359/1 accepted/tizen/common/20160824.154208 accepted/tizen/ivi/20160824.055129 accepted/tizen/mobile/20160824.055007 accepted/tizen/tv/20160824.055034 accepted/tizen/wearable/20160824.055102 submit/tizen/20160823.022539
authorJunkyeong Kim <jk0430.kim@samsung.com>
Thu, 18 Aug 2016 07:35:01 +0000 (16:35 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Thu, 18 Aug 2016 07:35:08 +0000 (16:35 +0900)
Change-Id: I9b37f3488f4dcc0c71d6f24e1a663086b17beb70
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/e_mod_main.c
src/e_mod_main.h

index f9f6b33..24838c5 100644 (file)
@@ -791,6 +791,8 @@ _e_eom_cb_tdm_output_status_change(tdm_output *output, tdm_output_change_type ty
 
         if (eom_output->state == MIRROR)
           _e_eom_output_stop_mirror(eom_output);
+        else if (eom_output->state == PRESENTATION)
+          _e_eom_output_stop_presentation(eom_output);
 
         /* update eom_output disconnect */
         eom_output->width = 0;
@@ -1338,13 +1340,34 @@ _e_eom_output_stop_mirror(E_EomOutputPtr eom_output)
    _e_eom_output_state_set_mode(eom_output, EOM_OUTPUT_MODE_NONE);
    _e_eom_output_state_set_attribute(eom_output, EOM_OUTPUT_ATTRIBUTE_NONE);
 
-   _e_eom_output_deinit(eom_output);
+   _e_eom_output_deinit(eom_output, 1);
 
    eom_output->state = NONE;
 }
 
 static void
-_e_eom_output_deinit(E_EomOutputPtr eom_output)
+_e_eom_output_stop_presentation(E_EomOutputPtr eom_output)
+{
+   E_EomClientPtr iterator = NULL;
+   Eina_List *l;
+
+   if (eom_output->state == NONE)
+     return;
+
+   _e_eom_output_state_set_status(eom_output, TDM_OUTPUT_CONN_STATUS_DISCONNECTED);
+   _e_eom_output_state_set_mode(eom_output, EOM_OUTPUT_MODE_NONE);
+
+   _e_eom_output_deinit(eom_output, 0);
+
+   EINA_LIST_FOREACH(g_eom->clients, l, iterator)
+     if (iterator && iterator->output_id == eom_output->id)
+       _e_eom_client_free_buffers(iterator);
+
+   eom_output->state = NONE;
+}
+
+static void
+_e_eom_output_deinit(E_EomOutputPtr eom_output, int pp)
 {
    tdm_error err = TDM_ERROR_NONE;
    E_EomClientPtr iterator = NULL;
@@ -1368,14 +1391,17 @@ _e_eom_output_deinit(E_EomOutputPtr eom_output)
    if (err != TDM_ERROR_NONE)
      EOM_ERR("set DPMS off:%d", err);
 
-   for (i = 0; i < NUM_MAIN_BUF; i++)
+   if (pp == 1)
      {
-        tdm_buffer_remove_release_handler(eom_output->dst_buffers[i],
-                                          _e_eom_cb_pp, eom_output);
+       for (i = 0; i < NUM_MAIN_BUF; i++)
+          {
+             tdm_buffer_remove_release_handler(eom_output->dst_buffers[i],
+                                              _e_eom_cb_pp, eom_output);
 
-        if (eom_output->dst_buffers[i])
-          tbm_surface_destroy(eom_output->dst_buffers[i]);
-    }
+             if (eom_output->dst_buffers[i])
+               tbm_surface_destroy(eom_output->dst_buffers[i]);
+          }
+     }
 
    if (g_eom->main_output_state == DOWN)
      EINA_LIST_FOREACH(g_eom->clients, l, iterator)
index b24a5b8..da6653c 100644 (file)
@@ -235,7 +235,8 @@ static const tdm_output_mode *_e_eom_output_get_best_mode(tdm_output *output);
 static int _e_eom_output_get_position(void);
 static void _e_eom_output_start_mirror(E_EomOutputPtr eom_output);
 static void _e_eom_output_stop_mirror(E_EomOutputPtr eom_output);
-static void _e_eom_output_deinit(E_EomOutputPtr eom_output);
+static void _e_eom_output_stop_presentation(E_EomOutputPtr eom_output);
+static void _e_eom_output_deinit(E_EomOutputPtr eom_output, int pp);
 static tdm_layer *_e_eom_output_get_layer(E_EomOutputPtr eom_output);
 static E_EomOutputPtr _e_eom_output_get_by_id(int id);
 static Eina_Bool _e_eom_output_start_pp(E_EomOutputPtr eom_output);