diff --git a/veejay-current/veejay-client/src/callback.c b/veejay-current/veejay-client/src/callback.c index da8d6db3..35025a08 100644 --- a/veejay-current/veejay-client/src/callback.c +++ b/veejay-current/veejay-client/src/callback.c @@ -301,8 +301,10 @@ void on_toggle_fademethod_toggled(GtkWidget *w, gpointer user_data) GtkWidget *op = glade_xml_get_widget(info->main_window, "manualopacity"); gdouble val = GTK_ADJUSTMENT(GTK_RANGE(op)->adjustment)->value; - - multi_vims( VIMS_CHAIN_MANUAL_FADE, "0 %d %d", (int)(val), is_button_toggled("toggle_fademethod")); + int mode = is_button_toggled("toggle_fademethod"); + int value = ( mode == 1 ? 0xff - (int) val : (int) val ); + + multi_vims( VIMS_CHAIN_MANUAL_FADE, "0 %d %d", value, mode ); } void on_manualopacity_value_changed(GtkWidget *w, gpointer user_data) @@ -311,8 +313,10 @@ void on_manualopacity_value_changed(GtkWidget *w, gpointer user_data) return; gdouble val = GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value; - - multi_vims( VIMS_CHAIN_MANUAL_FADE, "0 %d %d", (int)(val), is_button_toggled("toggle_fademethod")); + int mode = is_button_toggled("toggle_fademethod"); + int value = ( mode == 1 ? 0xff - (int) val : (int) val ); + + multi_vims( VIMS_CHAIN_MANUAL_FADE, "0 %d %d", value,mode ); vj_midi_learning_vims_complex( info->midi, "manualopacity", VIMS_CHAIN_FADE_IN, 0,1 ); diff --git a/veejay-current/veejay-client/src/vj-api.c b/veejay-current/veejay-client/src/vj-api.c index 47913315..b1b84d2c 100644 --- a/veejay-current/veejay-client/src/vj-api.c +++ b/veejay-current/veejay-client/src/vj-api.c @@ -3283,12 +3283,12 @@ static void update_current_slot(int *history, int pm, int last_pm) } - if( pm == MODE_SAMPLE|| pm == MODE_STREAM ) +/* if( pm == MODE_SAMPLE|| pm == MODE_STREAM ) if( history[CHAIN_FADE] != info->status_tokens[CHAIN_FADE] ) { double val = (double) info->status_tokens[CHAIN_FADE]; update_slider_value( "manualopacity", val,0 ); - } + } */ if( fx_anim ) { set_toggle_button("kf_none",1); diff --git a/veejay-current/veejay-server/libsample/sampleadm.c b/veejay-current/veejay-server/libsample/sampleadm.c index 25dcbb64..88945f9a 100644 --- a/veejay-current/veejay-server/libsample/sampleadm.c +++ b/veejay-current/veejay-server/libsample/sampleadm.c @@ -708,9 +708,7 @@ int sample_set_manual_fader( int s1, int value, int method) si->fader_active = 2; si->fader_val = (float) value; si->fader_inc = 0.0; - si->fader_direction = 0.0; si->fade_method = method; - /* inconsistency check */ if(si->effect_toggle == 0) si->effect_toggle = 1; @@ -733,9 +731,9 @@ int sample_set_fader_active( int s1, int nframes, int direction ) { si->fader_inc *= si->fader_direction; /* inconsistency check */ if(si->effect_toggle == 0) - { + { si->effect_toggle = 1; - } + } return 1; } @@ -744,7 +742,6 @@ int sample_reset_fader(int s1) { sample_info *si = sample_get(s1); if(!si) return -1; si->fader_active = 0; - si->fader_val = 0; si->fader_inc = 0; return 1; } @@ -788,11 +785,10 @@ int sample_apply_fader_inc(int s1, int *method) { *method = si->fade_method; if(si->fader_val > 255.0 ) si->fader_val = 255.0; if(si->fader_val < 0.0 ) si->fader_val = 0.0; - return (int) (si->fader_val+0.5); + if(si->fader_direction) return si->fader_val; + return (255-si->fader_val); } - - int sample_set_fader_inc(int s1, float inc) { sample_info *si = sample_get(s1); if(!si) return -1; diff --git a/veejay-current/veejay-server/libstream/vj-tag.c b/veejay-current/veejay-server/libstream/vj-tag.c index e231a0f0..d4ebd38b 100644 --- a/veejay-current/veejay-server/libstream/vj-tag.c +++ b/veejay-current/veejay-server/libstream/vj-tag.c @@ -1479,6 +1479,8 @@ int vj_tag_set_manual_fader(int t1, int value, int method ) tag->fader_inc = 0.0; tag->fader_val = (float)value; tag->fade_method = method; + if(tag->effect_toggle == 0) + tag->effect_toggle = 1; return 1; } @@ -1493,7 +1495,6 @@ int vj_tag_reset_fader(int t1) { if(!tag) return -1; tag->fader_active = 0; tag->fader_inc = 0.0; - tag->fader_val = 0.0; return 1; } @@ -1536,7 +1537,6 @@ int vj_tag_set_fader_active(int t1, int nframes , int direction) { tag->fader_val = 255.0; else tag->fader_val = 0.0; - tag->fader_val = 0.0; tag->fader_inc = (float) (255.0 / (float)nframes ); tag->fader_direction = direction; tag->fader_inc *= direction; diff --git a/veejay-current/veejay-server/veejay/vj-event.c b/veejay-current/veejay-server/veejay/vj-event.c index 9f2480ab..695e3dbf 100644 --- a/veejay-current/veejay-server/veejay/vj-event.c +++ b/veejay-current/veejay-server/veejay/vj-event.c @@ -5255,11 +5255,15 @@ void vj_event_manual_chain_fade(void *ptr, const char format[], va_list ap) if( args[1] < 0 || args[1] > 255) { - veejay_msg(VEEJAY_MSG_ERROR,"Invalid opacity range %d use [0-255] ", args[1]); - return; + veejay_msg(VEEJAY_MSG_DEBUG,"Invalid opacity range %d use [0-255] ", args[1]); + //clamp values + if(args[1] < 0) + args[1] = 0; + if(args[1] > 255) + args[1] = 255; } - args[1] = 255 - args[1]; + args[1] = args[1]; if( SAMPLE_PLAYING(v) && sample_exists(args[0])) { diff --git a/veejay-current/veejay-server/veejay/vj-perform.c b/veejay-current/veejay-server/veejay/vj-perform.c index 50c3f1e8..3f84cd83 100644 --- a/veejay-current/veejay-server/veejay/vj-perform.c +++ b/veejay-current/veejay-server/veejay/vj-perform.c @@ -3026,29 +3026,43 @@ static int vj_perform_post_chain_sample(veejay_t *info, VJFrame *frame) int follow = 0; int fade_method = 0; - vj_perform_supersample_chain( info, frame ); - if(mode == 2 ) // manual fade opacity = (int) sample_get_fader_val(info->uc->sample_id, &fade_method); else // fade in/fade out opacity = (int) sample_apply_fader_inc(info->uc->sample_id, &fade_method); + + int len2 = ( frame->ssm == 1 ? frame->len : frame->uv_len ); + + switch( fade_method ) { + case 1: + vj_perform_supersample_chain( info, frame ); + alpha_transition_apply( frame, temp_buffer,opacity ); + break; + default: + if( opacity > 0 ) { + vj_perform_supersample_chain( info, frame ); + opacity_blend_apply( frame->data ,temp_buffer,frame->len, len2, opacity ); + } + break; + } if(mode != 2) { int dir =sample_get_fader_direction(info->uc->sample_id); if((dir<0) &&(opacity == 0)) { - sample_set_effect_status(info->uc->sample_id, 1); - sample_reset_fader(info->uc->sample_id); + if( fade_method == 0 ) + sample_set_effect_status(info->uc->sample_id, 1); + sample_reset_fader(info->uc->sample_id); if( pvar_.follow_fade ) { follow = 1; } - veejay_msg(VEEJAY_MSG_DEBUG, "Sample Chain Auto Fade Out done"); } if((dir>0) && (opacity==255)) { - sample_set_effect_status(info->uc->sample_id,0); + if( fade_method == 0 ) + sample_set_effect_status(info->uc->sample_id,0); sample_reset_fader(info->uc->sample_id); veejay_msg(VEEJAY_MSG_DEBUG, "Sample Chain Auto fade In done"); if( pvar_.follow_fade ) { @@ -3056,22 +3070,11 @@ static int vj_perform_post_chain_sample(veejay_t *info, VJFrame *frame) } } } else if(mode) { - if( pvar_.follow_fade ) { + if( pvar_.follow_fade ) { follow = 1; } } - int len2 = ( frame->ssm == 1 ? helper_frame->len : helper_frame->uv_len ); - - switch( fade_method ) { - case 1: - alpha_transition_apply( frame, temp_buffer,opacity ); - break; - default: - opacity_blend_apply( frame->data ,temp_buffer,frame->len, len2, opacity ); - break; - } - if( follow ) { //@ find first to jump to int i,k; @@ -3093,16 +3096,14 @@ static int vj_perform_post_chain_sample(veejay_t *info, VJFrame *frame) static int vj_perform_post_chain_tag(veejay_t *info, VJFrame *frame) { - int opacity; + int opacity = 0; //@off int mode = pvar_.fader_active; int follow = 0; int fade_method = 0; - vj_perform_supersample_chain( info, frame ); - if(mode == 2) opacity = (int) vj_tag_get_fader_val(info->uc->sample_id, &fade_method); - else + else if( mode ) opacity = (int) vj_tag_apply_fader_inc(info->uc->sample_id, &fade_method); if( opacity == 0 ) { @@ -3111,22 +3112,39 @@ static int vj_perform_post_chain_tag(veejay_t *info, VJFrame *frame) } } + int len2 = ( frame->ssm == 1 ? frame->len : frame->uv_len ); + + switch( fade_method ) { + case 1: + vj_perform_supersample_chain( info, frame ); + alpha_transition_apply( frame, temp_buffer,opacity ); + break; + default: + if( opacity > 0 ) { + vj_perform_supersample_chain( info, frame ); + opacity_blend_apply( frame->data ,temp_buffer,frame->len, len2, opacity ); + } + break; + } + if(mode != 2) { - int dir = vj_tag_get_fader_direction(info->uc->sample_id); + int dir = vj_tag_get_fader_direction(info->uc->sample_id); + if((dir < 0) && (opacity == 0)) { - vj_tag_set_effect_status(info->uc->sample_id,1); + if( fade_method == 0 ) + vj_tag_set_effect_status(info->uc->sample_id,1); vj_tag_reset_fader(info->uc->sample_id); if( pvar_.follow_fade ) { follow = 1; } - veejay_msg(VEEJAY_MSG_DEBUG, "Stream Chain Auto Fade done"); } if((dir > 0) && (opacity == 255)) { - vj_tag_set_effect_status(info->uc->sample_id,0); + if( fade_method == 0 ) + vj_tag_set_effect_status(info->uc->sample_id,0); vj_tag_reset_fader(info->uc->sample_id); if( pvar_.follow_fade ) { follow = 1; @@ -3139,17 +3157,6 @@ static int vj_perform_post_chain_tag(veejay_t *info, VJFrame *frame) } } - int len2 = ( frame->ssm == 1 ? frame->len : frame->uv_len ); - - switch( fade_method ) { - case 1: - alpha_transition_apply( frame, temp_buffer,opacity ); - break; - default: - opacity_blend_apply( frame->data ,temp_buffer,frame->len, len2, opacity ); - break; - } - if( follow ) { int i; int tmp=0,k; @@ -3392,13 +3399,11 @@ static void vj_perform_finish_chain( veejay_t *info, int is444 ) if(info->uc->playback_mode == VJ_PLAYBACK_MODE_TAG ) { - if( pvar_.fader_active ) - result = vj_perform_post_chain_tag(info,&frame); + result = vj_perform_post_chain_tag(info,&frame); } else if( info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE ) { - if( pvar_.fader_active) - result = vj_perform_post_chain_sample(info,&frame); + result = vj_perform_post_chain_sample(info,&frame); } if( result ) {