Ejemplo n.º 1
0
vj_effect *lumablend_init(int w, int h)
{
    vj_effect *ve = (vj_effect *) vj_calloc(sizeof(vj_effect));
    ve->num_params = 4;
    ve->defaults = (int *) vj_calloc(sizeof(int) * ve->num_params);	/* default values */
    ve->limits[0] = (int *) vj_calloc(sizeof(int) * ve->num_params);	/* min */
    ve->limits[1] = (int *) vj_calloc(sizeof(int) * ve->num_params);	/* max */
    ve->limits[0][0] = 0;	/* type */
    ve->limits[1][0] = 2;
    if(vj_task_available() )
      ve->limits[1][0] = 1; /* no blur */
    ve->limits[0][1] = 0;	/* threshold 1 */
    ve->limits[1][1] = 255;
    ve->limits[0][2] = 0;	/* threshold 2 */
    ve->limits[1][2] = 255;
    ve->limits[0][3] = 0;	/*opacity */
    ve->limits[1][3] = 255;
    ve->defaults[0] = 1;
    ve->defaults[1] = 0;
    ve->defaults[2] = 35;
    ve->defaults[3] = 150;
    ve->description = "Opacity by Threshold";
    ve->extra_frame = 1;
    ve->parallel = 0;
    ve->sub_format = 1;
    ve->parallel = 1;
	ve->has_user = 0;
	ve->param_description = vje_build_param_list(ve->num_params, "Mode", "Threshold A", "Threshold B", "Opacity" );

    return ve;
}
Ejemplo n.º 2
0
void	average_blend_blend_apply( uint8_t *src1[3], uint8_t *src2[3], int len, int uv_len, int average_blend )
{
	if( vj_task_available() ) {
		vj_task_set_from_args( len,uv_len );
		vj_task_set_param( average_blend,0 );
		vj_task_run( src1, src2, NULL, NULL, 3, (performer_job_routine) &average_blend_apply_job );
	} else {
		average_blend_blend_apply1( src1,src2,len,uv_len,average_blend );
	}
}
Ejemplo n.º 3
0
void average_blend_applyN( VJFrame *frame, VJFrame *frame2,int average_blend)
{
	if( vj_task_available() ) {
		vj_task_set_from_frame( frame );
		vj_task_set_param( average_blend,0 );
		vj_task_run( frame->data, frame2->data, NULL, NULL, 3, (performer_job_routine) &average_blend_apply_job );
	} else {
		average_blend_apply1( frame,frame2,average_blend );
	}
}
Ejemplo n.º 4
0
void	alpha_transition_apply( VJFrame *frame, uint8_t *B[4], int time_index )
{
	if(vj_task_available() ) {
		vj_task_set_from_frame( frame );
		vj_task_set_param( time_index,0 );
		vj_task_run( frame->data, B, NULL, NULL, 4, (performer_job_routine) &alpha_transition_apply_job );
	} else { 
		alpha_blend_transition(
			frame->data[0],frame->data[1],frame->data[2], frame->data[3],
			B[0],B[1],B[2],B[3],
			frame->len,
			frame->width,
			time_index,
			SMOOTH_DEFAULT,
		    USE_FROM_A
		);
	}
}
Ejemplo n.º 5
0
void motionmap_apply( VJFrame *frame, int threshold, int limit1, int draw, int history, int decay, int interpol, int last_act_level, int act_decay )
{
	unsigned int i;
	const unsigned int width = frame->width;
	const unsigned int height = frame->height;
	const int len = frame->len;
	uint8_t *Cb = frame->data[1];
	uint8_t *Cr = frame->data[2];
	const int limit = limit1 * 10;

	if(!have_bg) {
		veejay_msg(VEEJAY_MSG_ERROR,"Motion Mapping: Snap the background frame with VIMS 339 or mask button in reloaded");
		return;
	}

	if( act_decay != last_act_decay ) {
		last_act_decay = act_decay;
		activity_decay = act_decay;
	}

	// run difference algorithm over multiple threads
	if( vj_task_available() ) {
		VJFrame task;
		task.stride[0] = len; // plane length 
		task.stride[1] = len;
		task.stride[2] = len;
		task.stride[3] = 0;
		task.data[0] = bg_image; // plane 0 = background image 
		task.data[1] = frame->data[0]; // plane 1 = luminance channel 
		task.data[2] = prev_img; // plane 2 = luminance channel of previous frame
		task.data[3] = NULL;
		task.ssm = 1; // all planes are the same size 
		task.format = frame->format; // not important, but cannot be 0
		task.shift_v = 0;
		task.shift_h = 0;
		task.uv_width = width;
		task.uv_height = height;
		task.width = width; // dimensions
		task.height = height;

		uint8_t *dst[4] = { binary_img, diff_img, diff_img + RUP8(len), NULL };

		vj_task_set_from_frame( &task );
		vj_task_set_param( threshold, 0 );

		vj_task_run( task.data, dst, NULL,NULL,4, (performer_job_routine) &motionmap_find_diff_job );
	}
	else { 
		motionmap_calc_diff( (const uint8_t*) bg_image, prev_img, (const uint8_t*) frame->data[0], diff_img, diff_img + RUP8(len), binary_img, len, threshold );

	}

	if( draw )
	{
		vj_frame_clear1( Cb, 128, len );
		vj_frame_clear1( Cr, 128, len );
		vj_frame_copy1( binary_img, frame->data[0], len );
		running = 0;
		stored_frame = 0;
		scale_lock = 0;
		return;
	}

	int32_t activity_level = motionmap_activity_level( binary_img, width, height );
	int32_t avg_actlvl = 0;
	int32_t min = INT_MAX;
	int32_t local_max = 0;


	current_his_len = history;
	current_decay = decay;

	histogram_[ (nframe_%current_his_len) ] = activity_level;

	for( i = 0; i < current_his_len; i ++ )
	{
		avg_actlvl += histogram_[i];
		if(histogram_[i] > max ) max = histogram_[i];
		if(histogram_[i] < min ) min = histogram_[i];
		if(histogram_[i] > local_max) local_max = histogram_[i];
	}	

	avg_actlvl = avg_actlvl / current_his_len;
	if( avg_actlvl < limit ) { 
		avg_actlvl = 0;
	}

	nframe_ ++;

	switch( last_act_level ) {
		case 0:
			if( (nframe_ % current_his_len)==0 )
			{
				key1_ = min;
				key2_ = max;
				keyp_ = keyv_;
				keyv_ = avg_actlvl;
				global_max = max;
			}
			break;
		case 1:
			key1_ = min;
			key2_ = max;
			keyv_ = local_max;
			global_max = local_max;
			break;
		case 2:
			key1_ = min;
			key2_ = max;
			keyp_ = keyv_;
			keyv_ = avg_actlvl;
			global_max = max;
			break;
		case 3:
			if( (nframe_ % current_his_len)==0 )
			{
				key1_ = min;
				key2_ = max;
				keyp_ = keyv_;
				keyv_ = avg_actlvl;
				global_max = max;
			}
			
			if( avg_actlvl == 0 )
				scale_lock = 1;
			else 
				scale_lock = 0;
	
			//reset to normal after "acitivity_decay"  ticks
			if( scale_lock && act_decay > 0) {
				activity_decay --;
				if( activity_decay == 0 ) {
					last_act_decay = 0;
					scale_lock = 0;
				}
			}

			break;
	}


	running = 1;
	do_interpolation = interpol;
}