Update of /cvsroot/pure-data/externals/pidip/modules
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4125/modules
Modified Files:
Makefile Makefile.in pdp_imgloader.c
Log Message:
PiDiP 0.12.20
Index: Makefile
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/Makefile,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** Makefile 4 Oct 2005 20:37:14 -0000 1.16
--- Makefile 22 Nov 2005 06:18:01 -0000 1.17
***************
*** 21,26 ****
pdp_theorout~.o pdp_cropper.o pdp_background.o \
pdp_mapper.o pdp_theonice~.o pdp_icedthe~.o\
! pdp_fdiff.o pdp_hue.o \
! pdp_live~.o pdp_ffmpeg~.o # pdp_xcanvas.o pdp_aa.o
all_modules: $(OBJECTS)
--- 21,26 ----
pdp_theorout~.o pdp_cropper.o pdp_background.o \
pdp_mapper.o pdp_theonice~.o pdp_icedthe~.o\
! pdp_fdiff.o pdp_hue.o pdp_qtext.o \
! # pdp_xcanvas.o pdp_aa.o
all_modules: $(OBJECTS)
Index: pdp_imgloader.c
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_imgloader.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** pdp_imgloader.c 30 Mar 2004 01:56:16 -0000 1.3
--- pdp_imgloader.c 22 Nov 2005 06:18:01 -0000 1.4
***************
*** 1,5 ****
/*
* PiDiP module
! * Copyright (c) by Yves Degoyon (ydegoyon(a)free.fr)
*
* This program is free software; you can redistribute it and/or modify
--- 1,5 ----
/*
* PiDiP module
! * Copyright (c) by Yves Degoyon (ydegoyon(a)free.fr) and Pablo Martin Caedes ( caedes(a)sindominio.net )
*
* This program is free software; you can redistribute it and/or modify
***************
*** 31,35 ****
#define MAX_ZONES 20
! static char *pdp_imgloader_version = "pdp_imgloader: version 0.1 : image loading object written by ydegoyon(a)free.fr ";
typedef struct _triangle
--- 31,35 ----
#define MAX_ZONES 20
! static char *pdp_imgloader_version = "pdp_imgloader: version 0.2 : image loading object written by ydegoyon(a)free.fr, improved by caedes(a)sindominio.net";
typedef struct _triangle
***************
*** 67,72 ****
--- 67,75 ----
t_int x_iwidth;
t_int x_iheight;
+ t_int x_operation;
+ t_int b_fit;
t_float x_blend;
+ t_int x_quality; // quality forces an additional yuv->rgb conversion in yuv mode
t_triangle x_hiddenzones[ MAX_ZONES ]; // hide these parts of the image
***************
*** 75,78 ****
--- 78,82 ----
} t_pdp_imgloader;
+ static void draw_rgb_image(t_pdp_imgloader *x);
/* load an image */
static void pdp_imgloader_load(t_pdp_imgloader *x, t_symbol *filename, t_floatarg fx, t_floatarg fy)
***************
*** 99,104 ****
x->x_iheight = imlib_image_get_height();
post( "pdp_imgloader : loaded : %s (%dx%d)", filename->s_name, x->x_iwidth, x->x_iheight );
! if ( fx!= 0.) x->x_xoffset = (int) fx;
! if ( fy!= 0.) x->x_yoffset = (int) fy;
}
--- 103,116 ----
x->x_iheight = imlib_image_get_height();
post( "pdp_imgloader : loaded : %s (%dx%d)", filename->s_name, x->x_iwidth, x->x_iheight );
! x->x_xoffset = (int) fx;
! x->x_yoffset = (int) fy;
!
! //if ( fx!= 0.) x->x_xoffset = (int) fx;
! //if ( fy!= 0.) x->x_yoffset = (int) fy;
! DATA8 tablas[768];
! DATA8 *redt,*greent,*bluet;
! redt = &tablas[0];
! greent = &tablas[256];
! bluet = &tablas[512];
}
***************
*** 113,124 ****
}
static void pdp_imgloader_blend(t_pdp_imgloader *x, t_floatarg fblend )
{
! if ( ( fblend > 0.0 ) && ( fblend < 1.0 ) )
{
x->x_blend = fblend;
}
}
!
static t_int pdp_imgloader_isinzone(t_pdp_imgloader *x, t_int px, t_int py, t_int index)
{
--- 125,154 ----
}
+ static void pdp_imgloader_quality(t_pdp_imgloader *x, t_floatarg fqual )
+ {
+ x->x_quality = (int) fqual;
+ }
+
static void pdp_imgloader_blend(t_pdp_imgloader *x, t_floatarg fblend )
{
! if ( ( fblend >= 0.0 ) && ( fblend <= 1.0 ) )
{
x->x_blend = fblend;
}
}
! static void pdp_imgloader_fit(t_pdp_imgloader *x, t_floatarg ffit )
! {
! if ( ( ffit >= 0.0 ) )
! {
! x->b_fit = (int)ffit;
! }
! }
! static void pdp_imgloader_operation(t_pdp_imgloader *x, t_symbol *s)
! {
! if (s == gensym("copy")) x->x_operation = IMLIB_OP_COPY;
! else if (s == gensym("add")) x->x_operation = IMLIB_OP_ADD;
! else if (s == gensym("substract")) x->x_operation = IMLIB_OP_SUBTRACT;
! else if (s == gensym("reshade")) x->x_operation = IMLIB_OP_RESHADE;
! }
static t_int pdp_imgloader_isinzone(t_pdp_imgloader *x, t_int px, t_int py, t_int index)
{
***************
*** 473,480 ****
static void pdp_imgloader_clear(t_pdp_imgloader *x )
{
! //if ( x->x_image != NULL )
! //{
! // imlib_free_image();
! //}
x->x_image = NULL;
}
--- 503,512 ----
static void pdp_imgloader_clear(t_pdp_imgloader *x )
{
! if ( x->x_image != NULL )
! {
! imlib_context_set_image(x->x_image);
! imlib_image_put_back_data(x->x_imdata);
! imlib_free_image();
! }
x->x_image = NULL;
}
***************
*** 493,496 ****
--- 525,568 ----
}
+ static void draw_rgb_image(t_pdp_imgloader *x)
+ {
+ Imlib_Image im_target = imlib_context_get_image();
+ imlib_context_set_operation(x->x_operation);
+
+ int i;
+ DATA8 redt[256], greent[256], bluet[256], alphat[256];
+ Imlib_Color_Modifier colormod = imlib_create_color_modifier();
+ imlib_context_set_color_modifier(colormod);
+ imlib_context_set_image(x->x_image);
+ Imlib_Image image_buf= imlib_clone_image(); //clones for color mod
+ imlib_context_set_image(image_buf);
+ if ( x->x_blend < 1.0 )
+ {
+ imlib_get_color_modifier_tables( redt, greent, bluet, alphat );
+ for ( i=0; i<=255; i++ )
+ {
+ alphat[i]=alphat[i]*x->x_blend;
+ }
+ imlib_set_color_modifier_tables( redt, greent, bluet, alphat );
+ imlib_apply_color_modifier();
+ }
+ imlib_context_set_image(im_target);
+ if (x->b_fit)
+ {
+ imlib_blend_image_onto_image(image_buf,0,0,0,x->x_iwidth,x->x_iheight,x->x_xoffset,x->x_yoffset,
+ x->x_xoffset+x->x_vwidth,x->x_yoffset+x->x_vheight);
+ }
+ else
+ {
+ imlib_blend_image_onto_image(image_buf,0,0,0,x->x_iwidth,x->x_iheight,x->x_xoffset,x->x_yoffset,x->x_iwidth,x->x_iheight);
+ }
+ imlib_context_set_operation(IMLIB_OP_COPY);
+
+ imlib_context_set_image(image_buf);
+ imlib_free_image();
+ imlib_free_color_modifier();
+ imlib_context_set_image(im_target);
+ }
+
static void pdp_imgloader_process_yv12(t_pdp_imgloader *x)
{
***************
*** 517,576 ****
newheader->info.image.width = x->x_vwidth;
newheader->info.image.height = x->x_vheight;
!
! memcpy( newdata, data, (x->x_vsize+(x->x_vsize>>1))<<1 );
!
! if ( x->x_image != NULL ) imlib_context_set_image(x->x_image);
! pY = newdata;
! pV = newdata+x->x_vsize;
! pU = newdata+x->x_vsize+(x->x_vsize>>2);
! for ( py=0; py<x->x_vheight; py++ )
{
! for ( px=0; px<x->x_vwidth; px++ )
! {
! if ( ( x->x_image != NULL )
! && (px >= x->x_xoffset) && ( px < x->x_xoffset + x->x_iwidth )
! && (py >= x->x_yoffset) && ( py < x->x_yoffset + x->x_iheight )
! && ( !(*(x->x_mask+py*x->x_vwidth+px)) )
! )
! {
! y = yuv_RGBtoY(x->x_imdata[(py-x->x_yoffset)*x->x_iwidth+(px-x->x_xoffset)]);
! u = yuv_RGBtoU(x->x_imdata[(py-x->x_yoffset)*x->x_iwidth+(px-x->x_xoffset)]);
! v = yuv_RGBtoV(x->x_imdata[(py-x->x_yoffset)*x->x_iwidth+(px-x->x_xoffset)]);
!
! if ( imlib_image_has_alpha() )
! {
! alpha = (x->x_imdata[(py-x->x_yoffset)*x->x_iwidth+(px-x->x_xoffset)] >> 24)/255;
! }
! else
! {
! alpha = 1.0;
! }
! factor = x->x_blend*alpha;
!
! *(pY) = (int)((1-factor)*(*(pY)) + factor*(y<<7));
if ( (px%2==0) && (py%2==0) )
{
! *(pV) = (int)((1-factor)*(*(pV)) + factor*((v-128)<<8));
! *(pU) = (int)((1-factor)*(*(pU)) + factor*((u-128)<<8));
}
}
- // paint it white ( for debugging )
- /*
- if ( ( abs( py - x->x_hiddenzones[0].a1*px - x->x_hiddenzones[0].b1 ) < 0.1 ) ||
- ( abs( py - x->x_hiddenzones[0].a2*px - x->x_hiddenzones[0].b2 ) < 0.1 ) ||
- ( abs( py - x->x_hiddenzones[0].a3*px - x->x_hiddenzones[0].b3 ) < 0.1 ) )
- {
- *(pY) = (0xff<<7);
- *(pU) = (0xff<<8);
- *(pV) = (0xff<<8);
- }
- */
- pY++;
- if ( (px%2==0) && (py%2==0) )
- {
- pV++;pU++;
- }
- }
}
--- 589,651 ----
newheader->info.image.width = x->x_vwidth;
newheader->info.image.height = x->x_vheight;
! if (x->x_quality && x->x_image != NULL)
{
! Imlib_Image newframe; //only for quality mode
! newframe = imlib_create_image(x->x_vwidth, x->x_vheight);
! imlib_context_set_image(newframe);
! DATA32 *imdata = imlib_image_get_data();
! yuv_Y122RGB( data, imdata, x->x_vwidth, x->x_vheight );
! draw_rgb_image(x);
! yuv_RGB2Y12( imdata, newdata, x->x_vwidth, x->x_vheight );
! imlib_image_put_back_data(imdata);
! imlib_free_image();
! }
! else
! {
! if ( x->x_image != NULL ) imlib_context_set_image(x->x_image);
! memcpy( newdata, data, (x->x_vsize+(x->x_vsize>>1))<<1 );
! pY = newdata;
! pV = newdata+x->x_vsize;
! pU = newdata+x->x_vsize+(x->x_vsize>>2);
! for ( py=0; py<x->x_vheight; py++ )
! {
! for ( px=0; px<x->x_vwidth; px++ )
! {
! if ( ( x->x_image != NULL )
! && (px >= x->x_xoffset) && ( px < x->x_xoffset + x->x_iwidth )
! && (py >= x->x_yoffset) && ( py < x->x_yoffset + x->x_iheight )
! && ( !(*(x->x_mask+py*x->x_vwidth+px)) )
! )
! {
! y = yuv_RGBtoY(x->x_imdata[(py-x->x_yoffset)*x->x_iwidth+(px-x->x_xoffset)]);
! u = yuv_RGBtoU(x->x_imdata[(py-x->x_yoffset)*x->x_iwidth+(px-x->x_xoffset)]);
! v = yuv_RGBtoV(x->x_imdata[(py-x->x_yoffset)*x->x_iwidth+(px-x->x_xoffset)]);
!
!
! if ( imlib_image_has_alpha() )
! {
! alpha = (x->x_imdata[(py-x->x_yoffset)*x->x_iwidth+(px-x->x_xoffset)] >> 24)/255;
! }
! else
! {
! alpha = 1.0;
! }
! factor = x->x_blend*alpha;
!
! *(pY) = (int)((1-factor)*(*(pY)) + factor*(y<<7));
! if ( (px%2==0) && (py%2==0) )
! {
! *(pV) = (int)((1-factor)*(*(pV)) + factor*((v-128)<<8));
! *(pU) = (int)((1-factor)*(*(pU)) + factor*((u-128)<<8));
! }
! }
! pY++;
if ( (px%2==0) && (py%2==0) )
{
! pV++;pU++;
}
+ }
}
}
***************
*** 610,614 ****
// but i don't use this mode
break;
-
default:
/* don't know the type, so dont pdp_imgloader_process */
--- 685,688 ----
***************
*** 626,631 ****
if (s== gensym("register_rw"))
! x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet0, (int)f, pdp_gensym("image/YCrCb/*") );
!
if ((s == gensym("process")) && (-1 != x->x_packet0) && (!x->x_dropped)){
--- 700,709 ----
if (s== gensym("register_rw"))
! switch(pdp_packet_header((int)f)->info.image.encoding)
! {
! case PDP_IMAGE_YV12:
! x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet0, (int)f, pdp_gensym("image/YCrCb/*") );
! break;
! }
if ((s == gensym("process")) && (-1 != x->x_packet0) && (!x->x_dropped)){
***************
*** 663,668 ****
x->x_image = NULL;
! x->x_blend = 1;
x->x_mask = NULL;
for ( ti=0; ti<MAX_ZONES; ti++ )
--- 741,748 ----
x->x_image = NULL;
! x->x_blend = 1.0;
x->x_mask = NULL;
+ x->x_quality = 0;
+ x->b_fit = 0;
for ( ti=0; ti<MAX_ZONES; ti++ )
***************
*** 695,701 ****
--- 775,784 ----
class_addmethod(pdp_imgloader_class, (t_method)pdp_imgloader_yoffset, gensym("yoffset"), A_DEFFLOAT, A_NULL);
class_addmethod(pdp_imgloader_class, (t_method)pdp_imgloader_blend, gensym("blend"), A_DEFFLOAT, A_NULL);
+ class_addmethod(pdp_imgloader_class, (t_method)pdp_imgloader_quality, gensym("quality"), A_DEFFLOAT, A_NULL);
class_addmethod(pdp_imgloader_class, (t_method)pdp_imgloader_hide, gensym("hide"), A_GIMME, A_NULL);
class_addmethod(pdp_imgloader_class, (t_method)pdp_imgloader_rawhide, gensym("rawhide"), A_GIMME, A_NULL);
class_addmethod(pdp_imgloader_class, (t_method)pdp_imgloader_unhide, gensym("unhide"), A_DEFFLOAT, A_NULL);
+ class_addmethod(pdp_imgloader_class, (t_method)pdp_imgloader_operation, gensym("operation"), A_SYMBOL, A_NULL);
+ class_addmethod(pdp_imgloader_class, (t_method)pdp_imgloader_fit, gensym("fit"), A_DEFFLOAT, A_NULL);
class_sethelpsymbol( pdp_imgloader_class, gensym("pdp_imgloader.pd") );
Index: Makefile.in
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/Makefile.in,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** Makefile.in 9 Jul 2005 19:35:40 -0000 1.15
--- Makefile.in 22 Nov 2005 06:18:01 -0000 1.16
***************
*** 21,25 ****
pdp_theorout~.o pdp_cropper.o pdp_background.o \
pdp_mapper.o pdp_theonice~.o pdp_icedthe~.o\
! pdp_fdiff.o pdp_hue.o \
@PDP_STREAMING_OBJECTS@ # pdp_xcanvas.o pdp_aa.o
--- 21,25 ----
pdp_theorout~.o pdp_cropper.o pdp_background.o \
pdp_mapper.o pdp_theonice~.o pdp_icedthe~.o\
! pdp_fdiff.o pdp_hue.o pdp_qtext.o \
@PDP_STREAMING_OBJECTS@ # pdp_xcanvas.o pdp_aa.o