Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/elation

Dir     : e17/apps/elation/src/modules


Modified Files:
        elation_cd.c elation_disk.c 


Log Message:


handle cd's better

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/elation/src/modules/elation_cd.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- elation_cd.c        24 Jul 2004 05:19:33 -0000      1.1
+++ elation_cd.c        24 Jul 2004 07:19:47 -0000      1.2
@@ -16,14 +16,10 @@
 
 struct _Elation_Module_Private
 {
-   Evas_Object *background1;
-   Evas_Object *background2;
+   char *device;
+   int track;
+   int track_num;
    Evas_Object *video;
-   
-   double       media_fade_in_start;
-   Ecore_Timer *media_fade_in_timer;
-   
-   unsigned char menu_visible : 1;
 };
 
 static void shutdown(Elation_Module *em);
@@ -35,15 +31,11 @@
 static void action(Elation_Module *em, int action);
 
 static void frame_decode_cb(void *data, Evas_Object *obj, void *event_info);
-static void frame_resize_cb(void *data, Evas_Object *obj, void *event_info);
 static void length_change_cb(void *data, Evas_Object *obj, void *event_info);
 static void decode_stop_cb(void *data, Evas_Object *obj, void *event_info);
-static void button_num_change_cb(void *data, Evas_Object *obj, void *event_info);
 static void title_change_cb(void *data, Evas_Object *obj, void *event_info);
 static void progress_change_cb(void *data, Evas_Object *obj, void *event_info);
 static void channels_change_cb(void *data, Evas_Object *obj, void *event_info);
-static void ref_change_cb(void *data, Evas_Object *obj, void *event_info);
-static void button_change_cb(void *data, Evas_Object *obj, void *event_info);
 static void key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
 static int  media_play_timer_cb(void *data);
 static int  media_fade_in_timer_cb(void *data);
@@ -65,33 +57,64 @@
    em->unfocus = unfocus;
    em->action = action;
 
-   pr->background1 = evas_object_rectangle_add(em->info->evas);
-   evas_object_color_set(pr->background1, 0, 0, 0, 255);
-   pr->background2 = evas_object_rectangle_add(em->info->evas);
-   evas_object_color_set(pr->background2, 0, 0, 0, 255);
+   pr->device = strdup("/dev/cdrom");
    
    pr->video = emotion_object_add(em->info->evas);
    evas_object_event_callback_add(pr->video, EVAS_CALLBACK_KEY_DOWN, key_down_cb, em);
    
    evas_object_smart_callback_add(pr->video, "frame_decode", frame_decode_cb, em);
-   evas_object_smart_callback_add(pr->video, "frame_resize", frame_resize_cb, em);
    evas_object_smart_callback_add(pr->video, "length_change",length_change_cb, em);
    evas_object_smart_callback_add(pr->video, "decode_stop", decode_stop_cb, em);
-   evas_object_smart_callback_add(pr->video, "button_num_change", 
button_num_change_cb, em);
    
    evas_object_smart_callback_add(pr->video, "title_change", title_change_cb, em);
    evas_object_smart_callback_add(pr->video, "progress_change", progress_change_cb, 
em);
    evas_object_smart_callback_add(pr->video, "channels_change", channels_change_cb, 
em);
-   evas_object_smart_callback_add(pr->video, "ref_change", ref_change_cb, em);
-   evas_object_smart_callback_add(pr->video, "button_change", button_change_cb, em);
-   
-   emotion_object_smooth_scale_set(pr->video, 1);
-   
-   emotion_object_file_set(pr->video, "cdda:/1");
-   emotion_object_play_set(pr->video, 1);
-   
-   pr->media_fade_in_timer = ecore_timer_add(1.0 / 30.0, media_fade_in_timer_cb, em);
-   pr->media_fade_in_start = ecore_time_get();
+
+     {
+       int fd;
+       
+       fd = open(pr->device, O_RDONLY | O_NONBLOCK);
+       if (fd >= 0)
+         {
+            int ret;
+            struct cdrom_tochdr hd;
+            
+            ret = ioctl(fd, CDROMREADTOCHDR, &hd);
+            if (ret == 0)
+              {
+                 int i;
+                 
+                 pr->track_num = hd.cdth_trk1;
+                 printf("hd->cdth_trk0 = %i, hd->cdth_trk1 = %i\n",
+                        (int)hd.cdth_trk0, (int)hd.cdth_trk1);
+                 for (i = 1; i <= hd.cdth_trk1; i++)
+                   {
+                      struct cdrom_tocentry ent;
+                      
+                      ent.cdte_track = i;
+                      ent.cdte_format = CDROM_MSF;
+                      ret = ioctl(fd, CDROMREADTOCENTRY, &ent);
+                      if (ret == 0)
+                        {
+                           int sec;
+                           
+                           sec = ent.cdte_addr.msf.minute * 60;
+                           sec += ent.cdte_addr.msf.second;
+                           printf("TRACK %i = %i sec [f: %i]\n", i, sec,
+                                  (int)ent.cdte_addr.msf.frame);
+                        }
+                   }
+              }
+            close(fd);
+         }
+     }
+     {
+       char buf[256];
+       
+       snprintf(buf, sizeof(buf), "cdda:/%i", pr->track + 1);
+       emotion_object_file_set(pr->video, buf);
+       emotion_object_play_set(pr->video, 1);
+     }
    
    return pr;
 }
