diff --git a/veejay-current/veejay-client/src/gveejay.c b/veejay-current/veejay-client/src/gveejay.c index e003a8be..0875f25b 100644 --- a/veejay-current/veejay-client/src/gveejay.c +++ b/veejay-current/veejay-client/src/gveejay.c @@ -280,6 +280,8 @@ int main(int argc, char *argv[]) gveejay_preview(preview); } +restart_me: + if( launcher ) { reloaded_launcher( hostname, port_num ); @@ -295,6 +297,15 @@ int main(int argc, char *argv[]) gtk_main_iteration(); } + vj_event_list_free(); + + if( gveejay_relaunch() ) { + launcher = 1; + reloaded_restart(); + reloaded_show_launcher(); + goto restart_me; + } + veejay_msg(VEEJAY_MSG_INFO, "See you!"); return 0; diff --git a/veejay-current/veejay-client/src/multitrack.c b/veejay-current/veejay-client/src/multitrack.c index dfa76f73..dd00064a 100644 --- a/veejay-current/veejay-client/src/multitrack.c +++ b/veejay-current/veejay-client/src/multitrack.c @@ -900,9 +900,14 @@ void multitrack_close_track( void *data ) gtk_widget_set_sensitive_(GTK_WIDGET(mt->view[mt->selected]->toggle), FALSE ); gtk_image_clear( GTK_IMAGE(mt->view[mt->selected]->area ) ); mt->view[mt->selected]->status_lock = 0; - } +} +void multitrack_disconnect(void *data) +{ + multitracker_t *mt = (multitracker_t*) data; + //release connection to veejay + gvr_track_disconnect( mt->preview, 0 ); } int multrack_audoadd( void *data, char *hostname, int port_num ) diff --git a/veejay-current/veejay-client/src/multitrack.h b/veejay-current/veejay-client/src/multitrack.h index f7372d58..0b9cec78 100644 --- a/veejay-current/veejay-client/src/multitrack.h +++ b/veejay-current/veejay-client/src/multitrack.h @@ -1,20 +1,20 @@ #ifndef MTRACK_H #define MTRACK_H -void *multitrack_new( - void (*f)(int,char*,int), - int (*g)(GdkPixbuf *, GdkPixbuf *, GtkImage *), - GtkWidget *win,GtkWidget *box,GtkWidget *msg,GtkWidget *button, - gint max_w,gint max_h, - GtkWidget *main_preview_area,void *gui,int threads); - +void *multitrack_new( + void (*f)(int,char*,int), + int (*g)(GdkPixbuf *, GdkPixbuf *, GtkImage *), + GtkWidget *win,GtkWidget *box,GtkWidget *msg,GtkWidget *button, + gint max_w,gint max_h, + GtkWidget *main_preview_area,void *gui,int threads); +void multitrack_disconnect(void *data); void multitrack_set_logo(void *data , GtkWidget *img); int multitrack_add_track( void *data ); void multitrack_close_track( void *data ); int multrack_audoadd( void *data, char *hostname, int port_num ); void multitrack_release_track(void *data, int id, int release_this ); void multitrack_bind_track( void *data, int id, int bind_this ); -void multitrack_sync_simple_cmd2( void *data, int vims, int arg ); +void multitrack_sync_simple_cmd2( void *data, int vims, int arg ); void *multitrack_sync( void * mt ); void multitrack_configure( void *data, float fps, int video_width, int video_height, int *bw, int *bh ); void multitrack_get_preview_dimensions( int w , int h, int *dst_w, int *dst_h ); @@ -23,7 +23,7 @@ int update_multitrack_widgets( void *data, int *array, int track ); int multitrack_locked( void *data); void multitrack_toggle_preview( void *data, int track_id, int status, GtkWidget *img ); void multitrack_set_quality( void *data , int quality ); -void multitrack_sync_start(void *data); +void multitrack_sync_start(void *data); void multitrack_sync_simple_cmd( void *data, int vims, int arg ); void multitrack_resize( void *m , int w, int h ); int mt_set_max_tracks(int tracks); diff --git a/veejay-current/veejay-client/src/vj-api.c b/veejay-current/veejay-client/src/vj-api.c index ea7967e4..962d3652 100644 --- a/veejay-current/veejay-client/src/vj-api.c +++ b/veejay-current/veejay-client/src/vj-api.c @@ -86,7 +86,7 @@ #ifdef STRICT_CHECKING #include #endif - +#define RUP8(num)(((num)+8)&~8) #ifdef ARCH_X86_64 static gpointer castIntToGpointer( int val ) { @@ -1556,7 +1556,7 @@ effect_constr* _effect_new( char *effect_line ) continue; ec->hints[p] = (value_hint*) vj_calloc(sizeof(value_hint)); - ec->hints[p]->description = (char**) vj_calloc(sizeof(char*) * (ec->max[p]+1) ); + ec->hints[p]->description = (char**) vj_calloc(sizeof(char*) * (ec->max[p]+2) ); for(q = 0; q <= ec->max[p]; q ++ ) { int value_hint = 0; @@ -1580,6 +1580,23 @@ void _effect_free( effect_constr *effect ) { if(effect) { + int p; + for( p = 0; p < effect->num_arg; p ++ ) { + free( effect->param_description[p] ); + } + if( effect->hints ) { + for( p = 0; p < effect->num_arg; p ++ ) { + if( effect->hints[p] == NULL ) + continue; + int q; + for( q = 0; effect->hints[p]->description[q] != NULL; q ++ ) { + free( effect->hints[p]->description[q] ); + } + free( effect->hints[p]->description ); + free( effect->hints[p] ); + } + } + free(effect); } } @@ -2137,6 +2154,11 @@ gboolean gveejay_running() return TRUE; } +gboolean gveejay_relaunch() +{ + return (info->watch.state == STATE_QUIT ? FALSE: TRUE); +} + gboolean gveejay_quit( GtkWidget *widget, gpointer user_data) { if(!running_g_) @@ -2202,7 +2224,7 @@ void update_gui(); int veejay_get_sample_image(int id, int type, int wid, int hei) { multi_vims( VIMS_GET_SAMPLE_IMAGE, "%d %d %d %d", id, type, wid, hei ); - uint8_t *data_buffer = (uint8_t*) vj_malloc( sizeof(uint8_t) * wid * hei * 3); + uint8_t *data_buffer = (uint8_t*) vj_malloc( sizeof(uint8_t) * RUP8(wid * hei * 3)); int sample_id = 0; int sample_type =0; gint bw = 0; @@ -2426,7 +2448,7 @@ static gchar *recv_vims_args(int slen, int *bytes_written, int *arg0, int *arg1) unsigned char *result = NULL; if( ret <= 0 || len <= 0 || slen <= 0) return (gchar*)result; - result = (unsigned char*) vj_calloc(sizeof(unsigned char) * (len + 1) ); + result = (unsigned char*) vj_calloc(sizeof(unsigned char) * RUP8(len + 1 + 16) ); *bytes_written = vj_client_read( info->client, V_CMD, result, len ); if( *bytes_written == -1 ) reloaded_schedule_restart(); @@ -6307,6 +6329,11 @@ int veejay_update_multitrack( void *ptr ) if( s->status_list[s->master] == NULL ) { info->watch.w_state = STATE_STOPPED; + free(s->status_list); + free(s->img_list ); + free(s->widths); + free(s->heights); + free(s); return 1; } @@ -7347,6 +7374,8 @@ void vj_gui_wipe() { veejay_memset(info->history_tokens[i],0, sizeof(int) * (STATUS_TOKENS+1)); } + + reset_samplebank(); } GtkWidget *new_bank_pad(GtkWidget *box) @@ -7403,6 +7432,21 @@ void vj_gui_set_geom( int x, int y ) geo_pos_[1] = y; } +void vj_event_list_free() +{ + int i; + for( i = 0; i < VIMS_MAX; i ++ ) { + if( vj_event_list[i].format ) + free(vj_event_list[i].format); + if( vj_event_list[i].descr ) + free(vj_event_list[i].descr); + if( vj_event_list[i].args ) + free(vj_event_list[i].args); + } + + veejay_memset( vj_event_list, 0, sizeof(vj_event_list)); +} + void vj_gui_init(char *glade_file, int launcher, char *hostname, @@ -7894,6 +7938,15 @@ void reloaded_launcher(char *hostname, int port_num) update_spin_value( "button_portnum", port_num ); } +void reloaded_show_launcher() +{ + info->watch.state = STATE_WAIT_FOR_USER; + info->launch_sensitive = TRUE; + + GtkWidget *mw = glade_xml_get_widget_(info->main_window,"veejay_connection" ); + gtk_widget_show(mw); +} + void reloaded_schedule_restart() { info->watch.state = STATE_STOPPED; @@ -7908,6 +7961,8 @@ void reloaded_restart() gtk_widget_hide( mw ); vj_gui_wipe(); + + multitrack_disconnect(info->mt); /* //@ bring up the launcher window gtk_widget_show( cd ); @@ -7946,6 +8001,7 @@ gboolean is_alive( int *do_sync ) { if(info->client) vj_gui_disconnect(); + vj_gui_wipe(); // reloaded_schedule_restart(); reloaded_restart(); *do_sync = 0; @@ -8224,8 +8280,6 @@ void free_samplebank(void) veejay_memset( info->sample_banks, 0, sizeof(sample_bank_t*) * NUM_BANKS ); } -#define RUP8(num)(((num)+8)&~8) - void setup_samplebank(gint num_cols, gint num_rows, GtkWidget *pad, int *idx, int *idy) { GdkRectangle result; diff --git a/veejay-current/veejay-client/src/vj-api.h b/veejay-current/veejay-client/src/vj-api.h index 0937877c..2b7834fe 100644 --- a/veejay-current/veejay-client/src/vj-api.h +++ b/veejay-current/veejay-client/src/vj-api.h @@ -65,13 +65,14 @@ void vj_gui_theme_setup(int default_theme); int vj_img_cb(GdkPixbuf *img ); void vj_fork_or_connect_veejay(); - +void vj_event_list_free(); gboolean gveejay_running(); +gboolean gveejay_relaunch(); int gveejay_user_preview(); void gveejay_preview(int p); int gveejay_restart(); int gveejay_update(); int gveejay_time_to_sync( void *ptr ); int update_gveejay(); - +void reloaded_show_launcher(); #endif