forked from bartvdbraak/blender
Re-added the Luma keyer after realizing channeldid not exactly same capability and could not without sgnificant change.
This commit is contained in:
parent
0535c2c8ad
commit
611b583acc
@ -251,6 +251,7 @@ void set_node_shader_lamp_loop(void (*lamp_loop_func)(struct ShadeInput *, str
|
|||||||
#define CMP_NODE_DISPLACE 245
|
#define CMP_NODE_DISPLACE 245
|
||||||
#define CMP_NODE_COMBHSVA 246
|
#define CMP_NODE_COMBHSVA 246
|
||||||
#define CMP_NODE_MATH 247
|
#define CMP_NODE_MATH 247
|
||||||
|
#define CMP_NODE_LUMA_MATTE 248
|
||||||
|
|
||||||
|
|
||||||
/* filter types */
|
/* filter types */
|
||||||
|
@ -895,6 +895,12 @@ bNode *nodeAddNodeType(bNodeTree *ntree, int type, bNodeTree *ngroup)
|
|||||||
c->fstrength= 0.0f;
|
c->fstrength= 0.0f;
|
||||||
node->custom1= 1; /* RGB channel */
|
node->custom1= 1; /* RGB channel */
|
||||||
node->custom2= 2; /* Green Channel */
|
node->custom2= 2; /* Green Channel */
|
||||||
|
}
|
||||||
|
else if(type==CMP_NODE_LUMA_MATTE){
|
||||||
|
NodeChroma *c= MEM_callocN(sizeof(NodeChroma), "node chroma");
|
||||||
|
node->storage=c;
|
||||||
|
c->t1= 0.0f;
|
||||||
|
c->t2= 0.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1311,7 +1311,7 @@ static void node_composit_exec_texture(void *data, bNode *node, bNodeStack **in,
|
|||||||
|
|
||||||
if(node->id) {
|
if(node->id) {
|
||||||
/* first make the preview image */
|
/* first make the preview image */
|
||||||
CompBuf *prevbuf= alloc_compbuf(140, 140, CB_RGBA, 1); // alloc
|
CompBuf *prevbuf= alloc_compbuf(140, 140, CB_RGBA, 1); /* alloc */
|
||||||
|
|
||||||
prevbuf->rect_procedural= texture_procedural;
|
prevbuf->rect_procedural= texture_procedural;
|
||||||
prevbuf->node= node;
|
prevbuf->node= node;
|
||||||
@ -1320,7 +1320,7 @@ static void node_composit_exec_texture(void *data, bNode *node, bNodeStack **in,
|
|||||||
free_compbuf(prevbuf);
|
free_compbuf(prevbuf);
|
||||||
|
|
||||||
if(out[0]->hasoutput) {
|
if(out[0]->hasoutput) {
|
||||||
CompBuf *stackbuf= alloc_compbuf(140, 140, CB_VAL, 1); // alloc
|
CompBuf *stackbuf= alloc_compbuf(140, 140, CB_VAL, 1); /* alloc */
|
||||||
|
|
||||||
stackbuf->rect_procedural= texture_procedural;
|
stackbuf->rect_procedural= texture_procedural;
|
||||||
stackbuf->node= node;
|
stackbuf->node= node;
|
||||||
@ -1328,7 +1328,7 @@ static void node_composit_exec_texture(void *data, bNode *node, bNodeStack **in,
|
|||||||
out[0]->data= stackbuf;
|
out[0]->data= stackbuf;
|
||||||
}
|
}
|
||||||
if(out[1]->hasoutput) {
|
if(out[1]->hasoutput) {
|
||||||
CompBuf *stackbuf= alloc_compbuf(140, 140, CB_RGBA, 1); // alloc
|
CompBuf *stackbuf= alloc_compbuf(140, 140, CB_RGBA, 1); /* alloc */
|
||||||
|
|
||||||
stackbuf->rect_procedural= texture_procedural;
|
stackbuf->rect_procedural= texture_procedural;
|
||||||
stackbuf->node= node;
|
stackbuf->node= node;
|
||||||
@ -1387,7 +1387,7 @@ static void node_composit_exec_normal(void *data, bNode *node, bNodeStack **in,
|
|||||||
else if(out[1]->hasoutput) {
|
else if(out[1]->hasoutput) {
|
||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[0]->data;
|
CompBuf *cbuf= in[0]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); /* allocs */
|
||||||
|
|
||||||
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_normal, CB_VEC3);
|
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_normal, CB_VEC3);
|
||||||
|
|
||||||
@ -1521,7 +1521,7 @@ static void node_composit_exec_curve_rgb(void *data, bNode *node, bNodeStack **i
|
|||||||
else {
|
else {
|
||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[1]->data;
|
CompBuf *cbuf= in[1]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
if(in[0]->data)
|
if(in[0]->data)
|
||||||
composit2_pixel_processor(node, stackbuf, in[1]->data, in[1]->vec, in[0]->data, in[0]->vec, do_curves_fac, CB_RGBA, CB_VAL);
|
composit2_pixel_processor(node, stackbuf, in[1]->data, in[1]->vec, in[0]->data, in[0]->vec, do_curves_fac, CB_RGBA, CB_VAL);
|
||||||
@ -1645,7 +1645,7 @@ static void node_composit_exec_hue_sat(void *data, bNode *node, bNodeStack **in,
|
|||||||
else {
|
else {
|
||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[1]->data;
|
CompBuf *cbuf= in[1]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
composit2_pixel_processor(node, stackbuf, cbuf, in[1]->vec, in[0]->data, in[0]->vec, do_hue_sat_fac, CB_RGBA, CB_VAL);
|
composit2_pixel_processor(node, stackbuf, cbuf, in[1]->vec, in[0]->data, in[0]->vec, do_hue_sat_fac, CB_RGBA, CB_VAL);
|
||||||
|
|
||||||
@ -1705,7 +1705,7 @@ static void node_composit_exec_mix_rgb(void *data, bNode *node, bNodeStack **in,
|
|||||||
else {
|
else {
|
||||||
/* make output size of first available input image */
|
/* make output size of first available input image */
|
||||||
CompBuf *cbuf= in[1]->data?in[1]->data:in[2]->data;
|
CompBuf *cbuf= in[1]->data?in[1]->data:in[2]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
composit3_pixel_processor(node, stackbuf, in[1]->data, in[1]->vec, in[2]->data, in[2]->vec, in[0]->data, fac, do_mix_rgb, CB_RGBA, CB_RGBA, CB_VAL);
|
composit3_pixel_processor(node, stackbuf, in[1]->data, in[1]->vec, in[2]->data, in[2]->vec, in[0]->data, fac, do_mix_rgb, CB_RGBA, CB_RGBA, CB_VAL);
|
||||||
|
|
||||||
@ -1876,7 +1876,7 @@ static void node_composit_exec_filter(void *data, bNode *node, bNodeStack **in,
|
|||||||
if(in[1]->data) {
|
if(in[1]->data) {
|
||||||
/* make output size of first available input image */
|
/* make output size of first available input image */
|
||||||
CompBuf *cbuf= in[1]->data;
|
CompBuf *cbuf= in[1]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, cbuf->type, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, cbuf->type, 1); /* allocs */
|
||||||
|
|
||||||
/* warning note: xof and yof are applied in pixelprocessor, but should be copied otherwise? */
|
/* warning note: xof and yof are applied in pixelprocessor, but should be copied otherwise? */
|
||||||
stackbuf->xof= cbuf->xof;
|
stackbuf->xof= cbuf->xof;
|
||||||
@ -1956,7 +1956,7 @@ static void node_composit_exec_valtorgb(void *data, bNode *node, bNodeStack **in
|
|||||||
else {
|
else {
|
||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[0]->data;
|
CompBuf *cbuf= in[0]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_colorband_composit, CB_VAL);
|
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_colorband_composit, CB_VAL);
|
||||||
|
|
||||||
@ -2012,7 +2012,7 @@ static void node_composit_exec_rgbtobw(void *data, bNode *node, bNodeStack **in,
|
|||||||
else {
|
else {
|
||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[0]->data;
|
CompBuf *cbuf= in[0]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); /* allocs */
|
||||||
|
|
||||||
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_rgbtobw, CB_RGBA);
|
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_rgbtobw, CB_RGBA);
|
||||||
|
|
||||||
@ -2134,7 +2134,7 @@ static void node_composit_exec_sephsva(void *data, bNode *node, bNodeStack **in,
|
|||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[0]->data;
|
CompBuf *cbuf= in[0]->data;
|
||||||
|
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
/* convert the RGB stackbuf to an HSV representation */
|
/* convert the RGB stackbuf to an HSV representation */
|
||||||
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_sephsva, CB_RGBA);
|
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_sephsva, CB_RGBA);
|
||||||
@ -2209,7 +2209,7 @@ static void node_composit_exec_combrgba(void *data, bNode *node, bNodeStack **in
|
|||||||
else if (in[2]->data) cbuf = in[2]->data;
|
else if (in[2]->data) cbuf = in[2]->data;
|
||||||
else cbuf = in[3]->data;
|
else cbuf = in[3]->data;
|
||||||
|
|
||||||
stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec,
|
composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec,
|
||||||
in[2]->data, in[2]->vec, in[3]->data, in[3]->vec,
|
in[2]->data, in[2]->vec, in[3]->data, in[3]->vec,
|
||||||
@ -2257,7 +2257,7 @@ static void node_composit_exec_setalpha(void *data, bNode *node, bNodeStack **in
|
|||||||
else {
|
else {
|
||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[0]->data;
|
CompBuf *cbuf= in[0]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
if(in[1]->data==NULL && in[1]->vec[0]==1.0f) {
|
if(in[1]->data==NULL && in[1]->vec[0]==1.0f) {
|
||||||
/* pass on image */
|
/* pass on image */
|
||||||
@ -2351,7 +2351,7 @@ static void node_composit_exec_alphaover(void *data, bNode *node, bNodeStack **i
|
|||||||
else {
|
else {
|
||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[1]->data;
|
CompBuf *cbuf= in[1]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
if(node->custom1)
|
if(node->custom1)
|
||||||
composit3_pixel_processor(node, stackbuf, in[1]->data, in[1]->vec, in[2]->data, in[2]->vec, in[0]->data, in[0]->vec, do_alphaover_key, CB_RGBA, CB_RGBA, CB_VAL);
|
composit3_pixel_processor(node, stackbuf, in[1]->data, in[1]->vec, in[2]->data, in[2]->vec, in[0]->data, in[0]->vec, do_alphaover_key, CB_RGBA, CB_RGBA, CB_VAL);
|
||||||
@ -2424,7 +2424,7 @@ static void node_composit_exec_zcombine(void *data, bNode *node, bNodeStack **in
|
|||||||
else {
|
else {
|
||||||
/* make output size of first input image */
|
/* make output size of first input image */
|
||||||
CompBuf *cbuf= in[0]->data;
|
CompBuf *cbuf= in[0]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
CompBuf *zbuf, *mbuf;
|
CompBuf *zbuf, *mbuf;
|
||||||
float *fp;
|
float *fp;
|
||||||
int x;
|
int x;
|
||||||
@ -2529,7 +2529,7 @@ static void node_composit_exec_map_value(void *data, bNode *node, bNodeStack **i
|
|||||||
else {
|
else {
|
||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[0]->data;
|
CompBuf *cbuf= in[0]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); /* allocs */
|
||||||
|
|
||||||
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_map_value, CB_VAL);
|
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_map_value, CB_VAL);
|
||||||
|
|
||||||
@ -2613,7 +2613,7 @@ static void blur_single_image(CompBuf *new, CompBuf *img, float scale, NodeBlurD
|
|||||||
float *src, *dest;
|
float *src, *dest;
|
||||||
|
|
||||||
/* helper image */
|
/* helper image */
|
||||||
work= alloc_compbuf(imgx, imgy, img->type, 1); // allocs
|
work= alloc_compbuf(imgx, imgy, img->type, 1); /* allocs */
|
||||||
|
|
||||||
/* horizontal */
|
/* horizontal */
|
||||||
rad = scale*(float)nbd->sizex;
|
rad = scale*(float)nbd->sizex;
|
||||||
@ -3103,7 +3103,7 @@ static void node_composit_exec_blur(void *data, bNode *node, bNodeStack **in, bN
|
|||||||
if(in[1]->data) {
|
if(in[1]->data) {
|
||||||
|
|
||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
new= alloc_compbuf(img->x, img->y, img->type, 1); // allocs
|
new= alloc_compbuf(img->x, img->y, img->type, 1); /* allocs */
|
||||||
|
|
||||||
blur_with_reference(new, img, in[1]->data, node->storage);
|
blur_with_reference(new, img, in[1]->data, node->storage);
|
||||||
|
|
||||||
@ -3119,7 +3119,7 @@ static void node_composit_exec_blur(void *data, bNode *node, bNodeStack **in, bN
|
|||||||
CompBuf *gammabuf;
|
CompBuf *gammabuf;
|
||||||
|
|
||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
new= alloc_compbuf(img->x, img->y, img->type, 1); // allocs
|
new= alloc_compbuf(img->x, img->y, img->type, 1); /* allocs */
|
||||||
|
|
||||||
if(nbd->gamma) {
|
if(nbd->gamma) {
|
||||||
gammabuf= dupalloc_compbuf(img);
|
gammabuf= dupalloc_compbuf(img);
|
||||||
@ -4253,7 +4253,7 @@ static void node_composit_exec_sepyuva(void *data, bNode *node, bNodeStack **in,
|
|||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[0]->data;
|
CompBuf *cbuf= in[0]->data;
|
||||||
|
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
/* convert the RGB stackbuf to an YUV representation */
|
/* convert the RGB stackbuf to an YUV representation */
|
||||||
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_sepyuva, CB_RGBA);
|
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_sepyuva, CB_RGBA);
|
||||||
@ -4327,7 +4327,7 @@ static void node_composit_exec_sepycca(void *data, bNode *node, bNodeStack **in,
|
|||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[0]->data;
|
CompBuf *cbuf= in[0]->data;
|
||||||
|
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
/* convert the RGB stackbuf to an HSV representation */
|
/* convert the RGB stackbuf to an HSV representation */
|
||||||
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_sepycca, CB_RGBA);
|
composit1_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, do_sepycca, CB_RGBA);
|
||||||
@ -4828,7 +4828,7 @@ static void do_channel_matte(bNode *node, float *out, float *in)
|
|||||||
/*flip because 0.0 is transparent, not 1.0*/
|
/*flip because 0.0 is transparent, not 1.0*/
|
||||||
alpha=1-alpha;
|
alpha=1-alpha;
|
||||||
|
|
||||||
//test range
|
/* test range*/
|
||||||
if(alpha>c->t1) {
|
if(alpha>c->t1) {
|
||||||
alpha=in[3]; /*whatever it was prior */
|
alpha=in[3]; /*whatever it was prior */
|
||||||
}
|
}
|
||||||
@ -4838,6 +4838,7 @@ static void do_channel_matte(bNode *node, float *out, float *in)
|
|||||||
else {/*blend */
|
else {/*blend */
|
||||||
alpha=(alpha-c->t2)/(c->t1-c->t2);
|
alpha=(alpha-c->t2)/(c->t1-c->t2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* don't make something that was more transparent less transparent */
|
/* don't make something that was more transparent less transparent */
|
||||||
if (alpha<in[3]) {
|
if (alpha<in[3]) {
|
||||||
@ -4922,6 +4923,85 @@ static bNodeType cmp_node_channel_matte={
|
|||||||
/* execfunc */ node_composit_exec_channel_matte
|
/* execfunc */ node_composit_exec_channel_matte
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* ******************* Luma Matte Node ********************************* */
|
||||||
|
static bNodeSocketType cmp_node_luma_matte_in[]={
|
||||||
|
{SOCK_RGBA,1,"Image", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
|
||||||
|
{-1,0,""}
|
||||||
|
};
|
||||||
|
|
||||||
|
static bNodeSocketType cmp_node_luma_matte_out[]={
|
||||||
|
{SOCK_RGBA,0,"Image", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
|
||||||
|
{SOCK_VALUE,0,"Matte",0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
|
||||||
|
{-1,0,""}
|
||||||
|
};
|
||||||
|
|
||||||
|
static void do_luma_matte(bNode *node, float *out, float *in)
|
||||||
|
{
|
||||||
|
NodeChroma *c=(NodeChroma *)node->storage;
|
||||||
|
float alpha;
|
||||||
|
|
||||||
|
alpha=0.0;
|
||||||
|
|
||||||
|
/* test range*/
|
||||||
|
if(in[0]>c->t1) {
|
||||||
|
alpha=1.0;
|
||||||
|
}
|
||||||
|
else if(in[1]<c->t2){
|
||||||
|
alpha=0.0;
|
||||||
|
}
|
||||||
|
else {/*blend */
|
||||||
|
alpha=(in[0]-c->t2)/(c->t1-c->t2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* don't make something that was more transparent less transparent */
|
||||||
|
if (alpha<in[3]) {
|
||||||
|
out[3]=alpha;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
out[3]=in[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void node_composit_exec_luma_matte(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
|
||||||
|
{
|
||||||
|
CompBuf *cbuf;
|
||||||
|
CompBuf *outbuf;
|
||||||
|
|
||||||
|
if(in[0]->hasinput==0) return;
|
||||||
|
if(in[0]->data==NULL) return;
|
||||||
|
if(out[0]->hasoutput==0 && out[1]->hasoutput==0) return;
|
||||||
|
|
||||||
|
cbuf=in[0]->data;
|
||||||
|
/*is it an RGBA image?*/
|
||||||
|
if(cbuf->type==CB_RGBA) {
|
||||||
|
|
||||||
|
outbuf=dupalloc_compbuf(cbuf);
|
||||||
|
|
||||||
|
composit1_pixel_processor(node, outbuf, cbuf, in[1]->vec, do_rgba_to_yuva, CB_RGBA);
|
||||||
|
composit1_pixel_processor(node, outbuf, outbuf, in[1]->vec, do_luma_matte, CB_RGBA);
|
||||||
|
composit1_pixel_processor(node, outbuf, outbuf, in[1]->vec, do_yuva_to_rgba, CB_RGBA);
|
||||||
|
|
||||||
|
generate_preview(node, outbuf);
|
||||||
|
out[0]->data=outbuf;
|
||||||
|
out[1]->data=valbuf_from_rgbabuf(outbuf, CHAN_A);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bNodeType cmp_node_luma_matte={
|
||||||
|
/* type code */ CMP_NODE_LUMA_MATTE,
|
||||||
|
/* name */ "Luminence Key",
|
||||||
|
/* width+range */ 200, 80, 250,
|
||||||
|
/* class+opts */ NODE_CLASS_MATTE, NODE_PREVIEW|NODE_OPTIONS,
|
||||||
|
/* input sock */ cmp_node_luma_matte_in,
|
||||||
|
/* output sock */ cmp_node_luma_matte_out,
|
||||||
|
/* storage */ "NodeChroma",
|
||||||
|
/* execfunc */ node_composit_exec_luma_matte
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* **************** COMBINE YCCA ******************** */
|
/* **************** COMBINE YCCA ******************** */
|
||||||
@ -4978,7 +5058,7 @@ static void node_composit_exec_combycca(void *data, bNode *node, bNodeStack **in
|
|||||||
else if (in[2]->data) cbuf = in[2]->data;
|
else if (in[2]->data) cbuf = in[2]->data;
|
||||||
else cbuf = in[3]->data;
|
else cbuf = in[3]->data;
|
||||||
|
|
||||||
stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec,
|
composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec,
|
||||||
in[2]->data, in[2]->vec, in[3]->data, in[3]->vec,
|
in[2]->data, in[2]->vec, in[3]->data, in[3]->vec,
|
||||||
@ -5047,7 +5127,7 @@ static void node_composit_exec_combyuva(void *data, bNode *node, bNodeStack **in
|
|||||||
else if (in[2]->data) cbuf = in[2]->data;
|
else if (in[2]->data) cbuf = in[2]->data;
|
||||||
else cbuf = in[3]->data;
|
else cbuf = in[3]->data;
|
||||||
|
|
||||||
stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec,
|
composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec,
|
||||||
in[2]->data, in[2]->vec, in[3]->data, in[3]->vec,
|
in[2]->data, in[2]->vec, in[3]->data, in[3]->vec,
|
||||||
@ -5115,7 +5195,7 @@ static void node_composit_exec_combhsva(void *data, bNode *node, bNodeStack **in
|
|||||||
else if (in[2]->data) cbuf = in[2]->data;
|
else if (in[2]->data) cbuf = in[2]->data;
|
||||||
else cbuf = in[3]->data;
|
else cbuf = in[3]->data;
|
||||||
|
|
||||||
stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec,
|
composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec,
|
||||||
in[2]->data, in[2]->vec, in[3]->data, in[3]->vec,
|
in[2]->data, in[2]->vec, in[3]->data, in[3]->vec,
|
||||||
@ -5423,7 +5503,7 @@ static void node_composit_exec_mapuv(void *data, bNode *node, bNodeStack **in, b
|
|||||||
|
|
||||||
cbuf= typecheck_compbuf(cbuf, CB_RGBA);
|
cbuf= typecheck_compbuf(cbuf, CB_RGBA);
|
||||||
uvbuf= typecheck_compbuf(uvbuf, CB_VEC3);
|
uvbuf= typecheck_compbuf(uvbuf, CB_VEC3);
|
||||||
stackbuf= alloc_compbuf(uvbuf->x, uvbuf->y, CB_RGBA, 1); // allocs;
|
stackbuf= alloc_compbuf(uvbuf->x, uvbuf->y, CB_RGBA, 1); /* allocs */;
|
||||||
|
|
||||||
do_mapuv(stackbuf, cbuf, uvbuf, 0.05f*(float)node->custom1);
|
do_mapuv(stackbuf, cbuf, uvbuf, 0.05f*(float)node->custom1);
|
||||||
|
|
||||||
@ -5493,7 +5573,7 @@ static void node_composit_exec_idmask(void *data, bNode *node, bNodeStack **in,
|
|||||||
if(cbuf->type!=CB_VAL)
|
if(cbuf->type!=CB_VAL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); // allocs;
|
stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); /* allocs */;
|
||||||
|
|
||||||
do_idmask(stackbuf, cbuf, (float)node->custom1);
|
do_idmask(stackbuf, cbuf, (float)node->custom1);
|
||||||
|
|
||||||
@ -5613,7 +5693,7 @@ static void node_composit_exec_displace(void *data, bNode *node, bNodeStack **in
|
|||||||
|
|
||||||
cbuf= typecheck_compbuf(cbuf, CB_RGBA);
|
cbuf= typecheck_compbuf(cbuf, CB_RGBA);
|
||||||
vecbuf= typecheck_compbuf(vecbuf, CB_VEC3);
|
vecbuf= typecheck_compbuf(vecbuf, CB_VEC3);
|
||||||
stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
|
stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
|
||||||
|
|
||||||
do_displace(stackbuf, cbuf, vecbuf, in[1]->vec, in[2]->vec, in[3]->vec);
|
do_displace(stackbuf, cbuf, vecbuf, in[1]->vec, in[2]->vec, in[3]->vec);
|
||||||
|
|
||||||
@ -5758,7 +5838,7 @@ static void node_composit_exec_math(void *data, bNode *node, bNodeStack **in, bN
|
|||||||
else {
|
else {
|
||||||
/* make output size of input image */
|
/* make output size of input image */
|
||||||
CompBuf *cbuf= in[0]->data;
|
CompBuf *cbuf= in[0]->data;
|
||||||
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); // allocs
|
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); /* allocs */
|
||||||
|
|
||||||
composit2_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec, do_math, CB_VAL, CB_VAL);
|
composit2_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec, do_math, CB_VAL, CB_VAL);
|
||||||
|
|
||||||
@ -5828,6 +5908,7 @@ bNodeType *node_all_composit[]= {
|
|||||||
&cmp_node_chroma,
|
&cmp_node_chroma,
|
||||||
&cmp_node_channel_matte,
|
&cmp_node_channel_matte,
|
||||||
&cmp_node_color_spill,
|
&cmp_node_color_spill,
|
||||||
|
&cmp_node_luma_matte,
|
||||||
|
|
||||||
&cmp_node_translate,
|
&cmp_node_translate,
|
||||||
&cmp_node_rotate,
|
&cmp_node_rotate,
|
||||||
|
@ -1391,6 +1391,29 @@ static int node_composit_buts_channel_matte(uiBlock *block, bNodeTree *ntree, bN
|
|||||||
return 80;
|
return 80;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int node_composit_buts_luma_matte(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
|
||||||
|
{
|
||||||
|
if(block) {
|
||||||
|
NodeChroma *c=node->storage;
|
||||||
|
|
||||||
|
/*tolerance sliders */
|
||||||
|
uiDefButF(block, NUMSLI, B_NODE_EXEC+node->nr, "High ",
|
||||||
|
butr->xmin, butr->ymin+20.0, butr->xmax-butr->xmin, 20,
|
||||||
|
&c->t1, 0.0f, 1.0f, 100, 0, "Values higher than this setting are 100% opaque");
|
||||||
|
uiDefButF(block, NUMSLI, B_NODE_EXEC+node->nr, "Low ",
|
||||||
|
butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20,
|
||||||
|
&c->t2, 0.0f, 1.0f, 100, 0, "Values lower than this setting are 100% keyed");
|
||||||
|
uiBlockEndAlign(block);
|
||||||
|
|
||||||
|
/*keep t2 (low) less than t1 (high) */
|
||||||
|
if(c->t2 > c->t1) {
|
||||||
|
c->t2=c->t1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 40;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int node_composit_buts_map_uv(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
|
static int node_composit_buts_map_uv(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
|
||||||
{
|
{
|
||||||
if(block) {
|
if(block) {
|
||||||
@ -1595,6 +1618,9 @@ static void node_composit_set_butfunc(bNodeType *ntype)
|
|||||||
case CMP_NODE_CHANNEL_MATTE:
|
case CMP_NODE_CHANNEL_MATTE:
|
||||||
ntype->butfunc= node_composit_buts_channel_matte;
|
ntype->butfunc= node_composit_buts_channel_matte;
|
||||||
break;
|
break;
|
||||||
|
case CMP_NODE_LUMA_MATTE:
|
||||||
|
ntype->butfunc= node_composit_buts_luma_matte;
|
||||||
|
break;
|
||||||
case CMP_NODE_MAP_UV:
|
case CMP_NODE_MAP_UV:
|
||||||
ntype->butfunc= node_composit_buts_map_uv;
|
ntype->butfunc= node_composit_buts_map_uv;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user