@@ -102,10 +125,7 @@
    Elation_Module_Private *pr;
    
    pr = em->data;
-   evas_object_del(pr->background1);
-   evas_object_del(pr->background2);
    evas_object_del(pr->video);
-   if (pr->media_fade_in_timer) ecore_timer_del(pr->media_fade_in_timer);
    free(pr);
 }
 
@@ -113,67 +133,13 @@
 resize(Elation_Module *em)
 {
    Elation_Module_Private *pr;
-   Evas_Coord x, y, w, h, ww, hh;
-   double ratio;
-   int vw, vh;
+   Evas_Coord w, h;
    
    pr = em->data;
    evas_output_viewport_get(em->info->evas, NULL, NULL, &w, &h);
    
-   ww = w;
-   hh = h;
-   
-   emotion_object_size_get(pr->video, &vw, &vh);
-   ratio = emotion_object_ratio_get(pr->video);
-   if (ratio > 0.0)
-     {
-       x = 0;
-       y = (h - (w / ratio)) / 2;
-       if (y < 0)
-         {
-            y = 0;
-            x = (w - (h * ratio)) / 2;
-            w = h * ratio;
-         }
-       else
-         h = w / ratio;
-       evas_object_move(pr->video, x, y);
-       evas_object_resize(pr->video, w, h);
-     }
-   else
-     {
-       if (vh > 1)
-         {
-            ratio = (double)vw / (double)vh;
-            x = 0;
-            y = (h - (w / ratio)) / 2;
-            if (y < 0)
-              {
-                 y = 0;
-                 x = (w - (h * ratio)) / 2;
-                 w = h * ratio;
-              }
-            else
-              h = w / ratio;
-         }
-       evas_object_move(pr->video, 0, 0);
-       evas_object_resize(pr->video, w, h);
-     }
-   
-   if (w == ww)
-     {
-       evas_object_move(pr->background1, 0, 0);
-       evas_object_resize(pr->background1, ww, y);
-       evas_object_move(pr->background2, 0, y + h);
-       evas_object_resize(pr->background2, ww, hh - h - y);
-     }
-   else
-     {
-       evas_object_move(pr->background1, 0, 0);
-       evas_object_resize(pr->background1, x, hh);
-       evas_object_move(pr->background2, x + w, 0);
-       evas_object_resize(pr->background2, ww - w - x, hh);
-     }
+   evas_object_move(pr->video, 0, 0);
+   evas_object_resize(pr->video, w, h);
 }
 
 static void
@@ -182,9 +148,6 @@
    Elation_Module_Private *pr;
    
    pr = em->data;
-   evas_object_show(pr->background1);
-   evas_object_show(pr->background2);
-   evas_object_show(pr->video);
 }
 
 static void
@@ -193,9 +156,6 @@
    Elation_Module_Private *pr;
    
    pr = em->data;
-   evas_object_hide(pr->background1);
-   evas_object_hide(pr->background2);
-   evas_object_hide(pr->video);
 }
 
 static void
