/*
   Description: This plugin is a sample sequence plugin that filters out lower
   intensity pixels.  I works on one strip as input.
   Author: Kent Mein (mein@cs.umn.edu)
   Website: http://www.cs.umn.edu/~mein/blender/plugins
   Licensing: Public Domain
   Last Modified: Mon Sep  8 21:00:23 CDT 2003
*/

#include "plugin.h"

char name[24]= "simpfilt.c";

/* structure for buttons,
 *  butcode      name           default  min  max  0    */
VarStruct varstr[]= {
   { LABEL,     "In: 1 strips", 0.0, 0.0, 0.0, ""},
   { NUM|INT,     "Intensity", 10.0, 0.0, 255.0, "Our threshold value"},
};

/* The cast struct is for input in the main doit function
   Varstr and Cast must have the same variables in the same order */
typedef struct Cast {
   int dummy,                      /* because of the 'label' button */
   intensity;
} Cast;

/* cfra: the current frame */
float cfra;

void plugin_seq_doit(Cast *, float, float, int, int, ImBuf *, ImBuf *, 
   ImBuf *, ImBuf *);

int plugin_seq_getversion(void) {
   return B_PLUGIN_VERSION;
}

void plugin_but_changed(int but) {
}

void plugin_init() {
}

void plugin_getinfo(PluginInfo *info) {
   info->name= name;
   info->nvars= sizeof(varstr)/sizeof(VarStruct);
   info->cfra= &cfra;
   info->varstr= varstr;
   info->init= plugin_init;
   info->seq_doit= (SeqDoit) plugin_seq_doit;
   info->callback= plugin_but_changed;
}

void plugin_seq_doit(Cast *cast, float facf0, float facf1, int xo, int yo,
        ImBuf *ibuf1, ImBuf *ibuf2, ImBuf *outbuf, ImBuf *use) {
   char *in1=(char *)ibuf1->rect;
   char *out=(char *)outbuf->rect;
   int x,y;

   for(y=0;y<yo;y++) {
      for(x=0;x<xo;x++) {
         if ((in1[0] > cast->intensity) &&
             (in1[1] > cast->intensity) &&
             (in1[2] > cast->intensity)) {
            out[0] = out[1] = out[2] = 0;
            out[3] = 255;
         } else {
            out[0] = in1[0];
            out[1] = in1[1];
            out[2] = in1[2];
            out[3] = in1[3];
         }
	 in1+=4;
	 out+=4;
      }
   }
}

