huchi pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=bce172cc87f27001b8d9810d491e43b6db00c888

commit bce172cc87f27001b8d9810d491e43b6db00c888
Author: Wonguk Jeong <wonguk.je...@samsung.com>
Date:   Thu Aug 21 20:32:58 2014 +0200

    media: audio visualization support (phase 1)
    
    support audio visualization for typop, tycat
    This is just first phase with hard coded type 
(EMOTION_VIS_LIBVISUAL_INFINITE)
    
    TODO:
    1. configurable visualizing type in option
    2. hide visualizing option if it is not supported.
       (it's currently supported with "gstreamer" engine)
---
 src/bin/config.c        |  5 +++++
 src/bin/config.h        |  1 +
 src/bin/main.c          | 17 +++++++++++++++++
 src/bin/main.h          |  1 +
 src/bin/media.c         | 20 ++++++++++++++++++++
 src/bin/media.h         |  1 +
 src/bin/options_video.c | 24 ++++++++++++++++++++++++
 src/bin/termio.c        | 15 +++++++++++++++
 src/bin/termio.h        |  1 +
 9 files changed, 85 insertions(+)

diff --git a/src/bin/config.c b/src/bin/config.c
index 699de35..8f9416b 100644
--- a/src/bin/config.c
+++ b/src/bin/config.c
@@ -103,6 +103,8 @@ config_init(void)
    EET_DATA_DESCRIPTOR_ADD_BASIC
      (edd_base, Config, "mute", mute, EET_T_UCHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC
+     (edd_base, Config, "visualize", visualize, EET_T_UCHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC
      (edd_base, Config, "urg_bell", urg_bell, EET_T_UCHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC
      (edd_base, Config, "multi_instance", multi_instance, EET_T_UCHAR);
@@ -216,6 +218,7 @@ config_sync(const Config *config_src, Config *config)
    config->bell_rings = config_src->bell_rings;
    config->active_links = config_src->active_links;
    config->mute = config_src->mute;
+   config->visualize = config_src->visualize;
    config->urg_bell = config_src->urg_bell;
    config->multi_instance = config_src->multi_instance;
    config->application_server = config_src->application_server;
@@ -342,6 +345,7 @@ config_load(const char *key)
              config->active_links = EINA_TRUE;
              config->vidmod = 0;
              config->mute = EINA_FALSE;
+             config->visualize = EINA_FALSE;
              config->urg_bell = EINA_TRUE;
              config->multi_instance = EINA_FALSE;
              config->application_server = EINA_FALSE;
@@ -418,6 +422,7 @@ config_fork(Config *config)
    CPY(translucent);
    CPY(opacity);
    CPY(mute);
+   CPY(visualize);
    CPY(urg_bell);
    CPY(multi_instance);
    CPY(application_server);
diff --git a/src/bin/config.h b/src/bin/config.h
index 09942b8..6cc5ebd 100644
--- a/src/bin/config.h
+++ b/src/bin/config.h
@@ -46,6 +46,7 @@ struct _Config
    Eina_Bool         translucent;
    int               opacity;
    Eina_Bool         mute;
+   Eina_Bool         visualize;
    Eina_Bool         urg_bell;
    Eina_Bool         multi_instance;
    Eina_Bool         application_server;
diff --git a/src/bin/main.c b/src/bin/main.c
index 7e7b1f8..8ed334f 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -1982,6 +1982,23 @@ main_media_mute_update(const Config *config)
 }
 
 void
+main_media_visualize_update(const Config *config)
+{
+   Win *wn;
+   Term *term;
+   Eina_List *l, *ll;
+
+   EINA_LIST_FOREACH(wins, l, wn)
+     {
+        EINA_LIST_FOREACH(wn->terms, ll, term)
+          {
+             if (term->media) media_visualize_set(term->media, 
config->visualize);
+             termio_media_visualize_set(term->term, config->visualize);
+          }
+     }
+}
+
+void
 main_config_sync(const Config *config)
 {
    Win *wn;
diff --git a/src/bin/main.h b/src/bin/main.h
index a5b09f8..d2fadac 100644
--- a/src/bin/main.h
+++ b/src/bin/main.h
@@ -16,6 +16,7 @@ void main_close(Evas_Object *win, Evas_Object *term);
 void main_trans_update(const Config *config);
 void main_media_update(const Config *config);
 void main_media_mute_update(const Config *config);
+void main_media_visualize_update(const Config *config);
 void main_config_sync(const Config *config);
 
 void change_theme(Evas_Object *win, Config *config);
diff --git a/src/bin/media.c b/src/bin/media.c
index edd7113..428ec1f 100644
--- a/src/bin/media.c
+++ b/src/bin/media.c
@@ -773,6 +773,7 @@ _type_mov_init(Evas_Object *obj)
 
    media_play_set(obj, EINA_TRUE);
    if (sd->config->mute) media_mute_set(obj, EINA_TRUE);
+   if (sd->config->visualize) media_visualize_set(obj, EINA_TRUE);
 }
 
 static void
@@ -1281,6 +1282,25 @@ media_mute_set(Evas_Object *obj, Eina_Bool mute)
 }
 
 void
+media_visualize_set(Evas_Object *obj, Eina_Bool visualize)
+{
+   Media *sd = evas_object_smart_data_get(obj);
+   if ((!sd) || (sd->type != TYPE_MOV)) return;
+   if (visualize)
+     {
+        /*
+         * FIXME: configure visualizing type, not hard coded one
+         */
+        if (!emotion_object_vis_supported(sd->o_img, 
EMOTION_VIS_LIBVISUAL_INFINITE))
+          ERR(_("Media visualizing is not supported"));
+        else
+          emotion_object_vis_set(sd->o_img, EMOTION_VIS_LIBVISUAL_INFINITE);
+     }
+   else
+     emotion_object_vis_set(sd->o_img, EMOTION_VIS_NONE);
+}
+
+void
 media_play_set(Evas_Object *obj, Eina_Bool play)
 {
    Media *sd = evas_object_smart_data_get(obj);
diff --git a/src/bin/media.h b/src/bin/media.h
index e1de785..a49532a 100644
--- a/src/bin/media.h
+++ b/src/bin/media.h
@@ -28,6 +28,7 @@ void media_play_set(Evas_Object *obj, Eina_Bool play);
 Eina_Bool media_play_get(Evas_Object *obj);
 void media_position_set(Evas_Object *obj, double pos);
 void media_volume_set(Evas_Object *obj, double vol);
+void media_visualize_set(Evas_Object *obj, Eina_Bool visualize);
 void media_stop(Evas_Object *obj);
 const char *media_get(const Evas_Object *obj);
 int media_src_type_get(const char *src);
diff --git a/src/bin/options_video.c b/src/bin/options_video.c
index 3fb81e9..b747023 100644
--- a/src/bin/options_video.c
+++ b/src/bin/options_video.c
@@ -42,6 +42,16 @@ _cb_op_video_mute_chg(void *data, Evas_Object *obj, void 
*event EINA_UNUSED)
 }
 
 static void
+_cb_op_video_visualize_chg(void *data, Evas_Object *obj, void *event 
EINA_UNUSED)
+{
+   Evas_Object *term = data;
+   Config *config = termio_config_get(term);
+   config->visualize = elm_check_state_get(obj);
+   main_media_visualize_update(config);
+   config_save(config, NULL);
+}
+
+static void
 _cb_op_video_vidmod_chg(void *data, Evas_Object *obj, void *event EINA_UNUSED)
 {
    Evas_Object *term = data;
@@ -112,6 +122,20 @@ options_video(Evas_Object *opbox, Evas_Object *term)
    evas_object_show(o);
    evas_object_smart_callback_add(o, "changed",
                                   _cb_op_video_mute_chg, term);
+
+   /*
+    * TODO: visualizing type configuration
+    */
+   o = elm_check_add(opbox);
+   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
+   elm_object_text_set(o, _("Audio visualized"));
+   elm_check_state_set(o, config->visualize);
+   elm_box_pack_end(bx0, o);
+   evas_object_show(o);
+   evas_object_smart_callback_add(o, "changed",
+                                  _cb_op_video_visualize_chg, term);
+
    o = elm_separator_add(opbox);
    evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
diff --git a/src/bin/termio.c b/src/bin/termio.c
index 6ea1cf6..64e0054 100644
--- a/src/bin/termio.c
+++ b/src/bin/termio.c
@@ -377,6 +377,21 @@ termio_media_mute_set(Evas_Object *obj, Eina_Bool mute)
      }
 }
 
+void
+termio_media_visualize_set(Evas_Object *obj, Eina_Bool visualize)
+{
+   Termio *sd = evas_object_smart_data_get(obj);
+   Eina_List *l;
+   Termblock *blk;
+
+   EINA_SAFETY_ON_NULL_RETURN(sd);
+   EINA_LIST_FOREACH(sd->pty->block.active, l, blk)
+     {
+        if (blk->obj && !blk->edje)
+          media_visualize_set(blk->obj, visualize);
+     }
+}
+
 Eina_Bool
 termio_selection_exists(const Evas_Object *obj)
 {
diff --git a/src/bin/termio.h b/src/bin/termio.h
index f48b61f..77de3b9 100644
--- a/src/bin/termio.h
+++ b/src/bin/termio.h
@@ -36,6 +36,7 @@ Evas_Object *termio_win_get(Evas_Object *obj);
 const char  *termio_title_get(Evas_Object *obj);
 const char  *termio_icon_name_get(Evas_Object *obj);
 void         termio_media_mute_set(Evas_Object *obj, Eina_Bool mute);
+void         termio_media_visualize_set(Evas_Object *obj, Eina_Bool visualize);
 void         termio_config_set(Evas_Object *obj, Config *config);
 Config      *termio_config_get(const Evas_Object *obj);
 

-- 


Reply via email to