use the new colorspace support in evas... :)
authorraster <raster>
Tue, 19 Dec 2006 14:15:17 +0000 (14:15 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 19 Dec 2006 14:15:17 +0000 (14:15 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/e17/libs/emotion@27519 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/emotion_smart.c
src/modules/emotion_xine.c
src/modules/emotion_xine_vo_out.c

index f8b9c2e..539b7d2 100644 (file)
@@ -35,7 +35,7 @@ struct _Smart_Data
    Emotion_Video_Module  *module;
    void                  *video;
    
-   char *module_name;
+   char                  *module_name;
 
    char          *file;
    Evas_Object   *obj;
@@ -51,12 +51,12 @@ struct _Smart_Data
    
    char *title;
    struct {
-      char *info;
-      double stat;
+      char   *info;
+      double  stat;
    } progress;
    struct {
       char *file;
-      int num;
+      int   num;
    } ref;
    struct {
       int button_num;
@@ -992,53 +992,99 @@ _pixels_get(void *data, Evas_Object *obj)
    int iw, ih, w, h;
    Smart_Data *sd;
    Emotion_Format format;
-
+   unsigned char *bgra_data;
+   
    sd = data;
    evas_object_image_size_get(obj, &iw, &ih);
    sd->module->video_data_size_get(sd->video, &w, &h);
    if ((w != iw) || (h != ih))
      {
-       evas_object_image_size_set(obj, w, h);
-       iw = w;
-       ih = h;
+       evas_object_image_colorspace_set(obj, EVAS_COLORSPACE_YCBCR422P601_PL);
+        evas_object_image_alpha_set(obj, 0);
+       evas_object_image_size_set(obj, w, h);
+       iw = w;
+       ih = h;
+     }
+   if ((iw < 1) || (ih < 1))
+     {
+       evas_object_image_pixels_dirty_set(obj, 0);
+     }
+   else
+     {
+       format = sd->module->format_get(sd->video);
+       if ((format == EMOTION_FORMAT_YV12) || (format == EMOTION_FORMAT_I420))
+         {
+            unsigned char **rows;
+            
+            evas_object_image_colorspace_set(obj, EVAS_COLORSPACE_YCBCR422P601_PL);
+            rows = evas_object_image_data_get(obj, 1);
+            if (rows)
+              {
+                 if (sd->module->yuv_rows_get(sd->video, iw, ih,
+                                              rows, 
+                                              &rows[ih], 
+                                              &rows[ih + (ih / 2)]))
+                   evas_object_image_data_update_add(obj, 0, 0, iw, ih);
+              }
+            evas_object_image_data_set(obj, rows);
+            evas_object_image_pixels_dirty_set(obj, 0);
+         }
+       else if (format == EMOTION_FORMAT_BGRA)
+         {
+            if (sd->module->bgra_data_get(sd->video, &bgra_data));
+              {
+                 evas_object_image_data_set(obj, bgra_data);
+                 evas_object_image_pixels_dirty_set(obj, 0);
+              }
+         }
+     }
+//   sd->module->frame_done(sd->video);
+/*   
+   evas_object_image_size_get(obj, &iw, &ih);
+   sd->module->video_data_size_get(sd->video, &w, &h);
+   if ((w != iw) || (h != ih))
+     {
+       evas_object_image_size_set(obj, w, h);
+       iw = w;
+       ih = h;
      }
    format = sd->module->format_get(sd->video);
    if ((format == EMOTION_FORMAT_YV12) || (format == EMOTION_FORMAT_I420))
      {
-       unsigned char **rows;
-       Evas_Pixel_Import_Source ps;
-   
-       ps.format = EVAS_PIXEL_FORMAT_YUV420P_601;
-       ps.w = iw;
-       ps.h = ih;
-      
-       ps.rows = malloc(ps.h * 2 * sizeof(void *));
-       if (!ps.rows)
-         {
-           sd->module->frame_done(sd->video);
-           return;
-         }
-   
-       rows = (unsigned char **)ps.rows;
-      
-       if (sd->module->yuv_rows_get(sd->video, iw, ih,
-             rows, 
-            &rows[ps.h], 
-            &rows[ps.h + (ps.h / 2)]))
+       unsigned char **rows;
+       Evas_Pixel_Import_Source ps;
+       
+       ps.format = EVAS_PIXEL_FORMAT_YUV420P_601;
+       ps.w = iw;
+       ps.h = ih;
+       
+       ps.rows = malloc(ps.h * 2 * sizeof(void *));
+       if (!ps.rows)
+         {
+            sd->module->frame_done(sd->video);
+            return;
+         }
+       
+       rows = (unsigned char **)ps.rows;
+       
+       if (sd->module->yuv_rows_get(sd->video, iw, ih,
+                                    rows, 
+                                    &rows[ps.h], 
+                                    &rows[ps.h + (ps.h / 2)]))
          evas_object_image_pixels_import(obj, &ps);
-       evas_object_image_pixels_dirty_set(obj, 0);
-       free(ps.rows);
-   }
+       evas_object_image_pixels_dirty_set(obj, 0);
+       free(ps.rows);
+     }
    else if (format == EMOTION_FORMAT_BGRA)
      {
-       unsigned char *bgra_data;
-       if (sd->module->bgra_data_get(sd->video, &bgra_data));
-         {
-           evas_object_image_data_set(obj, bgra_data);
-         }
+       if (sd->module->bgra_data_get(sd->video, &bgra_data));
+         {
+            evas_object_image_data_set(obj, bgra_data);
+            evas_object_image_pixels_dirty_set(obj, 0);
+         }
      }
-
    sd->module->frame_done(sd->video);
+ */ 
 }
 
 /*******************************************/
index a94c499..c5328a6 100644 (file)
@@ -239,7 +239,7 @@ em_init(Evas_Object *obj, void **emotion_video)
    ev->video = xine_open_video_driver(ev->decoder, "emotion",
                                      XINE_VISUAL_TYPE_NONE, ev);
    printf("RESULT: xine_open_video_driver() = %p\n", ev->video);
-   //Let xine autodetect the best audio output driver
+   // Let xine autodetect the best audio output driver
    ev->audio = xine_open_audio_driver(ev->decoder, NULL, ev);
 //   ev->audio = xine_open_audio_driver(ev->decoder, "oss", ev);
 // dont use alsa - alsa has oss emulation.   
index d25efb8..a339e51 100644 (file)
@@ -440,7 +440,7 @@ _emotion_frame_display(vo_driver_t *vo_driver, vo_frame_t *vo_frame)
      {
        void *buf;
        int ret;
-       
+
        if (fr->format == XINE_IMGFMT_YUY2)
          {
             _emotion_yuy2_to_bgra32(fr->width, fr->height, fr->vo_frame.base[0], fr->frame.bgra_data);