diff --git a/veejay-current/veejay-server/bio2jack/bio2jack.c b/veejay-current/veejay-server/bio2jack/bio2jack.c index b648eb53..b8b0899d 100644 --- a/veejay-current/veejay-server/bio2jack/bio2jack.c +++ b/veejay-current/veejay-server/bio2jack/bio2jack.c @@ -1319,6 +1319,7 @@ int JACK_Open(int *deviceID, unsigned int bits_per_channel, unsigned long *rate, int channels) { + //FIXME: memory allocated not freed if opening jack fails (ringbuffer etc) /* we call through to JACK_OpenEx(), but default the input channels to 0 for better backwards compatibility with clients written before recording was available */ return JACK_OpenEx(deviceID, bits_per_channel, diff --git a/veejay-current/veejay-server/libel/pixbuf.c b/veejay-current/veejay-server/libel/pixbuf.c index 10605dd9..258a24d4 100644 --- a/veejay-current/veejay-server/libel/pixbuf.c +++ b/veejay-current/veejay-server/libel/pixbuf.c @@ -395,7 +395,10 @@ int vj_picture_save( void *picture, uint8_t **frame, int w, int h , int fmt ) void vj_picture_free() { - + if(pic_scaler_) { + yuv_free_swscaler( pic_scaler_ ); + pic_scaler_ = NULL; + } } #define pic_has_changed(a,b,c) ( (a == pic_data_[0] && b == pic_data_[1] && c == pic_data_[2] ) ? 0: 1) diff --git a/veejay-current/veejay-server/libel/vj-el.c b/veejay-current/veejay-server/libel/vj-el.c index 683a1e55..971800fe 100644 --- a/veejay-current/veejay-server/libel/vj-el.c +++ b/veejay-current/veejay-server/libel/vj-el.c @@ -1443,7 +1443,7 @@ editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int de if(!filename[0] || filename == NULL) { veejay_msg(VEEJAY_MSG_ERROR,"\tInvalid filename given"); - vj_el_free(el); + free(el); return NULL; } @@ -1464,14 +1464,15 @@ editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int de if(stat( filename[nf], &fileinfo)!= 0) { veejay_msg(VEEJAY_MSG_ERROR, "Unable to access file '%s'",filename[nf] ); - //vj_el_free(el); + vj_el_free(el); return NULL; } fd = fopen(filename[nf], "r"); if (fd <= 0) { veejay_msg(VEEJAY_MSG_ERROR,"Error opening %s:", filename[nf]); - vj_el_free(el); + fclose(fd); + vj_el_free(el); return NULL; } @@ -1485,6 +1486,7 @@ editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int de if (line[0] != 'N' && line[0] != 'n' && line[0] != 'P' && line[0] != 'p' && line[0] != 's' && line[0] != 'S') { veejay_msg(VEEJAY_MSG_ERROR,"Edit list second line is not NTSC/PAL/SECAM"); + fclose(fd); vj_el_free(el); return NULL; } @@ -1494,7 +1496,7 @@ editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int de } else { el->video_norm = tolower(line[0]); - } + } /* read third line: Number of files */ fgets(line, 1024, fd); @@ -1503,7 +1505,7 @@ editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int de veejay_msg(VEEJAY_MSG_DEBUG, "Edit list contains %d files", num_list_files); /* read files */ - for (i = 0; i < num_list_files; i++) + for (i = 0; i < num_list_files; i++) { fgets(line, 1024, fd); n = strlen(line); @@ -1511,6 +1513,7 @@ editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int de if (line[n - 1] != '\n') { veejay_msg(VEEJAY_MSG_ERROR, "Filename in edit list too long"); + fclose(fd); vj_el_free(el); return NULL; } @@ -1522,6 +1525,7 @@ editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int de if(index_list[i]< 0) { + fclose(fd); vj_el_free(el); return NULL; } @@ -1530,11 +1534,12 @@ editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int de if (el->frame_list==NULL) { veejay_msg(VEEJAY_MSG_ERROR, "Insufficient memory to allocate frame_list"); + fclose(fd); vj_el_free(el); return NULL; } - for (i = 0; i < el->num_frames[n]; i++) + for (i = 0; i < el->num_frames[n]; i++) { el->frame_list[el->video_frames++] = EL_ENTRY(n, i); } @@ -1553,6 +1558,7 @@ editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int de if (nl < 0 || nl >= num_list_files) { veejay_msg(VEEJAY_MSG_ERROR,"Wrong file number in edit list entry"); + fclose(fd); vj_el_free(el); return NULL; } @@ -1572,6 +1578,7 @@ editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int de if (el->frame_list==NULL) { veejay_msg(VEEJAY_MSG_ERROR, "Insufficient memory to allocate frame_list"); + fclose(fd); vj_el_free(el); return NULL; } @@ -1687,7 +1694,6 @@ void vj_el_free(editlist *el) } } - if( el->cache ) { free_cache( el->cache ); el->cache = NULL; @@ -1698,7 +1704,6 @@ void vj_el_free(editlist *el) } free(el); - el = NULL; } diff --git a/veejay-current/veejay-server/libplugger/plugload.c b/veejay-current/veejay-server/libplugger/plugload.c index 31ae18d2..185c1852 100644 --- a/veejay-current/veejay-server/libplugger/plugload.c +++ b/veejay-current/veejay-server/libplugger/plugload.c @@ -310,15 +310,15 @@ static void free_plugins() for( i = 0; i < index_ ; i ++ ) free_plugin( index_map_[i]); - vevo_port_recursive_free( illegal_plugins_ ); - + vpf( illegal_plugins_ ); + freeframe_destroy(); + frei0r_destroy(); + free( index_map_ ); index_ = 0; index_map_ = NULL; - - - freeframe_destroy(); } + int plug_get_idx_by_so_name( char *soname ) { int i; diff --git a/veejay-current/veejay-server/libvevo/pool.c b/veejay-current/veejay-server/libvevo/pool.c index 594f96c4..5b1451f1 100644 --- a/veejay-current/veejay-server/libvevo/pool.c +++ b/veejay-current/veejay-server/libvevo/pool.c @@ -195,7 +195,7 @@ void vevo_pool_slice_destroy( void *p ) s = n->next; free( n ); } - free( pool->space ); + //free( pool->space ); free( pool ); p = NULL; } diff --git a/veejay-current/veejay-server/libvevo/vevo.c b/veejay-current/veejay-server/libvevo/vevo.c index 3356d8b4..d00c1411 100644 --- a/veejay-current/veejay-server/libvevo/vevo.c +++ b/veejay-current/veejay-server/libvevo/vevo.c @@ -298,9 +298,7 @@ static vevo_property_t *prop_node_get(vevo_port_t * p, ukey_t key) */ static port_index_t *port_node_new(__vevo_port_t *port,const char *key, ukey_t hash_key) { - // port_index_t *i = (port_index_t *) vevo_malloc(sizeof(port_index_t)); - port_index_t *i = (port_index_t *) vevo_pool_alloc_node( - port_index_t, port->pool ); + port_index_t *i = (port_index_t *) vevo_pool_alloc_node(port_index_t, port->pool ); i->key = strdup(key); i->hash_code = hash_key; i->next = NULL; @@ -326,8 +324,7 @@ static void port_node_free(__vevo_port_t *port,port_index_t * node) \param key name of property \param hash_key calculated hash value */ -static void port_node_append(vevo_port_t * p, const char *key, - ukey_t hash_key) +static void port_node_append(vevo_port_t * p, const char *key,ukey_t hash_key) { __vevo_port_t *port = (__vevo_port_t *) p; port_index_t *node = port_node_new(p,key, hash_key); @@ -550,7 +547,6 @@ static int atom_get_value(vevo_storage_t * t, int idx, void *dst) if( t->num_elements == 0 && idx == 0 ) { - atom = t->elements.atom; return VEVO_ERROR_PROPERTY_EMPTY; } @@ -670,26 +666,23 @@ static void vevo_free_atom(__vevo_port_t *port,atom_t * atom) \param dst destination address \param atom_type type of atom */ -static atom_t *vevo_put_atom(__vevo_port_t * port, void *dst, - int atom_type) +static atom_t *vevo_put_atom(__vevo_port_t * port, void *dst, int atom_type) { atom_t *atom = NULL; - size_t atom_size = vevo_atom_size(atom_type); - if (atom_type == VEVO_ATOM_TYPE_STRING || atom_type == VEVO_ATOM_TYPE_UTF8STRING) { - char **s = (char **) dst; - char *data = (char*) *s; - atom_size = strlen(data) + 1; - atom = vevo_new_atom(port, atom_type, atom_size); + char **s = (char **) dst; + char *data = (char*) *s; + size_t atom_size = (dst == NULL || data == NULL ? 0 : strlen(data) + 1); + atom = vevo_new_atom(port, atom_type, atom_size); if (atom_size > 0) { veejay_memcpy(atom->value, data, atom_size); } } else { - - atom = vevo_new_atom(port, atom_type, atom_size); - if (!atom) - return NULL; - veejay_memcpy(atom->value, dst, atom_size); + size_t atom_size = vevo_atom_size(atom_type); + atom = vevo_new_atom(port, atom_type, atom_size); + if (!atom) + return NULL; + veejay_memcpy(atom->value, dst, atom_size); } return atom; } @@ -981,7 +974,7 @@ vevo_property_element_size(vevo_port_t * p, const char *key, const int idx ) */ vevo_port_t *vevo_port_new(int port_type) { - __vevo_port_t *port = (__vevo_port_t *) malloc(sizeof(__vevo_port_t)); + __vevo_port_t *port = (__vevo_port_t *) vj_malloc(sizeof(__vevo_port_t)); port->index = NULL; port->list = NULL; @@ -993,8 +986,7 @@ vevo_port_t *vevo_port_new(int port_type) else port->table = hash_create(HASHCOUNT_T_MAX, key_compare, int_hash); - vevo_port_finalize (port, port_type ); - + // vevo_port_finalize (port, port_type ); return (vevo_port_t *) port; } @@ -1021,14 +1013,12 @@ static void vevo_port_free_(vevo_port_t * p) __vevo_port_t *port = (__vevo_port_t *) p; if (port->table) { if (!hash_isempty((hash_t *) port->table)) { - hscan_t scan; - memset( &scan, 0, sizeof(hscan_t)); + hscan_t scan = (hscan_t) {0}; hash_scan_begin(&scan, (hash_t *) port->table); hnode_t *node = NULL; while ((node = hash_scan_next(&scan)) != NULL) { - vevo_storage_t *stor = NULL; - stor = hnode_get(node); + vevo_storage_t *stor = hnode_get(node); vevo_free_storage(port,stor); } hash_free_nodes((hash_t *) port->table); @@ -1339,7 +1329,7 @@ vv_property_set(vevo_port_t * p, storage_put_atom_value(port, src, num_elements, stor, atom_type); if (new) { - node = (void *) prop_node_append(port, hash_key, stor); + prop_node_append(port, hash_key, stor); } else { vevo_property_t *current = (vevo_property_t *) node; current->st = stor; @@ -1698,22 +1688,20 @@ int vevo_special_union_ports( void *port_a, void *port_b ) int i; int error; if(!Ea) - return 0; + return 0; + char key[64]; for( i = 0; Ea[i] != NULL; i ++ ) { void *value = NULL; - char key[64]; - int atom_type = vevo_property_atom_type( port_a, Ea[i] ); if( atom_type == VEVO_ATOM_TYPE_VOIDPTR ) { - error = vevo_property_get( port_a, Ea[i], 0, &value ); - sprintf(key, "%p", value ); - - if(!vevo_property_exists( port_b, key )) + if( vevo_property_get( port_a, Ea[i], 0, &value ) == VEVO_NO_ERROR ) { - error = vevo_property_set( port_b, key, VEVO_ATOM_TYPE_VOIDPTR,1,&value ); + snprintf(key,sizeof(key), "%p", value ); + if(!vevo_property_exists( port_b, key )) + vevo_property_set( port_b, key, VEVO_ATOM_TYPE_VOIDPTR,1,&value ); } } free( Ea[i] ); @@ -1902,8 +1890,6 @@ char *vevo_format_property( vevo_port_t *port, const char *key ) if( n_elem <= 0 ) n_elem = 1; - memset(token,0,sizeof(token)); - switch( atom_type ) { case VEVO_ATOM_TYPE_INT: @@ -1932,26 +1918,25 @@ char *vevo_format_property( vevo_port_t *port, const char *key ) token[0] = 'g'; break; } + + token[1] = '\0'; - if( token[0]) - { - int len = n_elem * strlen(token) + 1; - res = (char*) calloc(1, sizeof(char) * len ); - int i; - for( i =0; i < n_elem; i ++ ) - strncat( res,token,strlen(token) ); - } + int len = n_elem * strlen(token); + res = (char*) vj_malloc( sizeof(char) * len + 1 ); + int i; + for( i =0; i < n_elem; i ++ ) + res[i] = token[0]; + res[len] = '\0'; return res; } char *vevo_format_kind( vevo_port_t *port, const char *key ) { - char *res = NULL; char token[5]; int atom_type = vevo_property_atom_type( port, key ); - memset(token,0,sizeof(token)); + token[1] = '\0'; switch( atom_type ) { @@ -1982,13 +1967,7 @@ char *vevo_format_kind( vevo_port_t *port, const char *key ) break; } - if( token[0]) - { - res = strdup( token ); - } - - return res; - + return strdup( token ); } @@ -2119,14 +2098,17 @@ int vevo_sscanf_property( vevo_port_t *port, const char *s) int err = vevo_property_get( port, "driver", 0, &drv ); if( drv == NULL || err != VEVO_NO_ERROR ) { veejay_msg(0, "No context for property '%s'", s ); + free(format); return 0; } int32_t v; if( sscanf( value, "%d", &v ) ) { vevo_property_call( port, key, drv, v,v ); + free(format); return 1; } + free(format); return 0; } @@ -2218,6 +2200,9 @@ int vevo_sscanf_property( vevo_port_t *port, const char *s) if( error == VEVO_NO_ERROR ) done = 1; + + free(format); + return done; } @@ -2241,7 +2226,6 @@ char **vevo_sprintf_port( vevo_port_t *port ) for( i = 0; keys[i] != NULL; i ++ ) { char *buf = vevo_sprintf_property(port, keys[i]); - char *p = buf; if(buf) { res[k++] = strdup( buf ); @@ -2539,33 +2523,38 @@ int vevo_property_from_string( vevo_port_t *port, const char *s, const char *key } void *ptr = NULL; + int ret; if( n > 0 ) - switch( *format ) { - case 'd': - case 'b': - ptr = &(i32_val[0]); - break; - case 'D': - ptr = &(i64_val[0]); - break; - case 'g': - ptr = &(dbl_val[0]); - break; - case 's': - ptr = &(str_val[0]); - break; - } + switch( *format ) + { + case 'd': + case 'b': + ptr = &(i32_val[0]); + break; + case 'D': + ptr = &(i64_val[0]); + break; + case 'g': + ptr = &(dbl_val[0]); + break; + case 's': + ptr = &(str_val[0]); + break; + default: + n = 0; + break; + } + } - int error = 0; if( n == 0 ) - error = vevo_property_set( port, key, type, 0, NULL ); + ret = vevo_property_set( port, key, type, 0, NULL ); else - { - error = vevo_property_set( port, key, type, cur_elem, ptr ); - } - if( error == VEVO_NO_ERROR ) + ret = vevo_property_set( port, key, type, cur_elem, ptr ); + + if( ret == VEVO_NO_ERROR ) done = 1; + free(format); return done; } @@ -2759,15 +2748,6 @@ static struct { //@ FIXME move to specific locations, use a register to registe {0, NULL } }; -static char * vevo_identify_port( int type ) { - int i; - for( i = 0; port_types[i].name != NULL ; i ++ ) { - if( type == port_types[i].id ) - return port_types[i].name; - } - return "Illegal or unknown port type"; -} - void vevo_port_dump( void *p, int lvl ) { char **keys = vevo_list_properties(p); @@ -2789,16 +2769,6 @@ void vevo_port_dump( void *p, int lvl ) veejay_msg( VEEJAY_MSG_DEBUG, "%s%p", (tabs == NULL ? "/" : tabs ), p ); for( k = 0; keys[k] != NULL; k ++ ) { - - if( strncasecmp( keys[k], "type",4 ) == 0 ) { - int tval = 0; - err = vevo_property_get( p, keys[k],0,&tval ); - veejay_msg(VEEJAY_MSG_DEBUG, "%s %s %s", - (tabs==NULL ? "->" : tabs ), keys[k], vevo_identify_port(tval)); - free( keys[k] ); - continue; - } - int at = vevo_property_atom_type(p,keys[k]); switch(at) { case VEVO_ATOM_TYPE_PORTPTR: diff --git a/veejay-current/veejay-server/libvje/effects/complexthreshold.c b/veejay-current/veejay-server/libvje/effects/complexthreshold.c index 35a3401b..19fae657 100644 --- a/veejay-current/veejay-server/libvje/effects/complexthreshold.c +++ b/veejay-current/veejay-server/libvje/effects/complexthreshold.c @@ -135,7 +135,6 @@ void complexthreshold_apply(VJFrame *frame, VJFrame *frame2, int width, tmp = 1 / kg1; one_over_kc = 0xff * 2 * tmp - 0xff; kfgy_scale = 0xf * (float) (_y) / kg1; - kg = kg1; /* intialize pointers */ fg_y = Y2; diff --git a/veejay-current/veejay-server/libvje/effects/negation.c b/veejay-current/veejay-server/libvje/effects/negation.c index 3fdd7af8..b4dd9a8f 100644 --- a/veejay-current/veejay-server/libvje/effects/negation.c +++ b/veejay-current/veejay-server/libvje/effects/negation.c @@ -37,7 +37,7 @@ vj_effect *negation_init(int w, int h) ve->limits[1] = (int *) vj_calloc(sizeof(int) * ve->num_params); /* max */ ve->limits[0][0] = 0; ve->limits[1][0] = 255; - ve->defaults[0] = 3;// 255; + ve->defaults[0] = 255; ve->description = "Negation"; ve->sub_format = 0; ve->extra_frame = 0; diff --git a/veejay-current/veejay-server/libvjmsg/vj-common.c b/veejay-current/veejay-server/libvjmsg/vj-common.c index ef029180..ec245bcc 100644 --- a/veejay-current/veejay-server/libvjmsg/vj-common.c +++ b/veejay-current/veejay-server/libvjmsg/vj-common.c @@ -238,6 +238,22 @@ void veejay_init_msg_ring() sem_init( msg_ring->semaphore, 0, 0 ); } +void veejay_destroy_msg_ring() +{ + if(msg_ring) { + int i; + for( i = 0; i < MESSAGE_RING_SIZE; i ++ ) { + if( msg_ring->dommel[i]) { + free(msg_ring->dommel[i]); + } + } + free(msg_ring->dommel); + free(msg_ring->semaphore); + sem_destroy( msg_ring->semaphore ); + free(msg_ring); + } +} + static void veejay_msg_ringbuffer( char *line ) { uint64_t pos = __sync_fetch_and_add( &msg_ring->pos, 1) % MESSAGE_RING_SIZE; diff --git a/veejay-current/veejay-server/libvjmsg/vj-msg.h b/veejay-current/veejay-server/libvjmsg/vj-msg.h index 65b8c848..1c81a191 100644 --- a/veejay-current/veejay-server/libvjmsg/vj-msg.h +++ b/veejay-current/veejay-server/libvjmsg/vj-msg.h @@ -44,4 +44,7 @@ extern int has_env_setting( const char *env, const char *value ); extern char* veejay_msg_ringfetch(); extern int veejay_log_to_ringbuffer(); extern void veejay_toggle_osl(); +extern void veejay_init_msg_ring(); +extern void veejay_destroy_msg_ring(); #endif + diff --git a/veejay-current/veejay-server/libvjnet/dummy.c b/veejay-current/veejay-server/libvjnet/dummy.c index 60eca9e1..81073f58 100644 --- a/veejay-current/veejay-server/libvjnet/dummy.c +++ b/veejay-current/veejay-server/libvjnet/dummy.c @@ -32,6 +32,7 @@ int main( int argc, char *argv[] ) vj_server *s = vj_server_alloc( 5000, NULL, V_CMD); vj_server *k = vj_server_alloc( 5001, NULL, V_STATUS ); int frame = 0; + int tmplen = 0; veejay_set_debug_level(4); @@ -60,9 +61,9 @@ int main( int argc, char *argv[] ) { char tmp[4096]; memset(tmp,0,sizeof(tmp)); - while( vj_server_retrieve_msg(s,i, tmp ) ) + while( vj_server_retrieve_msg(s,i, tmp, &tmplen ) ) { - printf("recv [%s]\n", tmp ); + printf("recv %d [%s]\n", tmplen,tmp ); } } } diff --git a/veejay-current/veejay-server/libvjnet/vj-server.c b/veejay-current/veejay-server/libvjnet/vj-server.c index b701cf2f..8cccf44e 100644 --- a/veejay-current/veejay-server/libvjnet/vj-server.c +++ b/veejay-current/veejay-server/libvjnet/vj-server.c @@ -137,12 +137,18 @@ static int _vj_server_multicast( vj_server *v, char *group_name, int port ) if( v->server_type == V_CMD ) { proto[0]->s = mcast_new_sender( group_name ); - if(!proto[0]->s) + if(!proto[0]->s) { + free(proto); return 0; + } proto[0]->r = mcast_new_receiver( group_name , port + VJ_CMD_MCAST_IN ); - if(!proto[0]->r ) + if(!proto[0]->r ) { + free(proto[0]->s); + free(proto[0]); + free(proto); return 0; + } v->ports[0] = port + VJ_CMD_MCAST; v->ports[1] = port + VJ_CMD_MCAST_IN; @@ -154,6 +160,12 @@ static int _vj_server_multicast( vj_server *v, char *group_name, int port ) if(!link) { veejay_msg(VEEJAY_MSG_ERROR, "Out of memory"); + if(proto[0]) { + if(proto[0]->s) free(proto[0]->s); + if(proto[0]->r) free(proto[0]->r); + free(proto[0]); + free(proto); + } return 0; } diff --git a/veejay-current/veejay-server/veejay/liblavplayvj.c b/veejay-current/veejay-server/veejay/liblavplayvj.c index 5fb10db8..e73c5896 100644 --- a/veejay-current/veejay-server/veejay/liblavplayvj.c +++ b/veejay-current/veejay-server/veejay/liblavplayvj.c @@ -237,8 +237,6 @@ void veejay_change_state_save(veejay_t * info, int new_state) } int veejay_set_framedup(veejay_t *info, int n) { - video_playback_setup *settings = (video_playback_setup*) settings; - switch(info->uc->playback_mode) { case VJ_PLAYBACK_MODE_PLAIN: info->sfd = n; @@ -390,27 +388,21 @@ int veejay_free(veejay_t * info) vj_mem_threaded_stop(); - vj_event_stop(); + vj_event_destroy(); - vj_tag_free(); - //vj_el_free(info->edit_list); - vj_avcodec_free(); - - void *old = info->edit_list; + vj_tag_free(); + sample_free(info->edit_list); - if(old != info->current_edit_list ) { - vj_el_free(info->current_edit_list); - } - vj_el_free(info->edit_list); vj_el_deinit(); -// vj_tag_free(); + vj_avcodec_free(); vj_effect_shutdown(); + task_destroy(); if( info->settings->composite2 ) composite_destroy( info->composite2 ); @@ -3313,7 +3305,7 @@ int veejay_edit_addmovie_sample(veejay_t * info, char *movie, int id ) { if( !sample_usable_edl( id ) ) { - veejay_msg(0, "Sample %d has no EDL (its a picture!)", id ); + veejay_msg(0, "Sample %d is a picture ...", id ); //FIXME check if this can be removed return -1; } diff --git a/veejay-current/veejay-server/veejay/veejay.c b/veejay-current/veejay-server/veejay/veejay.c index c59b6a34..b579597f 100644 --- a/veejay-current/veejay-server/veejay/veejay.c +++ b/veejay-current/veejay-server/veejay/veejay.c @@ -827,6 +827,7 @@ int main(int argc, char **argv) veejay_busy(info); veejay_free(info); + veejay_destroy_msg_ring(); veejay_msg(VEEJAY_MSG_INFO, "Thank you for using Veejay"); diff --git a/veejay-current/veejay-server/veejay/vj-event.c b/veejay-current/veejay-server/veejay/vj-event.c index 97e37dd1..ad3c0c9b 100644 --- a/veejay-current/veejay-server/veejay/vj-event.c +++ b/veejay-current/veejay-server/veejay/vj-event.c @@ -137,8 +137,9 @@ static char *get_print_buf(int size) { char *res = (char*) vj_calloc(sizeof(char) * s ); return res; } +#define MAX_MACRO_BANKS 12 -static void *macro_bank_[12]; +static void *macro_bank_[MAX_MACRO_BANKS]; static void *macro_port_ = NULL; static int current_macro_ = 0; static int macro_status_ = 0; @@ -543,7 +544,7 @@ static void init_vims_for_macro(); static void macro_select( int slot ) { - if( slot >= 0 && slot < 12 ) + if( slot >= 0 && slot < MAX_MACRO_BANKS ) { macro_bank_[ current_macro_ ] = macro_port_; current_macro_ = slot; @@ -820,33 +821,6 @@ vj_msg_bundle *vj_event_bundle_get(int event_id) return NULL; } #ifdef HAVE_SDL -void del_all_keyb_events() -{ - if(!keyboard_events) - return; - - if(!hash_isempty( keyboard_events )) - { - hscan_t scan; - hash_scan_begin( &scan, keyboard_events ); - hnode_t *node; - while( ( node = hash_scan_next(&scan)) != NULL ) - { - vj_keyboard_event *ev = NULL; - ev = hnode_get( node ); - if(ev) - { - if(ev->arguments) free(ev->arguments); - if(ev->vims) free(ev->vims); - } - } - hash_free_nodes( keyboard_events ); - hash_destroy( keyboard_events ); - } - - veejay_memset( keyboard_event_map_, 0, sizeof(keyboard_event_map_)); -} - int del_keyboard_event(int id ) { hnode_t *node; @@ -885,6 +859,18 @@ int keyboard_event_exists(int id) return 0; } +void destroy_keyboard_event( vj_keyboard_event *ev ) +{ + if( ev ) { + if( ev->vims ) + free( ev->vims ); + + if( ev->arguments ) + free( ev->arguments ); + + free(ev); + } +} vj_keyboard_event *new_keyboard_event( int symbol, int modifier, const char *value, int event_id ) @@ -2647,8 +2633,62 @@ void vj_event_init(void *ptr) if(ptr) vj_event_load_keyboard_configuration( (veejay_t*) ptr ); #endif init_vims_for_macro(); +} +#ifdef HAVE_SDL +static void vj_event_destroy_hash( hash_t *h) +{ + if(!hash_isempty(h)) { + hscan_t s = (hscan_t) {0}; + hash_scan_begin( &s, h ); + hnode_t *node = NULL; + while((node = hash_scan_next(&s)) != NULL ) { + void *ptr = hnode_get(node); + if(ptr) destroy_keyboard_event(ptr); + } + hash_free_nodes( h ); + } + hash_destroy( h ); +} +#endif + +static void vj_event_destroy_bundles( hash_t *h ) +{ + if(!hash_isempty(h)) { + hscan_t s = (hscan_t) {0}; + hash_scan_begin( &s, h ); + hnode_t *node = NULL; + while((node = hash_scan_next(&s)) != NULL ) { + vj_msg_bundle *m = hnode_get(node); + if(m) { + if( m->bundle ) + free(m->bundle); + free(m); + } + } + hash_free_nodes( h ); + } + hash_destroy( h ); +} + +void vj_event_destroy() +{ +#ifdef HAVE_SDL + if(keyboard_events) vj_event_destroy_hash( keyboard_events ); +#endif + if(BundleHash) vj_event_destroy_bundles( BundleHash ); + vj_picture_free(); + + vj_event_vevo_free(); + + int i; + for( i = 0; i < MAX_MACRO_BANKS; i ++ ) + { + macro_port_ = macro_bank_[i]; + if(macro_port_) + reset_macro_(); + } } @@ -3021,10 +3061,13 @@ void vj_event_send_bundles(void *ptr, const char format[], va_list ap) veejay_strncat( buf, form, form_len); if(tree->arg_len) veejay_strncat( buf, tree->args, tree->arg_len ); + + void *ptr = tree; + tree = tree->next; + + free(ptr); } - if(root) - free(root); #endif if(name) free(name); @@ -10453,23 +10496,4 @@ void vj_event_set_macro_status( void *ptr, const char format[], va_list ap ) } } -void vj_event_stop() -{ - // destroy bundlehash, destroy keyboard_events -#ifdef HAVE_SDL - del_all_keyb_events(); -#endif - - vj_picture_free(); - - vj_event_vevo_free(); - - int i; - for( i = 0; i < 12; i ++ ) - { - macro_port_ = macro_bank_[i]; - if(macro_port_) - reset_macro_(); - } -} diff --git a/veejay-current/veejay-server/veejay/vj-event.h b/veejay-current/veejay-server/veejay/vj-event.h index d8314ac2..f67374a2 100644 --- a/veejay-current/veejay-server/veejay/vj-event.h +++ b/veejay-current/veejay-server/veejay/vj-event.h @@ -27,6 +27,7 @@ void vj_event_fmt_arg ( int *args, char *str, const char format[], va_list ap); void vj_event_init (void *ptr); +void vj_event_destroy(); void vj_event_print_range ( int n1, int n2); int veejay_finish_action_file(void *ptr, char *filename ); int veejay_load_action_file( void *ptr, char *filename ); diff --git a/veejay-current/veejay-server/veejay/vj-eventman.c b/veejay-current/veejay-server/veejay/vj-eventman.c index cffd1cfa..b7078bd9 100644 --- a/veejay-current/veejay-server/veejay/vj-eventman.c +++ b/veejay-current/veejay-server/veejay/vj-eventman.c @@ -351,19 +351,16 @@ void vj_event_vevo_dump(void) void vj_event_vevo_free(void) { unsigned int i; - if( !index_map_) - return; for( i = 0 ; i < MAX_INDEX ; i ++ ) - if( index_map_[i] ) vpf( index_map_[i] ); + if( index_map_[i] ) vpf( index_map_[i] ); free(index_map_); } void vj_init_vevo_events(void) { - index_map_ = (vevo_port_t*) vj_malloc(sizeof(vevo_port_t*) * MAX_INDEX ); - veejay_memset( index_map_, 0, sizeof( vevo_port_t *) * MAX_INDEX ); + index_map_ = (vevo_port_t*) vj_calloc(sizeof(vevo_port_t*) * MAX_INDEX ); index_map_[VIMS_MACRO] = _new_event( "%d %d", @@ -2913,3 +2910,4 @@ void vj_init_vevo_events(void) + diff --git a/veejay-current/veejay-server/veejay/vj-osc.c b/veejay-current/veejay-server/veejay/vj-osc.c index 2f42f514..e08fe5a6 100644 --- a/veejay-current/veejay-server/veejay/vj-osc.c +++ b/veejay-current/veejay-server/veejay/vj-osc.c @@ -627,7 +627,7 @@ static struct { NULL, -1 } }; -static char **string_tokenize( const char delim, const char *name, int *ntokens ) { +static char **string_tokenize( const char delim, const char *name, int *ntokens ) { int n = strlen(name); int i; int n_tokens = 0; @@ -679,7 +679,7 @@ static void free_token( char **arr ) { } -int vj_osc_build_cont( vj_osc *o ) +int vj_osc_build_cont( vj_osc *o ) //FIXME never freed { int i; @@ -691,6 +691,7 @@ int vj_osc_build_cont( vj_osc *o ) for( i = 0; osc_method_layout[i].name != NULL ; i ++ ) { int ntokens = 0; + //FIXME: arr never freed but should be, leaking memory here char **arr = string_tokenize( '/', osc_method_layout[i].name, &ntokens); if( arr == NULL || ntokens == 0 ) { continue; @@ -710,6 +711,7 @@ int vj_osc_build_cont( vj_osc *o ) int ntokens = 0; int exists = 0; int attach_id = 0; + //FIXME: arr never freed but should be, leaking memory here char **arr = string_tokenize( '/', osc_method_layout[i].name, &ntokens); if( arr == NULL || ntokens == 0 ) { continue; @@ -742,6 +744,7 @@ int vj_osc_build_cont( vj_osc *o ) for( i = 0; osc_method_layout[i].name != NULL ; i ++ ) { int ntokens = 0; + //FIXME: arr never freed but should be, leaking memory here char **arr = string_tokenize( '/', osc_method_layout[i].name, &ntokens); if( arr == NULL || ntokens == 0 ) continue; diff --git a/veejay-current/veejay-server/veejay/vj-perform.c b/veejay-current/veejay-server/veejay/vj-perform.c index 0ec34f34..55039f89 100644 --- a/veejay-current/veejay-server/veejay/vj-perform.c +++ b/veejay-current/veejay-server/veejay/vj-perform.c @@ -372,7 +372,7 @@ static int vj_perform_try_sequence( veejay_t *info ) static void seq_play_sample( veejay_t *info, int n) { info->seq->current = n; - int id = info->seq->samples[n]; +// int id = info->seq->samples[n]; int which_sample = 0; int offset = sample_get_first_mix_offset( info->uc->sample_id, &which_sample, info->seq->samples[info->seq->current] ); @@ -1158,7 +1158,7 @@ int vj_perform_send_primary_frame_s2(veejay_t *info, int mcast, int to_mcast_lin { char info_line[128]; int compr_ok = 0; - uint32_t planes[3]; + uint32_t planes[3] = {0}; int data_len = 44; memset(info_line, 0, sizeof(info_line) ); @@ -2893,7 +2893,6 @@ int vj_perform_queue_audio_frame(veejay_t *info) int pred_len = num_samples; int bps = el->audio_bps; uint8_t *a_buf = top_audio_buffer; - int rs = 0; if (info->audio == AUDIO_PLAY) { switch (info->uc->playback_mode) @@ -2906,12 +2905,11 @@ int vj_perform_queue_audio_frame(veejay_t *info) num_samples = pred_len; veejay_memset( a_buf, 0, num_samples * bps ); } - else - rs = 1; break; case VJ_PLAYBACK_MODE_PLAIN: if( el->has_audio ) { + int rs = 0; if (settings->current_frame_num <= settings->max_frame_num) num_samples = vj_el_get_audio_frame(el, this_frame,a_buf ); else @@ -2923,6 +2921,7 @@ int vj_perform_queue_audio_frame(veejay_t *info) } else rs = 1; + if( settings->current_playback_speed < 0 && rs ) vj_perform_reverse_audio_frame(info,num_samples,a_buf); } @@ -2936,8 +2935,6 @@ int vj_perform_queue_audio_frame(veejay_t *info) num_samples = pred_len; veejay_memset(a_buf, 0, num_samples * bps ); } - else - rs = 1; } break; } diff --git a/veejay-current/veejay-server/veejay/vj-pjack.c b/veejay-current/veejay-server/veejay/vj-pjack.c index 7d562ead..020eec54 100644 --- a/veejay-current/veejay-server/veejay/vj-pjack.c +++ b/veejay-current/veejay-server/veejay/vj-pjack.c @@ -65,6 +65,7 @@ static int _vj_jack_start(int *dri) veejay_msg(0, "Unable to find jack port"); break; } + // veejay_msg(0, "To run veejay without audio, use -a0"); return 0; } diff --git a/veejay-current/veejay-server/veejay/vj-sdl-font.c b/veejay-current/veejay-server/veejay/vj-sdl-font.c index b6304837..43c75d7a 100644 --- a/veejay-current/veejay-server/veejay/vj-sdl-font.c +++ b/veejay-current/veejay-server/veejay/vj-sdl-font.c @@ -131,7 +131,7 @@ static inline void _overlay_text_uv( uint8_t *dst, uint8_t *a, const int len, ui static void *_try_font( char *path ) { - void *res = TTF_OpenFontIndex( path, 10, 0 ); + void *res = TTF_OpenFontIndex( path, 10, 0 ); //FIXME never freed if(!res) { return NULL; } diff --git a/veejay-current/veejay-server/veejay/vj-task.c b/veejay-current/veejay-server/veejay/vj-task.c index ebb55460..0e083ab8 100644 --- a/veejay-current/veejay-server/veejay/vj-task.c +++ b/veejay-current/veejay-server/veejay/vj-task.c @@ -96,6 +96,26 @@ static int euid = 0; #define __lock() pthread_mutex_lock(&queue_mutex) #define __unlock() pthread_mutex_unlock(&queue_mutex) +static void task_allocate() +{ + unsigned int i; + for( i = 0; i < MAX_WORKERS; i ++ ) { + job_list[i] = vj_malloc(sizeof(pjob_t)); + vj_task_args[i] = vj_malloc(sizeof(vj_task_arg_t)); + p_thread_args[i] = vj_malloc( sizeof(uint8_t) ); + } +} + +void task_destroy() +{ + unsigned int i; + for( i = 0; i < MAX_WORKERS; i ++ ) { + free(job_list[i]); + free(vj_task_args[i]); + free(p_thread_args[i]); + } +} + static void task_reset() { unsigned int i; @@ -105,11 +125,8 @@ static void task_reset() memset( job_list,0,sizeof(pjob_t*) * MAX_WORKERS ); memset( &vj_task_args,0,sizeof(vj_task_arg_t*) * MAX_WORKERS ); for( i = 0; i < MAX_WORKERS; i ++ ) { - job_list[i] = vj_malloc(sizeof(pjob_t)); - vj_task_args[i] = vj_malloc(sizeof(vj_task_arg_t)); memset( job_list[i],0, sizeof(pjob_t)); memset( vj_task_args[i],0, sizeof(vj_task_arg_t)); - p_thread_args[i] = malloc( sizeof(uint8_t) ); memset( p_thread_args[i],0, sizeof(uint8_t)); memset( &(running_tasks[i]), 0, sizeof(struct task)); } @@ -206,7 +223,7 @@ static inline uint8_t task_get_workers() void task_init() { - task_reset(); + task_allocate(); int max_p = sched_get_priority_max( SCHED_FIFO ); int min_p = sched_get_priority_min( SCHED_FIFO ); diff --git a/veejay-current/veejay-server/veejay/vj-task.h b/veejay-current/veejay-server/veejay/vj-task.h index f2568a37..b8c694d1 100644 --- a/veejay-current/veejay-server/veejay/vj-task.h +++ b/veejay-current/veejay-server/veejay/vj-task.h @@ -62,6 +62,7 @@ void *vj_task_get_internal_buf(); int task_start(unsigned int max_workers); void task_stop(unsigned int max_workers); void task_init(); +void task_destroy(); int task_num_cpus(); void vj_task_set_overlap( int val ); void performer_job( uint8_t job_num );