@@ -225,56 +185,43 @@
    switch (action)
      {
       case ELATION_ACT_NEXT:
-       if (pr->menu_visible)
+       pr->track++;
+       if (pr->track >= pr->track_num) pr->track = 0;
+       printf("next to %i\n", pr->track);
          {
+            char buf[256];
+            
+            snprintf(buf, sizeof(buf), "cdda:/%i", pr->track + 1);
+            emotion_object_file_set(pr->video, buf);
+            emotion_object_play_set(pr->video, 1);
          }
-       else
-         emotion_object_event_simple_send(pr->video, EMOTION_EVENT_NEXT);
        break;
       case ELATION_ACT_PREV:
-       if (pr->menu_visible)
+       pr->track--;
+       if (pr->track < 0) pr->track = pr->track_num - 1;
          {
+            char buf[256];
+            
+            snprintf(buf, sizeof(buf), "cdda:/%i", pr->track + 1);
+            emotion_object_file_set(pr->video, buf);
+            emotion_object_play_set(pr->video, 1);
          }
-       else
-         emotion_object_event_simple_send(pr->video, EMOTION_EVENT_PREV);
        break;
       case ELATION_ACT_SELECT:
-       if (pr->menu_visible)
-         emotion_object_event_simple_send(pr->video, EMOTION_EVENT_SELECT);
+       if (emotion_object_play_get(pr->video))
+         emotion_object_play_set(pr->video, 0);
        else
-         {
-            if (emotion_object_play_get(pr->video))
-              emotion_object_play_set(pr->video, 0);
-            else
-              emotion_object_play_set(pr->video, 1);
-         }
+         emotion_object_play_set(pr->video, 1);
        break;
       case ELATION_ACT_EXIT:
-         {
-            em->info->func.action_broadcast(ELATION_ACT_DISK_EJECT);
-            em->shutdown(em);
-         }
+       em->info->func.action_broadcast(ELATION_ACT_DISK_EJECT);
+       em->shutdown(em);
        break;
       case ELATION_ACT_UP:
-       if (pr->menu_visible)
-         emotion_object_event_simple_send(pr->video, EMOTION_EVENT_UP);
-       else
-         {
-            // FIXME: bring up config menu
-         }
        break;
       case ELATION_ACT_DOWN:
-       if (pr->menu_visible)
-         emotion_object_event_simple_send(pr->video, EMOTION_EVENT_DOWN);
-       else
-         {
-            // FIXME: bring up config menu
-         }
        break;
       case ELATION_ACT_LEFT:
-       if (pr->menu_visible)
-         emotion_object_event_simple_send(pr->video, EMOTION_EVENT_LEFT);
-       else
          {
             double pos;
             
@@ -283,9 +230,6 @@
          }
        break;
       case ELATION_ACT_RIGHT:
-       if (pr->menu_visible)
-         emotion_object_event_simple_send(pr->video, EMOTION_EVENT_RIGHT);
-       else
          {
             double pos;
             
@@ -294,62 +238,23 @@
          }
        break;
       case ELATION_ACT_MENU:
-       if (pr->menu_visible)
-         {
-            // FIXME: bring up config menu
-         }
-       else
-         emotion_object_event_simple_send(pr->video, EMOTION_EVENT_MENU1);
        break;
       case ELATION_ACT_INFO:
-       if (pr->menu_visible)
-         {
-            // FIXME: bring up config menu
-         }
-       else
-         {
-         }
        break;
       case ELATION_ACT_INPUT:
-       if (pr->menu_visible)
-         {
-            // FIXME: bring up config menu
-         }
-       else
-         {
-         }
        break;
       case ELATION_ACT_PLAY:
-       if (pr->menu_visible)
-         {
-            emotion_object_event_simple_send(pr->video, EMOTION_EVENT_NEXT);
-         }
-       else
-         {
-            emotion_object_play_set(pr->video, 1);
-         }
+       emotion_object_play_set(pr->video, 1);
        break;
       case ELATION_ACT_PAUSE:
-       if (pr->menu_visible)
-         {
-         }
+       if (emotion_object_play_get(pr->video))
+         emotion_object_play_set(pr->video, 0);
        else
-         {
-            if (emotion_object_play_get(pr->video))
-              emotion_object_play_set(pr->video, 0);
-            else
-              emotion_object_play_set(pr->video, 1);
-         }
+         emotion_object_play_set(pr->video, 1);
        break;
       case ELATION_ACT_STOP:
-       if (pr->menu_visible)
-         {
-         }
-       else
-         {
-            emotion_object_play_set(pr->video, 0);
-            emotion_object_position_set(pr->video, 0.0);
-         }
+       emotion_object_play_set(pr->video, 0);
+       emotion_object_position_set(pr->video, 0.0);
        break;
       default:
        break;
@@ -367,15 +272,7 @@
    em = data;
    pos = emotion_object_position_get(obj);
    len = emotion_object_play_length_get(obj);
-}
-
-static void
-frame_resize_cb(void *data, Evas_Object *obj, void *event_info)
-{
-   Elation_Module *em;
-   
-   em = data;
-   em->resize(em);
+//   printf("EL decode %3.3f / %3.3f\n", pos, len);
 }
 
 static void
