diff --git a/veejay-current/gveejay-reloaded/callback.c b/veejay-current/gveejay-reloaded/callback.c index 4e52663b..469defbd 100644 --- a/veejay-current/gveejay-reloaded/callback.c +++ b/veejay-current/gveejay-reloaded/callback.c @@ -2373,14 +2373,14 @@ void on_previewsmall_clicked( GtkWidget *widget, gpointer user_data) void on_multitrack_activate( GtkWidget *w, gpointer user_data) { - multitrack_open( info->mt ); - gtk_widget_show( glade_xml_get_widget_( info->main_window , "mtwindow" )); +// multitrack_open( info->mt ); +// gtk_widget_show( glade_xml_get_widget_( info->main_window , "mtwindow" )); } void on_multitrack_deactivate( GtkWidget *w, gpointer user_data) { - multitrack_close( info->mt ); - gtk_widget_hide( glade_xml_get_widget_( info->main_window , "mtwindow" )); +// multitrack_close( info->mt ); +// gtk_widget_hide( glade_xml_get_widget_( info->main_window , "mtwindow" )); } void on_mt_new_activate( GtkWidget *w, gpointer user_data) diff --git a/veejay-current/gveejay-reloaded/gveejay.c b/veejay-current/gveejay-reloaded/gveejay.c index aeafd5af..6e3bd740 100644 --- a/veejay-current/gveejay-reloaded/gveejay.c +++ b/veejay-current/gveejay-reloaded/gveejay.c @@ -33,7 +33,7 @@ static int verbosity = 0; static int timer = 6; static int col = 0; static int row = 0; -static int n_tracks = 2; +static int n_tracks = 3; static int launcher = 0; static int pw = 176; static int ph = 144; diff --git a/veejay-current/gveejay-reloaded/multitrack.c b/veejay-current/gveejay-reloaded/multitrack.c index 77af0080..757751fc 100644 --- a/veejay-current/gveejay-reloaded/multitrack.c +++ b/veejay-current/gveejay-reloaded/multitrack.c @@ -534,10 +534,8 @@ static void playmode_sensitivity( mt_priv_t *p, gint pm ) static void update_widgets(int *status, mt_priv_t *p, int pm) { int *h = p->history[pm]; -// gdk_threads_enter(); -// mt_update_gui(status); if( h[PLAY_MODE] != pm ) - playmode_sensitivity( p, pm ); + playmode_sensitivity( p, pm ); if( pm == MODE_SAMPLE || pm == MODE_PLAIN ) { @@ -551,8 +549,6 @@ static void update_widgets(int *status, mt_priv_t *p, int pm) if(update_track_list( p )) update_track_view( MAX_TRACKS, get_track_tree( p->view->tracks ), (void*)p ); } - -// gdk_threads_leave(); } static gboolean update_sequence_widgets( gpointer data ) @@ -569,6 +565,7 @@ static gboolean update_sequence_widgets( gpointer data ) if( n<= 0 ) { p->status_lock = 0; + veejay_msg(0, "error reading status"); return TRUE; } #ifdef STRICT_CHECKING @@ -580,7 +577,6 @@ static gboolean update_sequence_widgets( gpointer data ) for( i = 0; i < 20; i ++ ) p->status_cache[i] = array[i]; - update_widgets(array, p, pm); int *his = p->history[ pm ]; @@ -811,12 +807,12 @@ void *multitrack_new( mt->scroll = gtk_scrolled_window_new(NULL,NULL); int minw = 240; +// GtkWidget *pan = glade_xml_get_widget( win, "panels"); +// GtkRequisition req; +// gtk_widget_size_request( pan, &req ); + gtk_widget_set_size_request(mt->scroll,450, 300); - GtkRequisition req; - gtk_widget_size_request( mt->main_window, &req ); - gtk_widget_set_size_request(mt->scroll,minw, req.height-100); - - gtk_container_set_border_width(GTK_CONTAINER(mt->scroll),2); + gtk_container_set_border_width(GTK_CONTAINER(mt->scroll),1); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(mt->scroll),GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS ); GtkWidget *table = gtk_table_new( 1, MAX_TRACKS, FALSE ); gtk_box_pack_start( GTK_BOX( mt->main_box ), mt->scroll , FALSE,FALSE, 0 ); @@ -832,8 +828,8 @@ void *multitrack_new( p->backlink = (void*) mt; p->tracks[c] = NULL; pt->pt[c] = p; -// gtk_table_attach_defaults( table, p->view->event_box, c, c+1, 0, 1 ); - gtk_table_attach_defaults( table, p->view->event_box, 0, 1, c, c+1 ); + gtk_table_attach_defaults( table, p->view->event_box, c, c+1, 0, 1 ); + // gtk_table_attach_defaults( table, p->view->event_box, 0, 1, c, c+1 ); restore__[c] = 0; @@ -990,8 +986,8 @@ int multitrack_add_track( void *data ) // gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( p->view->toggle ), 1 ); status_print( mt, "Track %d: Connection established with '%s' port %d\n", track, hostname, port_num ); - pt->pt[track]->timeout = - gtk_timeout_add( 300, update_sequence_widgets, (gpointer*) pt->pt[track] ); + // pt->pt[track]->timeout = + // gtk_timeout_add( 300, update_sequence_widgets, (gpointer*) pt->pt[track] ); gtk_widget_set_sensitive_( GTK_WIDGET(p->view->panel),TRUE); res = 1; @@ -1026,7 +1022,7 @@ int multrack_audoadd( void *data, char *hostname, int port_num, float ratio ) return 0; } - a->pt[track]->timeout = gtk_timeout_add( 300, update_sequence_widgets, (gpointer*) a->pt[track] ); +// a->pt[track]->timeout = gtk_timeout_add( 300, update_sequence_widgets, (gpointer*) a->pt[track] ); // veejay_configure_sequence( seq, 176, 176 / ratio, 0.0 ); @@ -1230,7 +1226,6 @@ void multitrack_set_current( void *data, char *hostname, int port_num , int wid if( last_track->active && mpreview_width_ > 0 && mpreview_height_ > 0) { // make sure to reset width/height back to small - veejay_msg(0, "set current %d x %d", mpreview_width_, mpreview_height_); veejay_configure_sequence( last_track->sequence, mpreview_width_, mpreview_height_ , 0.0); } @@ -1291,7 +1286,7 @@ static gboolean seqv_mouse_press_event ( GtkWidget *w, GdkEventButton *event, gp if(event->type == GDK_2BUTTON_PRESS) { mt->selected = p->num; -G_LOCK(mt_lock); +/*G_LOCK(mt_lock); int tmp[MAX_TRACKS],i; for( i = 0; i < MAX_TRACKS ; i ++ ) { @@ -1299,11 +1294,13 @@ G_LOCK(mt_lock); tmp[i] = p->preview; p->preview = 0; } -G_UNLOCK(mt_lock); +G_UNLOCK(mt_lock);*/ gui_cb( 0, strdup(p->hostname), p->port_num ); -G_LOCK(mt_lock); + + +//G_LOCK(mt_lock); multitrack_set_current( (void*) mt, p->hostname, p->port_num ,mpreview_width_,mpreview_height_ ); /* @@ -1314,12 +1311,14 @@ G_LOCK(mt_lock); last_track->sequence = p->sequence; assert( last_track->sequence != NULL ); veejay_configure_sequence( last_track->sequence, 352, 288 );*/ +/*G_LOCK(mt_lock); + for( i = 0; i < MAX_TRACKS ; i ++ ) { mt_priv_t *p = a->pt[i]; p->preview = tmp[i]; } -G_UNLOCK(mt_lock); +G_UNLOCK(mt_lock);*/ } if( event->type == GDK_BUTTON_PRESS ) @@ -1436,7 +1435,7 @@ static sequence_view_t *new_sequence_view( mt_priv_t *p,gint w, gint h, gint las // seqv->timeline_ = timeline_new(); seqv->timeline_ = gtk_hscale_new_with_range( 0.0,1.0,0.1 ); gtk_scale_set_draw_value( seqv->timeline_, FALSE ); - gtk_widget_set_size_request( seqv->panel,preview_width_ ,14); + gtk_widget_set_size_request( seqv->panel,preview_width_ ,180); gtk_widget_show( seqv->panel ); gtk_box_pack_start( GTK_BOX( box ), seqv->timeline_, FALSE,FALSE, 0 ); //gtk_container_add( GTK_CONTAINER(seqv->panel), box ); @@ -1545,6 +1544,7 @@ void *mt_preview( gpointer user_data ) void *pixp = vevo_port_new( VEVO_ANONYMOUS_PORT ); GdkPixbuf *ir = NULL; + for( ;; ) { G_LOCK( mt_lock ); @@ -1558,7 +1558,6 @@ void *mt_preview( gpointer user_data ) } int ref = find_sequence( a ); - /* for( i = 0; i < MAX_TRACKS ; i ++ ) { mt_priv_t *p = a->pt[i]; @@ -1682,10 +1681,13 @@ void *mt_preview( gpointer user_data ) if(lt->preview) { gdk_threads_enter(); + if( mt->sensitive ) for( i = 0; i < MAX_TRACKS ; i ++ ) { mt_priv_t *p = a->pt[i]; + update_sequence_widgets(p); + if(cache[i])// && i != ref) { GtkImage *image = GTK_IMAGE( p->view->area ); @@ -1718,6 +1720,7 @@ void *mt_preview( gpointer user_data ) gdk_pixbuf_unref(ir); } ir = NULL;*/ + //update_sequence_widgets(NULL); gdk_threads_leave(); } diff --git a/veejay-current/gveejay-reloaded/vj-api.c b/veejay-current/gveejay-reloaded/vj-api.c index 57775c34..5e63bb49 100644 --- a/veejay-current/gveejay-reloaded/vj-api.c +++ b/veejay-current/gveejay-reloaded/vj-api.c @@ -341,8 +341,6 @@ typedef struct sample_gui_slot_t **gui_slot; } sample_bank_t; -#define WATCHDOG_STATE_ON 0 // disconnected -#define WATCHDOG_STATE_OFF 1 // connected typedef struct { char *hostname; @@ -1784,7 +1782,7 @@ gboolean gveejay_quit( GtkWidget *widget, gpointer user_data) } multitrack_quit( info->mt ); - info->watch.w_state = WATCHDOG_STATE_OFF; + info->watch.w_state = STATE_DISCONNECT; // g_usleep(40000); // vj_gui_free(); @@ -5665,43 +5663,36 @@ static void set_color_fg(const char *name, GdkColor *col) static gboolean update_cpumeter_timeout( gpointer data ) { - GtkWidget *w = glade_xml_get_widget_( - info->main_window, "cpumeter"); gdouble ms = (gdouble)info->status_tokens[ELAPSED_TIME]; - gdouble max = ((1.0/info->el.fps)*1000); - gdouble frac = 1.0 / max; - gdouble invert = 0.0; + gdouble lim = (1.0f/info->el.fps)*1000.0; - invert = 1.0 - (frac * (ms > max ? max : ms)); - if(invert < 0.0) - invert = 0.0; + +//@ fps ? +// 40 =max, in=20, fps=(40/20)*info->el.fps - - if(ms > max) + char text[65]; + if( ms < lim ) { - frac = 1.0; - // set progres bar red - GdkColor color; - color.red = 0xffff; - color.green = 0x0000; - color.blue = 0x0000; -// if(gdk_colormap_alloc_color(info->color_map, -// &color, TRUE, TRUE )) - set_color_fg( "cpumeter", &color ); + sprintf(text, "Running realtime", ( lim / ms ) * info->el.fps ); } else { - GdkColor color; - color.red = 0x0000; - color.green = 0xffff; - color.blue = 0x0000; -// if(gdk_colormap_alloc_color(info->color_map, -// &color, TRUE, TRUE)) - set_color_fg( "cpumeter", &color); - // progress bar green + sprintf(text, "%2.2f FPS", ( 1.0 / ms ) * 1000.0 ); } + update_label_str( "cpumeter", text ); + + /* gdouble max = ((1.0/info->el.fps)*1000); + gdouble frac = 1.0 / max; + gdouble invert = 0.0; - gtk_progress_bar_set_fraction( GTK_PROGRESS_BAR(w), invert ); + gdouble v = frac * ms; + if( v > 1.0 ) + invert = 0.0; + else if ( v >= 0.0 ) + invert = 1.0 - v; + + + gtk_progress_bar_set_fraction( GTK_PROGRESS_BAR(w), invert );*/ return TRUE; } @@ -5800,10 +5791,10 @@ static void init_recorder(int total_frames, gint mode) static void init_cpumeter() { - info->cpumeter = g_timeout_add(300,update_cpumeter_timeout, - (gpointer*) info ); - info->cachemeter = g_timeout_add(300,update_cachemeter_timeout, - (gpointer*) info ); +// info->cpumeter = g_timeout_add(300,update_cpumeter_timeout, +// (gpointer*) info ); +// info->cachemeter = g_timeout_add(300,update_cachemeter_timeout, +// (gpointer*) info ); } @@ -5846,6 +5837,9 @@ static void update_gui() on_vims_messenger(); //update_log(NULL); + // + update_cpumeter_timeout(NULL); + update_cachemeter_timeout(NULL); } @@ -6336,9 +6330,10 @@ void vj_gui_cb(int state, char *hostname, int port_num) { // info->watch.hostname = strdup(hostname); // info->watch.port_num = port_num; - info->watch.state = STATE_DISCONNECT; - info->watch.p_state = STATE_RECONNECT; - info->run_state = RUN_STATE_REMOTE; +// info->watch.state = STATE_DISCONNECT; + info->watch.state = STATE_RECONNECT; + info->watch.p_state = 1; + // info->run_state = RUN_STATE_REMOTE; put_text( "entry_hostname", hostname ); update_spin_value( "button_portnum", port_num ); } @@ -6537,6 +6532,7 @@ void vj_gui_init(char *glade_file, int launcher, char *hostname, int port_num) pw, ph, img_wid); + multitrack_open( info->mt ); memset( &info->watch, 0, sizeof(watchdog_t)); info->watch.state = STATE_STOPPED; // @@ -6696,16 +6692,7 @@ int vj_gui_reconnect(char *hostname,char *group_name, int port_num) reload_bundles(); info->channel = g_io_channel_unix_new( vj_client_get_status_fd( info->client, V_STATUS)); - g_io_add_watch_full( - info->channel, - // G_PRIORITY_HIGH_IDLE, - G_PRIORITY_LOW, - G_IO_IN| G_IO_ERR | G_IO_NVAL | G_IO_HUP, - veejay_tick, - (gpointer*) info, - NULL - ); - +// init_cpumeter(); GtkWidget *w = glade_xml_get_widget_(info->main_window, "gveejay_window" ); gtk_widget_show( w ); @@ -6730,6 +6717,16 @@ int vj_gui_reconnect(char *hostname,char *group_name, int port_num) //init_srt_editor(); vj_gui_preview(); + g_io_add_watch_full( + info->channel, + // G_PRIORITY_HIGH_IDLE, + G_PRIORITY_LOW, + G_IO_IN| G_IO_ERR | G_IO_NVAL | G_IO_HUP, + veejay_tick, + (gpointer*) info, + NULL + ); + return 1; @@ -6755,20 +6752,19 @@ static void veejay_stop_connecting(vj_gui_t *gui) gboolean is_alive( void ) { - void *data = info; - vj_gui_t *gui = (vj_gui_t*) data; + if( gui->watch.state == STATE_PLAYING && gui->watch.p_state == 0) return TRUE; - if(gui->watch.w_state == WATCHDOG_STATE_OFF ) + if( gui->watch.state == STATE_RECONNECT ) { - multitrack_restart( gui->mt ); + veejay_msg(0, "DISCONNECT"); vj_gui_disconnect(); - return TRUE; + gui->watch.state = STATE_CONNECT; } - + if(gui->watch.state == STATE_DISCONNECT ) { gui->watch.state = STATE_STOPPED; @@ -6782,8 +6778,8 @@ gboolean is_alive( void ) vj_gui_disable(); if(!gui->launch_sensitive) vj_launch_toggle(TRUE); - if( gui->watch.p_state == STATE_RECONNECT ) - gui->watch.state = STATE_CONNECT; +// if( gui->watch.p_state == STATE_RECONNECT ) +// gui->watch.state = STATE_CONNECT; } if( gui->watch.state == STATE_CONNECT ) @@ -6793,6 +6789,7 @@ gboolean is_alive( void ) remote = get_text( "entry_hostname" ); port = get_nums( "button_portnum" ); + veejay_msg(0, "Connecting to %s: %d", remote,port ); if(!vj_gui_reconnect( remote, NULL, port )) { info->watch.state = STATE_STOPPED; @@ -6801,18 +6798,21 @@ gboolean is_alive( void ) { info->watch.state = STATE_PLAYING; info->key_id = gtk_key_snooper_install( key_handler , NULL); - init_cpumeter(); + // init_cpumeter(); // info->logging = g_timeout_add( G_PRIORITY_LOW, update_log,(gpointer*) info ); veejay_stop_connecting(gui); - info->watch.state = STATE_PLAYING; + // info->watch.state = STATE_PLAYING; if(info->watch.p_state == 0) { + veejay_msg(0, "Audoadd"); multrack_audoadd( info->mt, remote, port, info->el.ratio ); } - + veejay_msg(0, "Stopped connecting"); info->watch.p_state = 0; + info->watch.state = STATE_PLAYING; + } } @@ -6823,8 +6823,8 @@ gboolean is_alive( void ) void vj_gui_disconnect() { // g_source_remove( info->logging ); - g_source_remove( info->cpumeter ); - g_source_remove( info->cachemeter ); +// g_source_remove( info->cpumeter ); +// g_source_remove( info->cachemeter ); g_io_channel_shutdown(info->channel, FALSE, NULL); g_io_channel_unref(info->channel); gtk_key_snooper_remove( info->key_id ); @@ -6845,7 +6845,10 @@ void vj_gui_disconnect() reset_tree("tree_chain"); reset_tree("tree_sources"); reset_tree("editlisttree"); - + + _effect_reset(); + _edl_reset(); + /* clear console text */ // clear_textview_buffer("veejaytext"); } diff --git a/veejay-current/libstream/vj-net.c b/veejay-current/libstream/vj-net.c index c12980cd..cba9ceed 100644 --- a/veejay-current/libstream/vj-net.c +++ b/veejay-current/libstream/vj-net.c @@ -30,15 +30,13 @@ typedef struct { -// pthread_mutex_t mutex; -// pthread_t thread; + pthread_mutex_t mutex; + pthread_t thread; vj_client *remote; int state; int error; + int grab; } threaded_t; -/* -#define STOP 0 -#define PLAY 1 static void lock_(threaded_t *t, const char *f, int line) { @@ -50,29 +48,30 @@ static void unlock_(threaded_t *t, const char *f, int line) { // veejay_msg(0,"unlock thread by %s, line %d",f,line); pthread_mutex_unlock( &(t->mutex )); -}*/ +} #define lock( t ) lock_( t, __FUNCTION__, __LINE__ ) #define unlock( t ) unlock_( t, __FUNCTION__ , __LINE__ ) -/* + + void *reader_thread(void *data) { vj_tag *tag = (vj_tag*) data; threaded_t *t = tag->priv; vj_client *v = t->remote; int ret = 0; - int error = 0; - int have_sent =0; char buf[16]; sprintf(buf, "%03d:;", VIMS_GET_FRAME); - + for( ;; ) { - lock(t); - if( t->state == STOP ) + int retrieve = 0; + int error = 0; + + if( t->state == 0 ) { - unlock(t); - return NULL; + error = 1; + t->grab = 0; } if( tag->source_type == VJ_TAG_TYPE_NET ) @@ -81,94 +80,69 @@ void *reader_thread(void *data) { vj_client_flush ( v, V_STATUS); } + } + + + lock(t); + + if( t->grab ) + { ret = vj_client_send( v, V_CMD, buf ); if( ret <= 0 ) error = 1; + else + retrieve = 1; + t->grab = 0; } - if(!error) + if(!error && retrieve) { ret = vj_client_read_i ( v, tag->socket_frame ); if( ret <= 0 ) error = 1; } - + unlock(t); + if( error ) { veejay_msg(VEEJAY_MSG_ERROR, - "Error retrieving frame from remote veejay,"); - t->error = THREAD_STOP; - t->state = STOP; + "Closing connection with remote veejay,"); + t->state = 0; + pthread_exit( &(t->thread)); + return NULL; } - unlock(t); - g_sleep( 25000 ); } return NULL; -}*/ +} void *net_threader( ) { threaded_t *t = (threaded_t*) vj_calloc(sizeof(threaded_t)); -// pthread_mutex_init( &(t->mutex), NULL ); return (void*) t; } -void net_thread_remote( void *p, void *r ) +int net_thread_get_frame( vj_tag *tag, uint8_t *buffer[3] ) { - threaded_t *t = (threaded_t*) p; - t->remote = r; -} - -void net_thread_exit(vj_tag *tag) -{ - if(tag->socket_frame) - free(tag->socket_frame); - -/* unlock(t); - - pthread_mutex_destroy( &(t->mutex)); -*/ -} - -int net_thread_get_frame( vj_tag *tag, uint8_t *buffer[3], vj_client *v ) -{ -/* threaded_t *t = (threaded_t*) tag->priv; + threaded_t *t = (threaded_t*) tag->priv; + vj_client *v = t->remote; lock(t); if( t->state == 0 || t->error ) { unlock(t); return 0; } + const uint8_t *buf = tag->socket_frame; - veejay_memcpy( buffer[0], tag->socket_frame, v->planes[0] ); - veejay_memcpy( buffer[1], tag->socket_frame + v->planes[0], v->planes[1] ); - veejay_memcpy( buffer[2], tag->socket_frame + v->planes[0] + v->planes[1] , v->planes[2] ); + veejay_memcpy( buffer[0], buf, v->planes[0] ); + veejay_memcpy( buffer[1], buf+ v->planes[0], v->planes[1] ); + veejay_memcpy( buffer[2], buf+ v->planes[0] + v->planes[1] , v->planes[2] ); + + t->grab = 1; unlock(t); - return 1;*/ - char buf[16]; - sprintf(buf, "%03d:;", VIMS_GET_FRAME); - - - if( vj_client_poll(v, V_STATUS ) ) - { - vj_client_flush ( v, V_STATUS); - } - int ret = vj_client_send( v, V_CMD, buf ); - if( ret <= 0 ) - return 0; - - ret = vj_client_read_i ( v, tag->socket_frame ); - if( ret <= 0 ) - return 0; - - veejay_memcpy( buffer[0], tag->socket_frame, v->planes[0] ); - veejay_memcpy( buffer[1], tag->socket_frame + v->planes[0], v->planes[1] ); - veejay_memcpy( buffer[2], tag->socket_frame + v->planes[0] + v->planes[1] , v->planes[2] ); - - return ret; + return 1; } int net_thread_start(vj_client *v, vj_tag *tag) @@ -186,12 +160,18 @@ int net_thread_start(vj_client *v, vj_tag *tag) tag->source_name, tag->video_channel ); return 0; } + else + veejay_msg(VEEJAY_MSG_INFO, "Connecton established with %s:%d",tag->source_name, + tag->video_channel); + + threaded_t *t = (threaded_t*)tag->priv; -/* threaded_t *t = (threaded_t*)tag->priv; + pthread_mutex_init( &(t->mutex), NULL ); t->error = 0; t->state = 1; -*/ + t->remote = v; + t->grab = 1; if( tag->source_type == VJ_TAG_TYPE_MCAST ) { char start_mcast[6]; @@ -205,46 +185,45 @@ int net_thread_start(vj_client *v, vj_tag *tag) { veejay_msg(VEEJAY_MSG_ERROR, "Unable to send to %s port %d", tag->source_name, tag->video_channel ); - vj_client_close( v ); return 0; } } -/* int p_err = pthread_create( &(t->thread), NULL, &reader_thread, (void*) tag ); + int p_err = pthread_create( &(t->thread), NULL, &reader_thread, (void*) tag ); if( p_err ==0) - {*/ - veejay_msg(VEEJAY_MSG_INFO, "Created new %s stream", + { + veejay_msg(VEEJAY_MSG_INFO, "Created new %s threaded stream", tag->source_type == VJ_TAG_TYPE_MCAST ? "multicast" : "unicast"); - return 1; -// } -// return 0; + return 1; + } + + return 0; } -void net_thread_stop(vj_client *v , vj_tag *tag) +void net_thread_stop(vj_tag *tag) { char mcast_stop[6]; threaded_t *t = (threaded_t*)tag->priv; int ret = 0; -// lock(t); + lock(t); if(tag->source_type == VJ_TAG_TYPE_MCAST) { sprintf(mcast_stop, "%03d:;", VIMS_VIDEO_MCAST_STOP ); - ret = vj_client_send( v , V_CMD, mcast_stop); + ret = vj_client_send( t->remote , V_CMD, mcast_stop); } if(tag->source_type == VJ_TAG_TYPE_NET) { sprintf(mcast_stop, "%03d:;", VIMS_CLOSE ); - ret = vj_client_send( v, V_CMD, mcast_stop); + ret = vj_client_send( t->remote, V_CMD, mcast_stop); } -// t->state = STOP; + t->state = 0; -// unlock(t); -// pthread_join( &(t->thread), (void*) tag ); - - vj_client_close( v ); + unlock(t); + + pthread_mutex_destroy( &(t->mutex)); veejay_msg(VEEJAY_MSG_INFO, "Disconnected from %s", tag->source_name); } diff --git a/veejay-current/libstream/vj-net.h b/veejay-current/libstream/vj-net.h index 33502dcd..96a9cae1 100644 --- a/veejay-current/libstream/vj-net.h +++ b/veejay-current/libstream/vj-net.h @@ -21,10 +21,10 @@ #define NETINSTR_HH int net_already_opened(const char *filname, int n, int chan); -void net_thread_stop(vj_client *v , vj_tag *tag); +void net_thread_stop(vj_tag *tag); int net_thread_start(vj_client *v, vj_tag *tag); void net_thread_remote(void *priv, void *p ); -int net_thread_get_frame( vj_tag *tag, uint8_t *buffer[3], vj_client *v ); +int net_thread_get_frame( vj_tag *tag, uint8_t *buffer[3]); void net_thread_exit(vj_tag *tag); void *net_threader( ); diff --git a/veejay-current/libstream/vj-tag.c b/veejay-current/libstream/vj-tag.c index f4387765..23713d67 100644 --- a/veejay-current/libstream/vj-tag.c +++ b/veejay-current/libstream/vj-tag.c @@ -297,8 +297,6 @@ int _vj_tag_new_net(vj_tag *tag, int stream_nr, int w, int h,int f, char *host, tag->socket_ready = 1; } - net_thread_remote( tag->priv, v ); - return 1; } @@ -802,13 +800,12 @@ int vj_tag_del(int id) break; case VJ_TAG_TYPE_MCAST: case VJ_TAG_TYPE_NET: - net_thread_exit(tag); + net_thread_stop(tag); if(vj_tag_input->net[tag->index]) { vj_client_close( vj_tag_input->net[tag->index] ); vj_tag_input->net[tag->index] = NULL; } - break; } @@ -1627,7 +1624,7 @@ int vj_tag_disable(int t1) { } if(tag->source_type == VJ_TAG_TYPE_NET || tag->source_type == VJ_TAG_TYPE_MCAST) { - net_thread_stop( vj_tag_input->net[tag->index], tag ); + net_thread_stop( tag ); } #ifdef USE_GDK_PIXBUF if(tag->source_type == VJ_TAG_TYPE_PICTURE ) @@ -2160,7 +2157,7 @@ int vj_tag_get_frame(int t1, uint8_t *buffer[3], uint8_t * abuffer) case VJ_TAG_TYPE_MCAST: case VJ_TAG_TYPE_NET: - if(!net_thread_get_frame( tag,buffer, vj_tag_input->net[tag->index] )) + if(!net_thread_get_frame( tag,buffer )) { veejay_msg(VEEJAY_MSG_ERROR, "Error reading frame from stream"); vj_tag_set_active(t1,0); diff --git a/veejay-current/share/gveejay.reloaded.glade b/veejay-current/share/gveejay.reloaded.glade index 3ecae469..c59c77f3 100644 --- a/veejay-current/share/gveejay.reloaded.glade +++ b/veejay-current/share/gveejay.reloaded.glade @@ -539,14 +539,22 @@ - + True - CPU load - GTK_PROGRESS_RIGHT_TO_LEFT - 0 - 0.10000000149 - veejay load meter + cpumeter + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -9701,6 +9709,561 @@ Quicktime-MJPEG tab + + + + True + False + 0 + + + + True + GTK_PACK_DIRECTION_LTR + GTK_PACK_DIRECTION_LTR + + + + True + Track + True + + + + + + + True + Track a running veejay + Add + True + + + + + + + True + Close a connection + Close + True + + + + + + + + + + 0 + False + False + + + + + + True + False + 0 + + + + + + + + + + + 0 + True + True + + + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + button_gotostart.png + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + button_reverse.png + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + button_pause.png + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + button_play.png + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + button_skip.png + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + 0 + False + True + + + + + + True + False + 0 + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + button_gotoend.png + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + button_dec.png + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + button_inc.png + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + button_prev.png + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + 0 + False + True + + + + + + + + + + True + <b>Sync controls</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + False + True + + + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + True + False + 0 + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + sync.png + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + + + + + True + <b>Sync start</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + False + True + + + + + 0 + False + True + + + + + + + + + 0 + False + True + + + + + False + True + + + + + + True + <b>MT</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + tab + + 0 @@ -16425,436 +16988,7 @@ Quicktime-MJPEG - - True - False - 0 - - - - True - GTK_PACK_DIRECTION_LTR - GTK_PACK_DIRECTION_LTR - - - - True - Track - True - - - - - - - True - Track a running veejay - Add - True - - - - - - - True - Close a connection - Close - True - - - - - - - - - - 0 - False - False - - - - - - True - False - 0 - - - - - - - - - - - 0 - True - True - - - - - - True - 0 - 0.5 - GTK_SHADOW_NONE - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - button_gotostart.png - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - button_reverse.png - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - button_pause.png - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - button_play.png - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - button_skip.png - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - 0 - True - True - - - - - - True - False - 0 - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - button_gotoend.png - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - button_dec.png - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - button_inc.png - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - button_prev.png - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - 0 - True - True - - - - - - - - - - True - False - 0 - - - - True - <b>Synchronous control</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - sync.png - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - label_item - - - - - 0 - False - True - - - + diff --git a/veejay-current/veejay/vj-event.c b/veejay-current/veejay/vj-event.c index 6a3049d6..7e1f8089 100644 --- a/veejay-current/veejay/vj-event.c +++ b/veejay-current/veejay/vj-event.c @@ -1000,7 +1000,7 @@ int vj_event_parse_msg( veejay_t * v, char *msg ) return 0; } - if( net_id != 412 ) //&& net_id != 333) + if( net_id != 412 && net_id != 333) veejay_msg(VEEJAY_MSG_DEBUG, "VIMS: Parse message '%s'", msg ); @@ -7691,7 +7691,7 @@ void vj_event_send_devices ( void *ptr, const char format[], va_list ap ) void vj_event_send_frame ( void *ptr, const char format[], va_list ap ) { veejay_t *v = (veejay_t*) ptr; - vj_perform_send_primary_frame_s( v,0 ); + vj_perform_send_primary_frame_s2( v,0 ); }