diff --git a/veejay-current/veejay-client/share/gveejay.reloaded.glade b/veejay-current/veejay-client/share/gveejay.reloaded.glade index d2d3080f..eb35187c 100644 --- a/veejay-current/veejay-client/share/gveejay.reloaded.glade +++ b/veejay-current/veejay-client/share/gveejay.reloaded.glade @@ -9122,6 +9122,23 @@ YUV (current) 0 + + + Alpha Clear + True + True + False + Clears the alpha channel every frame period when enabled + True + True + + + + True + True + 1 + + True @@ -12687,6 +12704,12 @@ YUV (current) + + + + + + True diff --git a/veejay-current/veejay-client/src/callback.c b/veejay-current/veejay-client/src/callback.c index af091cf0..30aeb660 100644 --- a/veejay-current/veejay-client/src/callback.c +++ b/veejay-current/veejay-client/src/callback.c @@ -4156,4 +4156,12 @@ void on_save_midi_layout1_activate( GtkWidget *w, gpointer data ) void on_clear_midi_layout1_activate( GtkWidget *w, gpointer data ) { vj_midi_reset(info->midi); -} +} + + +void on_alphacomposite_toggled(GtkWidget *widget, gpointer user_data) +{ + multi_vims( VIMS_ALPHA_COMPOSITE,"%d", is_button_toggled( "alphacomposite" )); +} + + diff --git a/veejay-current/veejay-server/veejay/vims.h b/veejay-current/veejay-server/veejay/vims.h index f4db9951..28e53e79 100644 --- a/veejay-current/veejay-server/veejay/vims.h +++ b/veejay-current/veejay-server/veejay/vims.h @@ -106,6 +106,7 @@ enum { VIMS_SYNC_CORRECTION = 334, VIMS_FRAMERATE = 335, VIMS_SUB_RENDER = 336, + VIMS_ALPHA_COMPOSITE = 337, VIMS_VIDEO_PLAY_FORWARD = 10, VIMS_VIDEO_PLAY_BACKWARD = 11, VIMS_VIDEO_PLAY_STOP = 12, diff --git a/veejay-current/veejay-server/veejay/vj-event.c b/veejay-current/veejay-server/veejay/vj-event.c index e4fd746f..a4b4e1ff 100644 --- a/veejay-current/veejay-server/veejay/vj-event.c +++ b/veejay-current/veejay-server/veejay/vj-event.c @@ -10585,3 +10585,20 @@ void vj_event_get_sample_image ( void *ptr, const char format[], va_list ap ) } +void vj_event_alpha_composite(void *ptr, const char format[], va_list ap) +{ + veejay_t *v = (veejay_t*) ptr; + int args[4]; + char *str = NULL; + + P_A(args,str,format,ap); + + if( args[0] == 0 ) { + v->settings->clear_alpha = 0; + veejay_msg(VEEJAY_MSG_INFO,"Enabled alpha channel leak (no clear)"); + } else if (args[0] == 1 ) { + v->settings->clear_alpha = 1; + veejay_msg(VEEJAY_MSG_INFO,"New alpha mask every frame (clearing)"); + } +} + diff --git a/veejay-current/veejay-server/veejay/vj-event.h b/veejay-current/veejay-server/veejay/vj-event.h index 10d27951..1aa4f336 100644 --- a/veejay-current/veejay-server/veejay/vj-event.h +++ b/veejay-current/veejay-server/veejay/vj-event.h @@ -312,4 +312,5 @@ void vj_event_sub_render( void *ptr, const char format[], va_list ap ); void vj_event_send_shm_info( void *ptr, const char format[], va_list ap); void vj_event_connect_split_shm( void *ptr, const char format[], va_list ap ); void vj_event_get_sample_image(void *ptr,const char format[],va_list ap ); +void vj_event_alpha_composite(void *ptr, const char format[], va_list ap ); #endif diff --git a/veejay-current/veejay-server/veejay/vj-eventman.c b/veejay-current/veejay-server/veejay/vj-eventman.c index 8b83388b..ef5e1825 100644 --- a/veejay-current/veejay-server/veejay/vj-eventman.c +++ b/veejay-current/veejay-server/veejay/vj-eventman.c @@ -2483,6 +2483,17 @@ void vj_init_vevo_events(void) NULL ); + index_map_[VIMS_ALPHA_COMPOSITE] = _new_event( + "%d", + VIMS_BEZERK, + "Enable or disable alpha channel clear every frame period", + vj_event_alpha_composite, + 1, + VIMS_ALLOW_ANY, + "0=on 1=off", + 0, + NULL ); + index_map_[ VIMS_CONTINUOUS_PLAY ] = _new_event( "%d", diff --git a/veejay-current/veejay-server/veejay/vj-lib.h b/veejay-current/veejay-server/veejay/vj-lib.h index b62a8e95..de29d079 100644 --- a/veejay-current/veejay-server/veejay/vj-lib.h +++ b/veejay-current/veejay-server/veejay/vj-lib.h @@ -199,6 +199,7 @@ typedef struct { int auto_mute; int pace_correction; int splitscreen; + int clear_alpha; } video_playback_setup; typedef struct { diff --git a/veejay-current/veejay-server/veejay/vj-perform.c b/veejay-current/veejay-server/veejay/vj-perform.c index 14411cc0..aba0e703 100644 --- a/veejay-current/veejay-server/veejay/vj-perform.c +++ b/veejay-current/veejay-server/veejay/vj-perform.c @@ -2515,7 +2515,7 @@ static int vj_perform_sample_complete_buffers(veejay_t * info, int *hint444) } } - if(clear_framebuffer__ == 1) + if(clear_framebuffer__ == 1 || info->settings->clear_alpha == 1) { if( frames[0]->stride[3] > 0 ) veejay_memset( frames[0]->data[3], 0, frames[0]->stride[3] * frames[0]->height );