@@ -387,6 +284,7 @@
    em = data;
    pos = emotion_object_position_get(obj);
    len = emotion_object_play_length_get(obj);
+   printf("EL length change %3.3f / %3.3f\n", pos, len);
 }
 
 static void
@@ -397,22 +295,18 @@
    
    em = data;
    pr = em->data;
+   printf("EL video stop\n");
 //   emotion_object_position_set(pr->video, 0.0);
 //   emotion_object_play_set(pr->video, 1);
-}
-   
-static void
-button_num_change_cb(void *data, Evas_Object *obj, void *event_info)
-{
-   Elation_Module *em;
-   Elation_Module_Private *pr;
-   
-   em = data;
-   pr = em->data;
-   if (emotion_object_spu_button_count_get(pr->video) > 0)
-     pr->menu_visible = 1;
-   else
-     pr->menu_visible = 0;
+   pr->track++;
+   if (pr->track >= pr->track_num) pr->track = 0;
+     {
+       char buf[256];
+       
+       snprintf(buf, sizeof(buf), "cdda:/%i", pr->track + 1);
+       emotion_object_file_set(pr->video, buf);
+       emotion_object_play_set(pr->video, 1);
+     }
 }
 
 static void
@@ -454,31 +348,6 @@
 }
 
 static void
-ref_change_cb(void *data, Evas_Object *obj, void *event_info)
-{
-   Elation_Module *em;
-   Elation_Module_Private *pr;
-   
-   em = data;
-   pr = em->data;
-   printf("EL video ref to: \"%s\" %i\n",
-         emotion_object_ref_file_get(pr->video),
-         emotion_object_ref_num_get(pr->video));
-}
-
-static void
-button_change_cb(void *data, Evas_Object *obj, void *event_info)
-{
-   Elation_Module *em;
-   Elation_Module_Private *pr;
-   
-   em = data;
-   pr = em->data;
-   printf("EL video selected spu button: %i\n",
-         emotion_object_spu_button_get(pr->video));
-}
-
-static void
 key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
 {
    Evas_Event_Key_Down *ev;
@@ -510,24 +379,3 @@
    else if (!strcmp(ev->keyname, "k"))      action = ELATION_ACT_SKIP;
    em->action(em, action);
 }
-
-static int
-media_fade_in_timer_cb(void *data)
-{
-   Elation_Module *em;
-   Elation_Module_Private *pr;
-   int a;
-   double t;
-   
-   em = data;
-   pr = em->data;
-   t = ecore_time_get() - pr->media_fade_in_start;
-   a = (t * 255) / 10.0;
-   if (a > 255) a = 255;
-   evas_object_color_set(pr->background1, 0, 0, 0, a);
-   evas_object_color_set(pr->background2, 0, 0, 0, a);
-   evas_object_color_set(pr->video, 255, 255, 255, a);
-   if (a < 255) return 1;
-   pr->media_fade_in_timer = NULL;
-   return 0;
-}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/elation/src/modules/elation_disk.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- elation_disk.c      24 Jul 2004 05:19:33 -0000      1.2
+++ elation_disk.c      24 Jul 2004 07:19:48 -0000      1.3
@@ -83,7 +83,7 @@
    em->unfocus = unfocus;
    em->action = action;
 
-   pr->device = strdup("/dev/dvd");
+   pr->device = strdup("/dev/cdrom");
      {
        int fds_in[2], fds_out[2];
        pid_t pid;
@@ -263,7 +263,7 @@
                            int i;
                            printf("eject disk!\n");
                            
-                           for (i = 0; i < 5; i++)
+                           for (i = 0; i < 10; i++)
                              {
                                 if (ioctl(fd, CDROMEJECT, 0) == 0) break;
                                 perror("ioctl");




-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to