issue #90, bring up relauncher window when connection to veejay is lost and solved some memory leaks

This commit is contained in:
c0ntrol
2017-01-08 16:04:29 +01:00
parent 2b0accca54
commit caceb545e7
5 changed files with 89 additions and 18 deletions

View File

@@ -280,6 +280,8 @@ int main(int argc, char *argv[])
gveejay_preview(preview); gveejay_preview(preview);
} }
restart_me:
if( launcher ) if( launcher )
{ {
reloaded_launcher( hostname, port_num ); reloaded_launcher( hostname, port_num );
@@ -295,6 +297,15 @@ int main(int argc, char *argv[])
gtk_main_iteration(); 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!"); veejay_msg(VEEJAY_MSG_INFO, "See you!");
return 0; return 0;

View File

@@ -900,9 +900,14 @@ void multitrack_close_track( void *data )
gtk_widget_set_sensitive_(GTK_WIDGET(mt->view[mt->selected]->toggle), FALSE ); gtk_widget_set_sensitive_(GTK_WIDGET(mt->view[mt->selected]->toggle), FALSE );
gtk_image_clear( GTK_IMAGE(mt->view[mt->selected]->area ) ); gtk_image_clear( GTK_IMAGE(mt->view[mt->selected]->area ) );
mt->view[mt->selected]->status_lock = 0; 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 ) int multrack_audoadd( void *data, char *hostname, int port_num )

View File

@@ -1,20 +1,20 @@
#ifndef MTRACK_H #ifndef MTRACK_H
#define MTRACK_H #define MTRACK_H
void *multitrack_new( void *multitrack_new(
void (*f)(int,char*,int), void (*f)(int,char*,int),
int (*g)(GdkPixbuf *, GdkPixbuf *, GtkImage *), int (*g)(GdkPixbuf *, GdkPixbuf *, GtkImage *),
GtkWidget *win,GtkWidget *box,GtkWidget *msg,GtkWidget *button, GtkWidget *win,GtkWidget *box,GtkWidget *msg,GtkWidget *button,
gint max_w,gint max_h, gint max_w,gint max_h,
GtkWidget *main_preview_area,void *gui,int threads); GtkWidget *main_preview_area,void *gui,int threads);
void multitrack_disconnect(void *data);
void multitrack_set_logo(void *data , GtkWidget *img); void multitrack_set_logo(void *data , GtkWidget *img);
int multitrack_add_track( void *data ); int multitrack_add_track( void *data );
void multitrack_close_track( void *data ); void multitrack_close_track( void *data );
int multrack_audoadd( void *data, char *hostname, int port_num ); int multrack_audoadd( void *data, char *hostname, int port_num );
void multitrack_release_track(void *data, int id, int release_this ); void multitrack_release_track(void *data, int id, int release_this );
void multitrack_bind_track( void *data, int id, int bind_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_sync( void * mt );
void multitrack_configure( void *data, float fps, int video_width, int video_height, int *bw, int *bh ); 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 ); 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); int multitrack_locked( void *data);
void multitrack_toggle_preview( void *data, int track_id, int status, GtkWidget *img ); void multitrack_toggle_preview( void *data, int track_id, int status, GtkWidget *img );
void multitrack_set_quality( void *data , int quality ); 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_sync_simple_cmd( void *data, int vims, int arg );
void multitrack_resize( void *m , int w, int h ); void multitrack_resize( void *m , int w, int h );
int mt_set_max_tracks(int tracks); int mt_set_max_tracks(int tracks);

View File

