Author: post
Date: 2010-06-19 17:08:28 +0200 (Sat, 19 Jun 2010)
New Revision: 3431

Modified:
   trunk/plugins/demosaic/demosaic.c
Log:
Add (currently unused) fast demosaic routine that halves the size of the image.

Modified: trunk/plugins/demosaic/demosaic.c
===================================================================
--- trunk/plugins/demosaic/demosaic.c   2010-06-19 14:22:21 UTC (rev 3430)
+++ trunk/plugins/demosaic/demosaic.c   2010-06-19 15:08:28 UTC (rev 3431)
@@ -192,9 +192,6 @@
 
        response = rs_filter_response_clone(previous_response);
        g_object_unref(previous_response);
-       output = rs_image16_new(input->w, input->h, 3, 4);
-       rs_filter_response_set_image(response, output);
-       g_object_unref(output);
 
        method = demosaic->method;
        if (rs_filter_request_get_quick(request))
@@ -214,6 +211,14 @@
                        (filters & 0xff) == ((filters >> 24) &0xff)))
                                method = RS_DEMOSAIC_PPG;
 
+       if (method == RS_DEMOSAIC_NONE)
+               output = rs_image16_new(input->w, input->h, 3, 4);
+       else
+               output = rs_image16_new(input->w, input->h, 3, 4);
+       
+       rs_filter_response_set_image(response, output);
+       g_object_unref(output);
+               
 
        switch (method)
        {
@@ -505,6 +510,7 @@
        g_free(t);
 }
 
+#if 1
 gpointer
 start_none_thread(gpointer _thread_info)
 {
@@ -585,6 +591,58 @@
        return NULL; /* Make the compiler shut up - we'll never return */
 }
 
+#else
+
+gpointer
+start_none_thread(gpointer _thread_info)
+{
+       gint row, col, i, j;
+       gushort *src;
+       gushort *dest;
+
+       ThreadInfo* t = _thread_info;
+       guint filters = t->filters;
+       gint col_end = t->output->w;
+
+       for(row=t->start_y; row < t->end_y; row++)
+       {
+               gint src_row = row*2;
+               src = GET_PIXEL(t->image, 0, src_row);
+               dest = GET_PIXEL(t->output, 0, row);
+               gushort *g_src = (FC(src_row, 0) == 1) ? &src[0] : &src[1];
+               gushort *r_src = NULL;
+               gushort *b_src = NULL;
+               for(i = src_row; i < src_row + 2; i++)
+               {
+                       for( j = 0; j < 2; j ++)
+                       {
+                               if (FC(i, j) == 0)
+                                       r_src = GET_PIXEL(t->image, j, i);
+                               if (FC(i, j) == 2)
+                                       b_src = GET_PIXEL(t->image, j, i);
+                       }
+               }
+               
+               g_assert(r_src);
+               g_assert(b_src);
+               for(col=0 ; col < col_end; col++)
+               {
+                       *dest++ = *r_src;
+                       *dest++ = *g_src;
+                       *dest++ = *b_src;
+                       dest++;
+                       r_src+=2;
+                       g_src+=2;
+                       b_src+=2;
+               }
+
+       }
+       g_thread_exit(NULL);
+
+       return NULL; /* Make the compiler shut up - we'll never return */
+}
+#endif
+
 static void
 none_interpolate_INDI(RS_IMAGE16 *in, RS_IMAGE16 *out, const unsigned int 
filters, const int colors)
 {


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to