/* * glitches.c * ---------- * * initially developped for the interpolator */ #include #include #include #include "../floatimg.h" #include "glitches.h" extern int verbosity; /* -------------------------------------------------------------- */ int kill_a_random_line(FloatImg *pvictime, float fval, int bits) { int line, xpos, offset; float ftmp; #if DEBUG_LEVEL fprintf(stderr, ">>> %s ( %p %d )\n", __func__, pvictime, bits); #endif line = rand() % pvictime->height; if (verbosity > 1) { fprintf(stderr, "%s: try to kill line %d\n", __func__, line); } offset = pvictime->width * line; for (xpos=0; xposwidth; xpos++) { if (bits & 1) { ftmp = pvictime->R[offset+xpos] * fval; pvictime->R[offset+xpos] = sqrt(ftmp); } else pvictime->R[offset+xpos] = 0.0; if (bits & 2) { ftmp = pvictime->G[offset+xpos] * fval; pvictime->G[offset+xpos] = sqrt(ftmp); } else pvictime->G[offset+xpos] = 0.0; if (bits & 4) { ftmp = pvictime->B[offset+xpos] * fval; pvictime->B[offset+xpos] = sqrt(ftmp); } else pvictime->B[offset+xpos] = 0.0; } return 0; } /* -------------------------------------------------------------- */ int kill_a_few_lines(FloatImg *who, float fval, int number) { int idx, foo; /* Frag the pixels */ for (idx=0; idxwidth * (y+ypos)); for (x=0; x<8; x++) { sr += picture->R[off]; sg += picture->G[off]; sb += picture->B[off]; off++; } } sr /= 64.0; sg /= 64.0; sb /= 64.0; for (y=0; y<8; y++) { off = xpos + (picture->width * (y+ypos)); for (x=0; x<8; x++) { picture->R[off] = sr; picture->G[off] = sg; picture->B[off] = sb; off++; } } return 0; } /* -------------------------------------------------------------- */ int un_moyen_flou_8x8(FloatImg *picture, int xpos, int ypos) { int i, j, x, y; /* * please add boundary check ? */ for (i=y=0; i<8; i++, y+=8) { for (j=x=0; j<8; j++, x+=8 ) { un_petit_flou_8x8(picture, x+xpos, y+ypos); } } return 0; } /* -------------------------------------------------------------- */ int poke_a_random_pixel(FloatImg *picz, float fval, int kaboo) { return -1; } /* -------------------------------------------------------------- */ int vertical_singlitch(FloatImg *picz, int xpos, float fval, float omega, float phi) { int y, x, w, h; #if DEBUG_LEVEL fprintf(stderr, ">>> %s ( %p %d %f %f )\n", __func__, picz, xpos, omega, phi); #endif h = picz->height; w = picz->width; #define BB 12 for (y=BB; yBB) && (x