@@ -86,7 +86,7 @@
#ifdef STRICT_CHECKING #ifdef STRICT_CHECKING
#include <assert.h> #include <assert.h>
#endif #endif
#define RUP8(num)(((num)+8)&~8)
#ifdef ARCH_X86_64 #ifdef ARCH_X86_64
static gpointer castIntToGpointer( int val ) static gpointer castIntToGpointer( int val )
{ {
@@ -1556,7 +1556,7 @@ effect_constr* _effect_new( char *effect_line )
continue; continue;
ec->hints[p] = (value_hint*) vj_calloc(sizeof(value_hint)); 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 ++ ) for(q = 0; q <= ec->max[p]; q ++ )
{ {
int value_hint = 0; int value_hint = 0;
@@ -1580,6 +1580,23 @@ void _effect_free( effect_constr *effect )
{ {
if(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); free(effect);
} }
} }
@@ -2137,6 +2154,11 @@ gboolean gveejay_running()
return TRUE; return TRUE;
} }
gboolean gveejay_relaunch()
{
return (info->watch.state == STATE_QUIT ? FALSE: TRUE);
}
gboolean gveejay_quit( GtkWidget *widget, gpointer user_data) gboolean gveejay_quit( GtkWidget *widget, gpointer user_data)
{ {
if(!running_g_) if(!running_g_)
@@ -2202,7 +2224,7 @@ void update_gui();
int veejay_get_sample_image(int id, int type, int wid, int hei) 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 ); 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_id = 0;
int sample_type =0; int sample_type =0;
gint bw = 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; unsigned char *result = NULL;
if( ret <= 0 || len <= 0 || slen <= 0) if( ret <= 0 || len <= 0 || slen <= 0)
return (gchar*)result; 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 ); *bytes_written = vj_client_read( info->client, V_CMD, result, len );
if( *bytes_written == -1 ) if( *bytes_written == -1 )
reloaded_schedule_restart(); reloaded_schedule_restart();
@@ -6307,6 +6329,11 @@ int veejay_update_multitrack( void *ptr )
if( s->status_list[s->master] == NULL ) { if( s->status_list[s->master] == NULL ) {
info->watch.w_state = STATE_STOPPED; info->watch.w_state = STATE_STOPPED;
free(s->status_list);
free(s->img_list );
free(s->widths);
free(s->heights);
free(s);
return 1; return 1;
} }
@@ -7347,6 +7374,8 @@ void vj_gui_wipe()
{ {
veejay_memset(info->history_tokens[i],0, sizeof(int) * (STATUS_TOKENS+1)); veejay_memset(info->history_tokens[i],0, sizeof(int) * (STATUS_TOKENS+1));
} }
reset_samplebank();
} }
GtkWidget *new_bank_pad(GtkWidget *box) GtkWidget *new_bank_pad(GtkWidget *box)
@@ -7403,6 +7432,21 @@ void vj_gui_set_geom( int x, int y )
geo_pos_[1] = 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, void vj_gui_init(char *glade_file,
int launcher, int launcher,
char *hostname, char *hostname,
@@ -7894,6 +7938,15 @@ void reloaded_launcher(char *hostname, int port_num)
update_spin_value( "button_portnum", 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() void reloaded_schedule_restart()
{ {
info->watch.state = STATE_STOPPED; info->watch.state = STATE_STOPPED;
@@ -7908,6 +7961,8 @@ void reloaded_restart()
gtk_widget_hide( mw ); gtk_widget_hide( mw );
vj_gui_wipe(); vj_gui_wipe();
multitrack_disconnect(info->mt);
/* /*
//@ bring up the launcher window //@ bring up the launcher window
gtk_widget_show( cd ); gtk_widget_show( cd );
@@ -7946,6 +8001,7 @@ gboolean is_alive( int *do_sync )
{ {
if(info->client) if(info->client)
vj_gui_disconnect(); vj_gui_disconnect();
vj_gui_wipe();
// reloaded_schedule_restart(); // reloaded_schedule_restart();
reloaded_restart(); reloaded_restart();
*do_sync = 0; *do_sync = 0;
@@ -8224,8 +8280,6 @@ void free_samplebank(void)
veejay_memset( info->sample_banks, 0, sizeof(sample_bank_t*) * NUM_BANKS ); 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) void setup_samplebank(gint num_cols, gint num_rows, GtkWidget *pad, int *idx, int *idy)
{ {
GdkRectangle result; GdkRectangle result;

View File

@@ -65,13 +65,14 @@ void vj_gui_theme_setup(int default_theme);
int vj_img_cb(GdkPixbuf *img ); int vj_img_cb(GdkPixbuf *img );
void vj_fork_or_connect_veejay(); void vj_fork_or_connect_veejay();
void vj_event_list_free();
gboolean gveejay_running(); gboolean gveejay_running();
gboolean gveejay_relaunch();
int gveejay_user_preview(); int gveejay_user_preview();
void gveejay_preview(int p); void gveejay_preview(int p);
int gveejay_restart(); int gveejay_restart();
int gveejay_update(); int gveejay_update();
int gveejay_time_to_sync( void *ptr ); int gveejay_time_to_sync( void *ptr );
int update_gveejay(); int update_gveejay();
void reloaded_show_launcher();
#endif #endif