summaryrefslogtreecommitdiff
path: root/rotord/src/nodes_transform.h
diff options
context:
space:
mode:
Diffstat (limited to 'rotord/src/nodes_transform.h')
-rw-r--r--rotord/src/nodes_transform.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/rotord/src/nodes_transform.h b/rotord/src/nodes_transform.h
index 624ad21..99f553e 100644
--- a/rotord/src/nodes_transform.h
+++ b/rotord/src/nodes_transform.h
@@ -186,6 +186,74 @@ namespace Rotor {
private:
Image still;
};
+#define MIRROR_horiz 1
+#define MIRROR_vert 2
+#define MIRROR_horizR 3
+#define MIRROR_vertR 4
+ class Mirror: public Image_node {
+ public:
+ Mirror(){
+ create_image_input("image input","Image input");
+ create_attribute("mode","Mirror mode","Mirror mode","horiz",{"horiz","vert","horizR","vertR"});
+ title="Mirror";
+ description="Mirror video across a central axis";
+ UID="1fed5b26-2d0a-11e3-9901-4b5ea78a005d";
+ };
+ Mirror(map<string,string> &settings):Mirror() {
+ base_settings(settings);
+ };
+ ~Mirror(){ };
+ Mirror* clone(map<string,string> &_settings) { return new Mirror(_settings);};
+ Image *output(const Frame_spec &frame){
+ Image *in=image_inputs[0]->get(frame);
+ if (in){
+ //copy incoming image **writable
+ image=(*in);
+ //could be more efficient here by only copying once
+ switch (attributes["mode"]->intVal) {
+ case MIRROR_horiz:
+ for (int i=0;i<image.w/2;i++){
+ for (int j=0;j<image.h;j++){
+ for (int k=0;k<3;k++){
+ image.RGBdata[(((j*image.w)+((image.w/2)+i))*3)+k]=image.RGBdata[(((j*image.w)+((image.w/2)-i))*3)+k];
+ }
+ }
+ }
+ break;
+ case MIRROR_vert:
+ for (int i=0;i<image.w;i++){
+ for (int j=0;j<image.h/2;j++){
+ for (int k=0;k<3;k++){
+ image.RGBdata[((((image.h/2+j)*image.w)+i)*3)+k]=image.RGBdata[((((image.h/2-j)*image.w)+i)*3)+k];
+ }
+ }
+ }
+ break;
+ case MIRROR_horizR:
+ for (int i=0;i<image.w/2;i++){
+ for (int j=0;j<image.h;j++){
+ for (int k=0;k<3;k++){
+ image.RGBdata[(((j*image.w)+((image.w/2)-i))*3)+k]=image.RGBdata[(((j*image.w)+((image.w/2)+i))*3)+k];
+ }
+ }
+ }
+ break;
+ case MIRROR_vertR:
+ for (int i=0;i<image.w;i++){
+ for (int j=0;j<image.h/2;j++){
+ for (int k=0;k<3;k++){
+ image.RGBdata[((((image.h/2-j)*image.w)+i)*3)+k]=image.RGBdata[((((image.h/2+j)*image.w)+i)*3)+k];
+ }
+ }
+ }
+ break;
+ }
+ return &image;
+ }
+ return nullptr;
+ }
+ private:
+ };
}
#endif