Ejemplo n.º 1
0
static void chromastore_frame(VJFrame *src, int w, int h, int n, int no_reverse)
{
	int strides[4] = { (w * h), (w*h), (w*h) , 0 };
	uint8_t *dest[4] = {
		cframe[0] + (w*h*cnframe),
		cframe[1] + (w*h*cnframe),
		cframe[2] + (w*h*cnframe),
       		NULL	};

	if (!cnreverse) {
		vj_frame_copy( src->data, dest, strides ); 
    } else {
		vj_frame_copy( dest, src->data, strides );
   	}

	if (cnreverse)
		cnframe--;
	else
		cnframe++;

	if (cnframe >= n) {
		if (no_reverse == 0) {
		    cnreverse = 1;
		    cnframe = n - 1;
			if(cnframe < 0 )
				cnframe = 0;
		} else {
		    cnframe = 0;
		}
    	}

   	if (cnframe == 0)
		cnreverse = 0;

}
Ejemplo n.º 2
0
void tracer_apply(VJFrame *frame, VJFrame *frame2,
		  int width, int height, int opacity, int n)
{

    unsigned int x, len = frame->len;
    unsigned int op1 = (opacity > 255) ? 255 : opacity;
    unsigned int op0 = 255 - op1;
    unsigned int uv_len = frame->uv_len;
	uint8_t *Y = frame->data[0];
	uint8_t *Cb= frame->data[1];
	uint8_t *Cr= frame->data[2];
    uint8_t *Y2 = frame2->data[0];
 	uint8_t *Cb2= frame2->data[1];
	uint8_t *Cr2= frame2->data[2];

    if (trace_counter == 0)
	{
		for (x = 0; x < len; x++)
		{
		    Y[x] = func_opacity(Y[x], Y2[x], op0, op1);
		}
		for (x = 0; x < uv_len; x++)
		{
	   	 	Cb[x] = func_opacity(Cb[x], Cb2[x], op0, op1);
	   	 	Cr[x] = func_opacity(Cr[x], Cr2[x], op0, op1);
		}
		int strides[4] = { len, uv_len, uv_len, 0 };
		vj_frame_copy( frame->data, trace_buffer, strides );
    }
	else
	{
		for (x = 0; x < len; x++)
		{
	  	      Y[x] =
			((op0 * Y[x]) + (op1 * trace_buffer[0][x])) >> 8; // / 255;
		}
		for (x = 0; x < uv_len; x++)
		{
	   	 	Cb[x] =
		 	 ((op0 * Cb[x]) + (op1 * trace_buffer[1][x])) >> 8 ; // 255;
	    		Cr[x] =
		 	 ((op0 * Cr[x]) + (op1 * trace_buffer[2][x])) >> 8 ; // 255;
		}
		int strides[4] = { len, uv_len, uv_len, 0 };
		vj_frame_copy( frame->data, trace_buffer, strides );
    }

    trace_counter++;
    if (trace_counter >= n)
		trace_counter = 0;


}
Ejemplo n.º 3
0
int		vj_shm_write( void *vv, uint8_t *frame[4], int plane_sizes[4] )
{
	vj_shm_t *v         = (vj_shm_t*) vv;
	vj_shared_data *data = (vj_shared_data*) v->sms;

	//@ call wrlock_wrlock N times before giving up ..

	int res = pthread_rwlock_wrlock( &data->rwlock );
	if( res == -1 ) {
		veejay_msg(0, "SHM locking error: %s",strerror(errno));
		return -1;
	}

	uint8_t *ptr = ( (uint8_t*) v->sms) + HEADER_LENGTH;
	
	uint8_t *dst[4] = { ptr, ptr + plane_sizes[0], ptr + plane_sizes[0] + plane_sizes[1], NULL };
	plane_sizes[3] = 0;
	vj_frame_copy( frame, dst, plane_sizes );


//	veejay_memcpy( ptr , frame[0], plane_sizes[0] );
//	veejay_memcpy( ptr + plane_sizes[0], frame[1], plane_sizes[1] );
//	veejay_memcpy( ptr + plane_sizes[0] +
//					plane_sizes[1], frame[2], plane_sizes[2] );

	res = pthread_rwlock_unlock( &data->rwlock );
	if( res == -1 ) {
		veejay_msg(0, "SHM locking error: %s",strerror(errno));
		return -1;
	}

	return 0;
}
Ejemplo n.º 4
0
int		vj_shm_read( void *vv , uint8_t *dst[4] )
{
	vj_shm_t *v         = (vj_shm_t*) vv;
	vj_shared_data *data = (vj_shared_data*) v->sms;
	int res = pthread_rwlock_rdlock( &data->rwlock );
	if( res == -1 ) {
	//	veejay_msg(0, "%s",strerror(errno));
		return -1;
	}
	uint8_t *ptr = ( (uint8_t*) v->sms ) + HEADER_LENGTH;
	
	int len = data->header[0] * data->header[1]; //@ 
	int uv_len = len / 2;

	uint8_t *in[4] = { ptr, ptr + len, ptr + len + uv_len,NULL };
	int strides[4]    = { len, uv_len, uv_len,0 };
	vj_frame_copy( in, dst, strides );

//	veejay_memcpy( dst[0], ptr, len );
//	veejay_memcpy( dst[1], ptr + len, uv_len );
//	veejay_memcpy( dst[2], ptr + len + uv_len, uv_len );
	
	res = pthread_rwlock_unlock( &data->rwlock );
	if( res == -1 ) {
	//	veejay_msg(0, "%s",strerror(errno));
		return -1;
	}

	return 0;
}
Ejemplo n.º 5
0
void scratcher_apply(VJFrame *src,
		     int width, int height, int opacity, int n,
		     int no_reverse)
{

    unsigned int len = src->len;
    unsigned int op1 = (opacity > 255) ? 255 : opacity;
    int offset = len * nframe;
    int uv_len = src->uv_len;
    int uv_offset = uv_len * nframe;
	VJFrame copy;

    if (nframe== 0) {
		int strides[4] = { len, uv_len, uv_len, 0 };
		vj_frame_copy( src->data, frame, strides );
        return;
    }
	
	VJFrame srcB;
	veejay_memcpy( &srcB, src, sizeof(VJFrame) );
	srcB.data[0] = frame[0] + offset;
	srcB.data[1] = frame[1] + uv_offset;
	srcB.data[2] = frame[2] + uv_offset;
	opacity_applyN( src, &srcB, src->width,src->height, opacity );
	copy.uv_len = src->uv_len;
	copy.data[0] = frame[0];
	copy.data[1] = frame[1];
	copy.data[2] = frame[2];
   	
	store_frame( &copy, width, height, n, no_reverse);

}
Ejemplo n.º 6
0
void store_frame(VJFrame *src, int w, int h, int n, int no_reverse)
{
	int uv_len = src->uv_len;
	int strides[4] = { (w * h), uv_len, uv_len , 0 };
	uint8_t *Y = src->data[0];
	uint8_t *Cb= src->data[1];
	uint8_t *Cr= src->data[2];

	uint8_t *dest[4] = {
		frame[0] + (w*h*nframe),
		frame[1] + (uv_len*nframe),
		frame[2] + (uv_len*nframe),
       		NULL	};

	if (!nreverse) {
		vj_frame_copy( src->data, dest, strides ); 
    	} else {
		vj_frame_copy( dest, src->data, strides );
    	}

	if (nreverse)
		nframe--;
	else
		nframe++;



	if (nframe >= n) {
		if (no_reverse == 0) {
		    nreverse = 1;
		    nframe = n - 1;
		} else {
		    nframe = 0;
		}
    	}

   	if (nframe == 0)
		nreverse = 0;

}
Ejemplo n.º 7
0
static void store_frame(VJFrame *src, int n, int no_reverse)
{
	const int len = src->len;
	int uv_len = src->uv_len;
	int strides[4] = { len, uv_len, uv_len , 0 };

	uint8_t *dest[4] = {
		frame[0] + (len*nframe),
		frame[1] + (uv_len*nframe),
		frame[2] + (uv_len*nframe),
       	NULL
	};

	if (!nreverse) {
		vj_frame_copy( src->data, dest, strides ); 
    }
	else {
		vj_frame_copy( dest, src->data, strides );
    }

	if (nreverse)
		nframe--;
	else
		nframe++;

	if (nframe >= n) {
		if (no_reverse == 0) {
		    nreverse = 1;
		    nframe = n - 1;
			if(nframe < 0)
				nframe = 0;
		} else {
		    nframe = 0;
		}
    }

   	if (nframe == 0)
		nreverse = 0;

}
Ejemplo n.º 8
0
void chameleon_apply( VJFrame *frame, int mode)
{
	const int len = frame->len;
	VJFrame source;
	int strides[4] = { len, len, len, 0 };
	vj_frame_copy( frame->data, tmpimage, strides );

	source.data[0] = tmpimage[0];
	source.data[1] = tmpimage[1];
	source.data[2] = tmpimage[2];
	source.len = len;

	uint32_t activity = 0;
	int auto_switch = 0;
	int tmp1,tmp2;
	if( motionmap_active() )
	{
		motionmap_scale_to( 32,32,1,1, &tmp1,&tmp2, &n__, &N__ );
		auto_switch = 1;
		activity = motionmap_activity();
	}
	else
	{
		N__ = 0;
		n__ = 0;
	}

	if( n__ == N__ || n__ == 0 )
		auto_switch = 0;
	

	if(auto_switch)
	{
		if( activity <= 40 )
		{
			// into the wall
			drawDisappearing( &source, frame );
		}
		else
		{
			// out of the wall
			drawAppearing( &source, frame );
		}
	}

	if( mode == 0 )
		drawDisappearing( &source, frame );
	else
		drawAppearing( &source, frame );
}
Ejemplo n.º 9
0
void zoom_apply( VJFrame *frame, int width, int height, int x, int y, int factor, int dir)
{
	if( zoom_[0] != x || zoom_[1] != y || zoom_[2] != factor || !zoom_vp_ || dir != zoom_[3])
	{
		if( zoom_vp_ )
			viewport_destroy( zoom_vp_ );
		zoom_vp_ = viewport_fx_init( VP_QUADZOOM, width,height,x,y,factor, dir );
		if(!zoom_vp_ )
			return;
		zoom_[0] = x; zoom_[1] = y; zoom_[2] = factor; zoom_[3] = dir;
	}

	int strides[4] = { (width*height),(width*height),(width*height), 0 };
	vj_frame_copy( frame->data, zoom_private_, strides );

	viewport_process_dynamic( zoom_vp_, zoom_private_, frame->data );
	
}
Ejemplo n.º 10
0
int	chameleonblend_prepare( uint8_t *map[4], int width, int height )
{
	if(!bgimage[0])
		return 0;
	int strides[4] = { width*height,width*height,width*height, 0 };
	vj_frame_copy( map, bgimage, strides );
	
	VJFrame tmp;
	veejay_memset( &tmp, 0, sizeof(VJFrame));
	tmp.data[0] = bgimage[0];
	tmp.width = width;
	tmp.height = height;

	//@ 3x3 blur
	softblur_apply( &tmp, width,height,0);

	veejay_msg(2, "Chameleon BlendTV: Snapped background mask");
	return 1;
}
Ejemplo n.º 11
0
void radcor_apply( VJFrame *frame, int alpaX, int alpaY, int dir, int alpha)
{
	int i,j;
	int i2,j2;
	const unsigned int width = frame->width;
	const unsigned int height = frame->height;
	const int len = frame->len;
	double x,y,x2,x3,y2,y3,r;
	uint8_t *Y = frame->data[0];
	uint8_t *Cb = frame->data[1];
	uint8_t *Cr = frame->data[2];
	uint8_t *A = frame->data[3];
	int nx = width;
	int ny = height;
	int nxout = nx;
	int nyout = ny;

	//@ copy source image to internal buffer 
	uint8_t *dest[4] = { badbuf, badbuf + len, badbuf + len + len, badbuf + len + len + len };
	int strides[4] = { len, len, len, 0 };
	if( alpha )
		strides[3] = len;

	vj_frame_copy( frame->data, dest, strides );

	uint8_t *Yi = badbuf;
	uint8_t *Cbi = badbuf + len;
	uint8_t *Cri = badbuf + len + len;
	uint8_t *Ai = badbuf + len + len + len;

	double alphax = alpaX / (double) 1000.0;
	double alphay = alpaY / (double) 1000.0;

	if(!dir)
	{
		alphax *= -1.0; // inward, outward, change sign
		alphay *= -1.0;
	}

	vj_frame_clear1( Y, 0, len );
	vj_frame_clear1( Cb, 128, len );
	vj_frame_clear1( Cr, 128, len );
	if( alpha )
		vj_frame_clear1( A, 0, len );

	int update_map = 0;

	if( map_upd[0] != alpaX || map_upd[1] != alpaY || map_upd[2] != dir )
	{
		map_upd[0] = alpaX;
		map_upd[1] = alpaY;
		map_upd[2] = dir;
		update_map = 1;
	}

	if( update_map )
	{
		for( i = 0; i < nyout; i ++ )
		{
			for( j = 0; j < nxout; j ++ )
			{	
				x = ( 2 * j - nxout ) / (double) nxout;
				y = ( 2 * i - nyout ) / (double) nyout;

				r = x*x + y*y;
				x3 = x / (1 - alphax * r);
				y3 = y / (1 - alphay * r); 
				x2 = x / (1 - alphax * (x3*x3+y3*y3));
				y2 = y / (1 - alphay * (x3*x3+y3*y3));
				i2 = (y2 + 1) * ny / 2;
				j2 = (x2 + 1) * nx / 2;
	
				if( i2 >= 0 && i2 < ny && j2 >= 0 && j2 < nx )
					Map[ i * nxout + j ] = i2 * nx + j2;
				else
					Map[ i * nxout + j ] = 0;
			}
		}
	}

	// process
	for( i = 0; i < height; i ++ )
	{
		for( j = 0; j < width ; j ++ )
		{
			Y[ i * width + j ] = Yi[ Map[i * width + j] ];
			Cb[ i * width + j ] = Cbi[ Map[i * width + j] ];
			Cr[ i * width + j ] = Cri[ Map[i * width + j] ];
		}
	}

	if( alpha)
	{
		for( i = 0; i < len; i ++ )
		{
			A[i] = Ai[ Map[i] ];
		}
	}
}
Ejemplo n.º 12
0
void timedistort_apply( VJFrame *frame, int width, int height, int val)
{
	unsigned int i;
	const int len = (width * height);

	uint8_t *Y = frame->data[0];
	uint8_t *Cb = frame->data[1];
	uint8_t *Cr = frame->data[2];

	uint8_t *diff = nonmap;
	uint8_t *prev = nonmap + len;
	int interpolate = 1;
	int motion = 0;
	int tmp1,tmp2;
	if(motionmap_active()) //@ use motion mapping frame
	{
		motionmap_scale_to( 255,255,1,1,&tmp1,&tmp2, &n__,&N__ );
		motion = 1;
		diff = motionmap_bgmap();
	}
	else
	{
		n__ = 0;
		N__ = 0;

		if(!have_bg)
		{
			vj_frame_copy1( Y, prev, len );
			VJFrame smooth;
			veejay_memcpy(&smooth,frame, sizeof(VJFrame));
			smooth.data[0] = prev;
			softblur_apply(&smooth, width, height, 0 );
			veejay_memset( diff, 0, len );
			have_bg = 1;
			return;
		}
		else
		{
			/*for( i = 0; i < len ; i ++ )
			{
				diff[i] = (abs(prev[i] - Y[i])> val ? 0xff: 0 );
			}*/
			vje_diff_plane( prev, Y, diff, val, len );
			vj_frame_copy1( Y, prev, len );
			VJFrame smooth;
			veejay_memcpy(&smooth,frame, sizeof(VJFrame));
			smooth.data[0] = prev;
			softblur_apply(&smooth, width, height, 0 );
		}
	}
	
	if( n__ == N__ || n__ == 0 )
		interpolate = 0;

	//@ process
	uint8_t *planeTables[4] = { planetableY[plane], planetableU[plane], planetableV[plane], NULL };
	int strides[4] = { len, len, len, 0 };
	vj_frame_copy( frame->data, planeTables, strides );

	uint8_t *p = warptime[ warptimeFrame	] + width + 1;
	uint8_t *q = warptime[ warptimeFrame ^ 1] + width + 1;

	unsigned int x,y;
	for( y = height - 2; y > 0 ; y -- )
	{
		for( x = width - 2; x > 0; x -- )
		{
			i = *(p - width) + *(p-1) + *(p+1) + *(p + width);
			if( i > 3 ) i-= 3;
			p++;
			*q++ = i >> 2;
	
		}
		p += 2;
		q += 2;
	}
	q = warptime[ warptimeFrame ^ 1 ] + width + 1;
	int n_plane = 0;
	for( i = 0; i < len; i ++ )
	{
		if( diff[i] ) {
			q[i] = PLANES - 1;
		}

		n_plane = ( plane - q[i] + PLANES ) & (PLANES-1);

		Y[i]  = planetableY[ n_plane ][i];
		Cb[i] = planetableU[ n_plane ][i];
		Cr[i] = planetableV[ n_plane ][i];
	}

	plane ++;
	plane = plane & (PLANES-1);
	warptimeFrame ^= 1;

	if(interpolate)
		motionmap_interpolate_frame( frame, N__,n__ );
	if(motion)
		motionmap_store_frame(frame);

}
Ejemplo n.º 13
0
void magicmirror_apply( VJFrame *frame, int w, int h, int vx, int vy, int d, int n )
{
	double c1 = (double)vx;
	double c2 = (double)vy;
	int motion = 0;
	if( motionmap_active())
	{
		motionmap_scale_to( 100,100,0,0, &d, &n, &n__, &N__ );
		motion = 1;
	}
	else
	{
		n__ = 0;
		N__ = 0;
	}

	double c3 = (double)d * 0.001;
	unsigned int dx,dy,x,y,p,q,len=w*h;
	double c4 = (double)n * 0.001;
	int changed = 0;
  	uint8_t *Y = frame->data[0];
	uint8_t *Cb= frame->data[1];
	uint8_t *Cr= frame->data[2];
	int interpolate = 1;

	if( n__ == N__ || n__ == 0)
		interpolate = 0;

	if( d != last[1] )
	{
		changed = 1; last[1] =d;
	}
	if( n != last[0] )
	{
		changed = 1; last[0] = n;
	}

	if(changed==1)
	{	// degrees x or y changed, need new sin
		for(x=0; x < w ; x++)
		{
			double res;
			fast_sin(res,(double)(c3*x));
			funhouse_x[x] = res;
			//funhouse_x[x] = sin(c3 * x);  
		}
		for(y=0; y < h; y++)
		{
			double res;
			fast_sin(res,(double)(c4*y));
			funhouse_y[y] = res;
			//funhouse_y[y] = sin(c4 * y);
		}
	}

	int strides[4] = { len,len,len, 0 };
	vj_frame_copy( frame->data, magicmirrorbuf, strides );

	for(x=0; x < w; x++)
	{
		dx = x + funhouse_x[x] * c1;
		if(dx < 0) dx += w;
		if(dx < 0) dx = 0; else if (dx >= w) dx = w-1;
		cache_x[x] = dx;
	}
	for(y=0; y < h; y++)
	{
		dy = y + funhouse_y[y] * c2;
		if(dy < 0) dy += h;
		if(dy < 0) dy = 0; else if (dy >= h) dy = h-1;
		cache_y[y] = dy;
	}

	for(y=1; y < h-1; y++)
	{
		for(x=1; x < w-1; x++)
		{
			p = cache_y[y] * w + cache_x[x];
			q = y * w + x;
			Y[q] = magicmirrorbuf[0][p];
			Cb[q] = magicmirrorbuf[1][p];
			Cr[q] = magicmirrorbuf[2][p];
		}
	}

	if( interpolate )
	{
		motionmap_interpolate_frame( frame, N__, n__ );
	}

	if( motion )
	{
		motionmap_store_frame(frame);
	}

}
Ejemplo n.º 14
0
void neighbours3_apply( VJFrame *frame, int width, int height, int brush_size, int intensity_level, int mode )
{
	int x,y; 
	const double intensity = intensity_level / 255.0;
	uint8_t *Y = tmp_buf[0];
	uint8_t *Y2 = tmp_buf[1];
	uint8_t *dstY = frame->data[0];
	uint8_t *dstCb = frame->data[1];
	uint8_t *dstCr = frame->data[2];
	// keep luma
	vj_frame_copy1( frame->data[0],Y2, frame->len );

	if(mode)
	{
		int strides[4] = { 0, frame->len, frame->len, 0 };
		uint8_t *dest[4] = { NULL, chromacity[0], chromacity[1], NULL };
		vj_frame_copy( frame->data, dest, strides );
	}

	// premultiply intensity map
	for( y = 0 ; y < frame->len ; y ++ )
		Y[y] = (uint8_t) ( (double)Y2[y] * intensity );

	if(!mode)
	{
		for( y = 0; y < height; y ++ )
		{
			for( x = 0; x < width; x ++ )
			{
				*(dstY)++ = evaluate_pixel_b(
						x,y,
						brush_size,
						intensity,
						width,
						height,
						Y,
						Y2
				);
			}
		}
		veejay_memset( frame->data[1], 128, frame->len );
		veejay_memset( frame->data[2], 128, frame->len );
	} 
	else
	{
		pixel_t tmp;
		for( y = 0; y < height; y ++ )
		{
			for( x = 0; x < width; x ++ )
			{
				tmp = evaluate_pixel_bc(
						x,y,
						brush_size,
						intensity,
						width,
						height,
						Y,
						Y2,
						chromacity[0],
						chromacity[1]
					);
				*(dstY++) = tmp.y;
				*(dstCb++) = tmp.u;
				*(dstCr++) = tmp.v;
			}
		}
	}
}