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