From 2ba715f9c42b8e4849125e520e332d42c42ada83 Mon Sep 17 00:00:00 2001 From: niels Date: Sun, 7 Jun 2015 00:13:51 +0200 Subject: [PATCH] replace strdup for vj_strdup (faster), fix magic tracer, clear task banks after completing multithread task --- veejay-current/veejay-server/configure.ac | 2 +- .../veejay-server/libel/vj-avcodec.c | 3 +- veejay-current/veejay-server/libel/vj-el.c | 6 +-- .../libplugger/freeframe-loader.c | 4 +- .../veejay-server/libplugger/frei0r-loader.c | 4 +- .../veejay-server/libplugger/livido-loader.c | 13 +++--- .../veejay-server/libplugger/plugload.c | 8 ++-- veejay-current/veejay-server/libvevo/vevo.c | 31 +++++++------- .../veejay-server/libvje/effects/common.c | 4 +- .../veejay-server/libvje/effects/flare.c | 8 ++-- .../veejay-server/libvje/effects/mtracer.c | 40 +++++++++---------- .../veejay-server/libvje/plugload.c | 12 +++--- .../veejay-server/libvjmem/memcpy.c | 18 +++++++++ .../veejay-server/libvjmem/vj-x86.c | 25 ++++-------- veejay-current/veejay-server/libvjmem/vjmem.h | 8 ++-- .../veejay-server/libvjmsg/vj-common.c | 4 +- .../veejay-server/libvjnet/vj-server.c | 2 +- .../veejay-server/veejay/liblavplayvj.c | 4 +- .../veejay-server/veejay/vj-event.c | 30 ++++++++------ .../veejay-server/veejay/vj-eventman.c | 8 ++-- veejay-current/veejay-server/veejay/vj-font.c | 32 +++++++-------- veejay-current/veejay-server/veejay/vj-misc.c | 6 +-- .../veejay-server/veejay/vj-perform.c | 22 +++++----- veejay-current/veejay-server/veejay/vj-task.c | 30 ++++++++------ veejay-current/veejay-server/veejay/vjkf.c | 8 ++-- 25 files changed, 175 insertions(+), 157 deletions(-) diff --git a/veejay-current/veejay-server/configure.ac b/veejay-current/veejay-server/configure.ac index 4f72b09d..4d8ab1c3 100644 --- a/veejay-current/veejay-server/configure.ac +++ b/veejay-current/veejay-server/configure.ac @@ -297,7 +297,7 @@ case $host_cpu in if test "x$enable_debug" != "xyes" ; then OP_CFLAGS="-O2" OPTCFLAGS="-O3 -ftree-vectorize" - fi + fi AC_SUBST(OP_CFLAGS) SUBSAMPLE_CFLAGS="" diff --git a/veejay-current/veejay-server/libel/vj-avcodec.c b/veejay-current/veejay-server/libel/vj-avcodec.c index d869e1eb..d411a489 100644 --- a/veejay-current/veejay-server/libel/vj-avcodec.c +++ b/veejay-current/veejay-server/libel/vj-avcodec.c @@ -72,8 +72,7 @@ char* vj_avcodec_get_codec_name(int codec_id ) default: snprintf(name,sizeof(name), "Unknown"); break; } - char *res = strdup(name); - return res; + return vj_strdup(name); } void vj_libav_ffmpeg_version() diff --git a/veejay-current/veejay-server/libel/vj-el.c b/veejay-current/veejay-server/libel/vj-el.c index a6907106..e2a3f160 100644 --- a/veejay-current/veejay-server/libel/vj-el.c +++ b/veejay-current/veejay-server/libel/vj-el.c @@ -541,7 +541,7 @@ int open_video_file(char *filename, editlist * el, int preserve_pathname, int de } if (preserve_pathname) - realname = strdup(filename); + realname = vj_strdup(filename); else realname = canonicalize_file_name( filename ); @@ -633,7 +633,7 @@ int open_video_file(char *filename, editlist * el, int preserve_pathname, int de el->lav_fd[n] = elfd; el->num_frames[n] = lav_video_frames(el->lav_fd[n]); - el->video_file_list[n] = strndup(realname, strlen(realname)); + el->video_file_list[n] = vj_strndup(realname, strlen(realname)); /* Debug Output */ if(n == 0 ) @@ -2033,7 +2033,7 @@ editlist *vj_el_soft_clone(editlist *el) clone->pixfmt[i] = 0; if( el->lav_fd[i] && el->video_file_list[i]) { - clone->video_file_list[i] = strdup( el->video_file_list[i] ); + clone->video_file_list[i] = vj_strdup( el->video_file_list[i] ); clone->lav_fd[i] = el->lav_fd[i]; clone->num_frames[i] = el->num_frames[i]; clone->pixfmt[i] =el->pixfmt[i]; diff --git a/veejay-current/veejay-server/libplugger/freeframe-loader.c b/veejay-current/veejay-server/libplugger/freeframe-loader.c index 7f2cf2bc..ee3f4552 100644 --- a/veejay-current/veejay-server/libplugger/freeframe-loader.c +++ b/veejay-current/veejay-server/libplugger/freeframe-loader.c @@ -140,9 +140,9 @@ void* deal_with_ff( void *handle, char *name, int w, int h ) } char plugname[512]; - sprintf(plugname, "FreeFrame %s", pis->pluginName ); + snprintf(plugname,sizeof(plugname), "FreeFrame %s", pis->pluginName ); - plugin_name = strdup( plugname ); + plugin_name = vj_strdup( plugname ); if ( (q(FF_INITIALISE, NULL, 0 )).ivalue == FF_FAIL ) { diff --git a/veejay-current/veejay-server/libplugger/frei0r-loader.c b/veejay-current/veejay-server/libplugger/frei0r-loader.c index 48b59f78..c5161ae0 100644 --- a/veejay-current/veejay-server/libplugger/frei0r-loader.c +++ b/veejay-current/veejay-server/libplugger/frei0r-loader.c @@ -335,7 +335,7 @@ static char *split_parameter_name( const char *name, const char *vj_name ) static void *init_parameter_port( int min, int max, int def,const char *name, int seq_no, int type ) { void *parameter = vpn( VEVO_FR_PARAM_PORT ); - char *dname = strdup(name); + char *dname = vj_strdup(name); int n = 0; while( dname[n] != '\0' ) { @@ -561,7 +561,7 @@ void* deal_with_fr( void *handle, char *name) char plugin_name[512]; snprintf( plugin_name, sizeof(plugin_name) , "frei0r %s", finfo.name ); - char *plug_name = strdup( plugin_name ); + char *plug_name = vj_strdup( plugin_name ); int extra = 0; int n_inputs = 0; diff --git a/veejay-current/veejay-server/libplugger/livido-loader.c b/veejay-current/veejay-server/libplugger/livido-loader.c index a2096a32..37c327af 100644 --- a/veejay-current/veejay-server/libplugger/livido-loader.c +++ b/veejay-current/veejay-server/libplugger/livido-loader.c @@ -75,7 +75,7 @@ char *veejay_valid_osc_name( const char *in ) { int n = strlen( in ); int k; - char *res = strdup( in ); + char *res = vj_strndup( in, n ); for( k = 0; k < n ; k ++ ) { res[k] = make_valid_char_( in[k] ); @@ -629,8 +629,8 @@ char *livido_describe_parameter_format_osc( void *instance, int p ) int kind = 0; error = vevo_property_get( param_templ, "HOST_kind",0,&kind ); char fmt[5]; - veejay_memset(fmt,0,sizeof(fmt)); - + fmt[1] = '\0'; + switch(kind) { case HOST_PARAM_INDEX: @@ -658,7 +658,7 @@ char *livido_describe_parameter_format_osc( void *instance, int p ) break; } - char *res = strdup( fmt ); + char *res = vj_strdup( fmt ); return res; } @@ -969,7 +969,8 @@ char *livido_describe_parameter_format( void *instance, int p ) int n_elems = vevo_property_num_elements( param, "value" ); - char fmt[3] = { 0,0,0 }; + char fmt[2]; + fmt[1] = '\0'; switch(kind) { @@ -996,7 +997,7 @@ char *livido_describe_parameter_format( void *instance, int p ) break; } - char *res = strdup( fmt ); + char *res = vj_strdup( fmt ); return res; } diff --git a/veejay-current/veejay-server/libplugger/plugload.c b/veejay-current/veejay-server/libplugger/plugload.c index 185c1852..af52feaa 100644 --- a/veejay-current/veejay-server/libplugger/plugload.c +++ b/veejay-current/veejay-server/libplugger/plugload.c @@ -203,7 +203,7 @@ static int add_to_plugin_list( const char *path ) continue; } char *bname = basename( fullname ); - char *basename = strdup( bname ); + char *basename = vj_strdup( bname ); void *plugin = NULL; veejay_msg(VEEJAY_MSG_DEBUG, "Loading %s",fullname ); @@ -379,7 +379,7 @@ static char *get_livido_plug_path() char target[1024]; char lvdpath[1024]; - memset(lvdpath,0,sizeof(lvdpath)); + veejay_memset(lvdpath,0,sizeof(lvdpath)); int err = readlink( location, target, sizeof(target) ); if( err >= 0 ) @@ -399,7 +399,7 @@ static char *get_livido_plug_path() strncpy(lvdpath, target, n ); strcat( lvdpath, "/lib/livido-plugins" ); - return strdup( lvdpath ); + return vj_strdup( lvdpath ); } return NULL; } @@ -1049,7 +1049,7 @@ vj_effect *plug_get_plugin( int fx_id ) { vevo_property_get( parameter, "default", 0,&(vje->defaults[k])); param_descr[valid_p] = vevo_property_get_string(parameter,"name"); if(param_descr[valid_p]==NULL) - param_descr[valid_p] = strdup( "Number" ); + param_descr[valid_p] = vj_strdup( "Number" ); valid_p ++; } } diff --git a/veejay-current/veejay-server/libvevo/vevo.c b/veejay-current/veejay-server/libvevo/vevo.c index d00c1411..99087c1f 100644 --- a/veejay-current/veejay-server/libvevo/vevo.c +++ b/veejay-current/veejay-server/libvevo/vevo.c @@ -299,7 +299,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_pool_alloc_node(port_index_t, port->pool ); - i->key = strdup(key); + i->key = vj_strdup(key); i->hash_code = hash_key; i->next = NULL; return i; @@ -1455,7 +1455,7 @@ char **vevo_list_properties(vevo_port_t * p) l = (port_index_t *) port->index; while (l != NULL) { - list[i] = (char *) strdup(l->key); + list[i] = (char *) vj_strdup(l->key); i++; l = l->next; //i++; @@ -1540,14 +1540,13 @@ static vevo_storage_t **vevo_list_nodes_(vevo_port_t * p, int atype) unsigned int N = 8; // null terminated list of keys 2 -> 4 -> 8 -> 16 etc int idx = 0; - vevo_storage_t **list = (vevo_storage_t**)vj_malloc(sizeof(vevo_storage_t*) * N ); + vevo_storage_t **list = (vevo_storage_t**) malloc(sizeof(vevo_storage_t*) * N ); // realloc does not guarantee same alignment if( port->table) { hnode_t *node = NULL; - hscan_t scan; + hscan_t scan = (hscan_t) { 0 }; vevo_storage_t *s = NULL; - memset(&scan,0,sizeof(hscan_t)); hash_scan_begin( &scan,(hash_t*) port->table ); while((node=hash_scan_next(&scan)) != NULL) { @@ -1967,7 +1966,7 @@ char *vevo_format_kind( vevo_port_t *port, const char *key ) break; } - return strdup( token ); + return vj_strdup( token ); } @@ -2010,7 +2009,7 @@ static char *vevo_scan_token_( const char *s ) char *res = NULL; if( ld > 0 && fk ) - res = strndup( s, ld ); + res = vj_strndup( s, ld ); return res; } @@ -2154,7 +2153,7 @@ int vevo_sscanf_property( vevo_port_t *port, const char *s) n = sscanf( arg, "%lf", &(dbl_val[cur_elem])); break; case 's': - str_val[cur_elem] = strdup( arg ); + str_val[cur_elem] = vj_strdup( arg ); n = 1; break; default: @@ -2228,7 +2227,7 @@ char **vevo_sprintf_port( vevo_port_t *port ) char *buf = vevo_sprintf_property(port, keys[i]); if(buf) { - res[k++] = strdup( buf ); + res[k++] = vj_strdup( buf ); free(buf); } free(keys[i]); @@ -2253,14 +2252,14 @@ char *vevo_sprintf_property_value( vevo_port_t *port, const char *key) char val[64]; int n = vevo_property_num_elements( port, key ); if( n <= 0 ) { - return strdup(""); + return vj_strdup(""); } int i; int atom = vevo_property_atom_type( port , key ); - memset(tmp,0,sizeof(tmp)); - memset(val,0,sizeof(val)); + veejay_memset(tmp,0,sizeof(tmp)); + veejay_memset(val,0,sizeof(val)); if(atom == VEVO_ATOM_TYPE_INT || atom == VEVO_ATOM_TYPE_BOOL) { @@ -2323,7 +2322,7 @@ char *vevo_sprintf_property_value( vevo_port_t *port, const char *key) { return NULL; } - return strdup( tmp ); + return vj_strdup( tmp ); } @@ -2505,7 +2504,7 @@ int vevo_property_from_string( vevo_port_t *port, const char *s, const char *key n = sscanf( arg, "%lf", &(dbl_val[cur_elem])); break; case 's': - str_val[cur_elem] = strdup( arg ); + str_val[cur_elem] = vj_strdup( arg ); n = 1; break; default: @@ -2710,10 +2709,12 @@ vevo_property_del(vevo_port_t * p, char *vevo_tabs( int lvl ) { char tmp[32]; int i; + if( lvl > 31 ) + lvl = 31; for( i = 0; i < lvl; i ++ ) tmp[i] = '\t'; tmp[lvl] = '\0'; - return strdup(tmp); + return vj_strdup(tmp); } static struct { //@ FIXME move to specific locations, use a register to register new port types and names diff --git a/veejay-current/veejay-server/libvje/effects/common.c b/veejay-current/veejay-server/libvje/effects/common.c index beef65b7..c9bcf89c 100644 --- a/veejay-current/veejay-server/libvje/effects/common.c +++ b/veejay-current/veejay-server/libvje/effects/common.c @@ -38,7 +38,7 @@ char **vje_build_param_list( int num, ... ) int i; for( i = 0; i >16; } diff --git a/veejay-current/veejay-server/libvje/effects/flare.c b/veejay-current/veejay-server/libvje/effects/flare.c index ca45db9f..13086f96 100644 --- a/veejay-current/veejay-server/libvje/effects/flare.c +++ b/veejay-current/veejay-server/libvje/effects/flare.c @@ -165,25 +165,25 @@ void flare_unfreeze( VJFrame *frame, VJFrame *frame2, int w, int h, int op_a ) { uint8_t *Cb2 = frame2->data[1]; uint8_t *Cr2 = frame2->data[2]; - int a,b; + int a=0,b=0; for(i=0; i < len; i++) { a = Y[i]; b = Y2[i]; - if ( a < 1 ) a = 1; + if ( a < 16 ) a = 16; Y[i] = 255 - (( op_a - b) * (op_a - b)) / a; //Y[i] = CLAMP_Y(c); a = Cb[i]; b = Cb2[i]; - if ( a < 1) a = 1; + if ( a < 16) a = 16; Cb[i] = 255 - (( 255 - b) * ( 255 - b )) / a; //Cb[i] = CLAMP_UV(c); a = Cr[i]; b = Cr2[i]; - if ( a < 1 ) a = 1; + if ( a < 16 ) a = 16; Cr[i] = 255 - ((255 -b ) * (255 - b)) /a ; //Cr[i] = CLAMP_UV(c); } diff --git a/veejay-current/veejay-server/libvje/effects/mtracer.c b/veejay-current/veejay-server/libvje/effects/mtracer.c index f13a3a13..82c3746f 100644 --- a/veejay-current/veejay-server/libvje/effects/mtracer.c +++ b/veejay-current/veejay-server/libvje/effects/mtracer.c @@ -45,45 +45,45 @@ vj_effect *mtracer_init(int w, int h) ve->description = "Magic Tracer"; ve->sub_format = 0; ve->extra_frame = 1; - ve->has_user = 0; - ve->param_description = vje_build_param_list( ve->num_params, "Mode", "Length"); + ve->has_user = 0; + ve->param_description = vje_build_param_list( ve->num_params, "Mode", "Length"); return ve; } void mtracer_free() { - int i; - for(i = 0; i < 3; i ++ ) { - if( mtrace_buffer[i] ) - free(mtrace_buffer[i]); - mtrace_buffer[i] = NULL; + if( mtrace_buffer[0] ) { + free(mtrace_buffer[0]); } + mtrace_buffer[0] = NULL; + mtrace_buffer[1] = NULL; + mtrace_buffer[2] = NULL; } int mtracer_malloc(int w, int h) { - mtrace_buffer[0] = (uint8_t*) vj_malloc( sizeof(uint8_t) * RUP8(w*h)); - mtrace_buffer[1] = (uint8_t*) vj_malloc( sizeof(uint8_t) * RUP8(w*h)); - mtrace_buffer[2] = (uint8_t*) vj_malloc( sizeof(uint8_t) * RUP8(w*h)); + size_t buflen = RUP8( (w*h+w)*3) * sizeof(uint8_t); + mtrace_buffer[0] = (uint8_t*) vj_malloc( buflen ); + if(!mtrace_buffer[0]) { + return 0; + } + mtrace_buffer[1] = mtrace_buffer[0] + RUP8(w*h); + mtrace_buffer[2] = mtrace_buffer[1] + RUP8(w*h); vj_frame_clear1( mtrace_buffer[0], pixel_Y_lo_, RUP8(w*h) ); - vj_frame_clear1( mtrace_buffer[1], 128, RUP8(w*h)); - vj_frame_clear1( mtrace_buffer[2], 128, RUP8(w*h)); + vj_frame_clear1( mtrace_buffer[1], 128, RUP8(w*h*2)); return 1; } -void mtracer_apply( VJFrame *frame, VJFrame *frame2, - int width, int height, int mode, int n) +void mtracer_apply( VJFrame *frame, VJFrame *frame2, int width, int height, int mode, int n) { VJFrame m; unsigned int len = frame->len; unsigned int uv_len = frame->uv_len; - int strides[4] = { len, uv_len, uv_len, 0 }; + int strides[4] = { len, uv_len, uv_len, 0 }; - memcpy( &m, frame, sizeof(VJFrame )); + veejay_memcpy( &m, frame, sizeof(VJFrame )); if (mtrace_counter == 0) { overlaymagic_apply(frame, frame2, width, height, mode,0); - vj_frame_copy1( mtrace_buffer[0], frame->data[0], len ); - vj_frame_copy1( mtrace_buffer[1], frame->data[1], uv_len ); - vj_frame_copy1( mtrace_buffer[2], frame->data[2], uv_len ); + vj_frame_copy( mtrace_buffer, frame->data, strides ); } else { overlaymagic_apply(frame, frame2, width, height, mode,0); m.data[0] = mtrace_buffer[0]; @@ -96,6 +96,4 @@ void mtracer_apply( VJFrame *frame, VJFrame *frame2, mtrace_counter++; if (mtrace_counter >= n) mtrace_counter = 0; - - } diff --git a/veejay-current/veejay-server/libvje/plugload.c b/veejay-current/veejay-server/libvje/plugload.c index 4ba5f91e..0c9b67f7 100644 --- a/veejay-current/veejay-server/libvje/plugload.c +++ b/veejay-current/veejay-server/libvje/plugload.c @@ -319,8 +319,8 @@ static void* deal_with_fr( void *handle, char *name) r_params = 8; char new_name[512]; - sprintf(new_name, "Frei0r %s", finfo.name ); - char *plug_x_name = strdup( new_name ); + snprintf(new_name,sizeof(new_name), "Frei0r %s", finfo.name ); + char *plug_x_name = vj_strdup( new_name ); vevo_property_set( port, "n_params", VEVO_ATOM_TYPE_INT, 1, &r_params ); vevo_property_set( port, "f0r_p", VEVO_ATOM_TYPE_INT,1, &n_params ); vevo_property_set( port, "name", VEVO_ATOM_TYPE_STRING,1, &plug_x_name ); @@ -360,8 +360,8 @@ static void* deal_with_ff( void *handle, char *name ) } char new_name[512]; - sprintf(new_name, "FreeFrame %s", pis->pluginName ); - plugin_name = strdup( new_name ); + snprintf(new_name,sizeof(new_name), "FreeFrame %s", pis->pluginName ); + plugin_name = vj_strdup( new_name ); if ( (q(FF_INITIALISE, NULL, 0 )).ivalue == FF_FAIL ) { veejay_msg(VEEJAY_MSG_ERROR, "Cannot call init()"); @@ -854,7 +854,7 @@ vj_effect *plug_x_get_plugin( int n ) for( k = 0; k < vje->num_params;k++ ) { char key[20]; - sprintf(key, "p%d", k ); + snprintf(key,sizeof(key), "p%d", k ); void *parameter = NULL; vevo_property_get( port, key, 0, ¶meter ); if(parameter) @@ -862,7 +862,7 @@ vj_effect *plug_x_get_plugin( int n ) vevo_property_get( parameter, "min", 0, &(vje->limits[0][k])); vevo_property_get( parameter, "max", 0, &(vje->limits[1][k])); vevo_property_get( parameter, "default", 0,&(vje->defaults[k])); - param_descr[valid_p] = strdup( "Number" ); + param_descr[valid_p] = vj_strdup( "Number" ); valid_p ++; } } diff --git a/veejay-current/veejay-server/libvjmem/memcpy.c b/veejay-current/veejay-server/libvjmem/memcpy.c index 9b015d91..326ed79e 100644 --- a/veejay-current/veejay-server/libvjmem/memcpy.c +++ b/veejay-current/veejay-server/libvjmem/memcpy.c @@ -1746,3 +1746,21 @@ void *vj_hmalloc(size_t sze, const char *name) ); return data; } + +char *vj_strdup( const char *s ) +{ + size_t sl = strlen(s); + size_t len = sl + 1; + char *ptr = vj_malloc( len ); + ptr[sl] = '\0'; + return ptr ? memcpy( ptr, s, sl ) : NULL; +} + +char *vj_strndup( const char *s, size_t n ) +{ + size_t len = n + 1; + char *ptr = vj_malloc( len ); + ptr[n] = '\0'; + return ptr ? memcpy( ptr,s,n ) : NULL; +} + diff --git a/veejay-current/veejay-server/libvjmem/vj-x86.c b/veejay-current/veejay-server/libvjmem/vj-x86.c index c2714665..56aa353c 100644 --- a/veejay-current/veejay-server/libvjmem/vj-x86.c +++ b/veejay-current/veejay-server/libvjmem/vj-x86.c @@ -240,23 +240,12 @@ void *vj_malloc_(size_t size) return ptr; } -void *vj_strict_malloc( unsigned int size, const char *f, int line ) -{ - veejay_msg(0, "%d\t\tbytes\t\tin %s:%d",size,f,line); - return vj_malloc_( size ); -} -void *vj_calloc_( unsigned int size ) -{ - void *ptr = vj_malloc_( size ); - if(ptr) - veejay_memset( ptr, 0, size ); - return ptr; -} -void *vj_strict_calloc( unsigned int size, const char *f, int line ) -{ - veejay_msg(0, "%d\t\tbytes\t\tin %s:%d", size,f, line ); - return vj_calloc_(size); -} #define RUP8(num)(((num)+8)&~8) - +void *vj_calloc_( size_t size ) +{ + void *ptr = vj_malloc_(size); + if(ptr) + veejay_memset(ptr,0,size); + return ptr; +} diff --git a/veejay-current/veejay-server/libvjmem/vjmem.h b/veejay-current/veejay-server/libvjmem/vjmem.h index c7fbf6e1..30f4aae1 100644 --- a/veejay-current/veejay-server/libvjmem/vjmem.h +++ b/veejay-current/veejay-server/libvjmem/vjmem.h @@ -29,11 +29,11 @@ extern int vj_mem_threaded_init(int w, int h); extern void vj_mem_threaded_stop(void); extern char *get_memcpy_descr( void ); extern void *vj_malloc_(size_t size); -extern void *vj_calloc_(unsigned int size ); -extern void *vj_strict_malloc(unsigned int size, const char *f, int line ); -extern void *vj_strict_calloc(unsigned int size, const char *f, int line ); +extern void *vj_calloc_(size_t size ); + #define vj_malloc(i) vj_malloc_(i) #define vj_calloc(i) vj_calloc_(i) + extern void fast_memset_dirty(void * to, int val, size_t len); extern void fast_memset_finish(); extern void packed_plane_clear( size_t len, void *to ); @@ -53,4 +53,6 @@ extern uint8_t num_threaded_tasks(); extern void vj_frame_slow_threaded( uint8_t **p0_buffer, uint8_t **p1_buffer, uint8_t **img, int len, int uv_len,const float frac ); extern void benchmark_veejay(int w, int h); extern void *vj_hmalloc(size_t sze, const char *name); +extern char *vj_strdup(const char *s); +extern char *vj_strndup(const char *s, size_t n ); #endif diff --git a/veejay-current/veejay-server/libvjmsg/vj-common.c b/veejay-current/veejay-server/libvjmsg/vj-common.c index b35b2e11..b03feca5 100644 --- a/veejay-current/veejay-server/libvjmsg/vj-common.c +++ b/veejay-current/veejay-server/libvjmsg/vj-common.c @@ -282,7 +282,7 @@ char *veejay_msg_ringfetch() if( msg_ring->dommel[pos] == NULL ) return NULL; - line = strdup( msg_ring->dommel[pos]); + line = vj_strdup( msg_ring->dommel[pos]); free(msg_ring->dommel[ pos ]); msg_ring->dommel[ pos ] = NULL; pos = (pos + 1) % MESSAGE_RING_SIZE; @@ -300,7 +300,7 @@ static inline void veejay_msg_prnt(const char *line, const char *format, FILE *o } } else { - veejay_msg_ringbuffer( strdup(line) ); + veejay_msg_ringbuffer( vj_strdup(line) ); } } diff --git a/veejay-current/veejay-server/libvjnet/vj-server.c b/veejay-current/veejay-server/libvjnet/vj-server.c index 8cccf44e..6977a4f8 100644 --- a/veejay-current/veejay-server/libvjnet/vj-server.c +++ b/veejay-current/veejay-server/libvjnet/vj-server.c @@ -1132,5 +1132,5 @@ char *vj_server_my_ip() close(sock); - return strdup(tmp); + return vj_strdup(tmp); } diff --git a/veejay-current/veejay-server/veejay/liblavplayvj.c b/veejay-current/veejay-server/veejay/liblavplayvj.c index 4765c2a7..b7b640ac 100644 --- a/veejay-current/veejay-server/veejay/liblavplayvj.c +++ b/veejay-current/veejay-server/veejay/liblavplayvj.c @@ -1247,8 +1247,8 @@ void veejay_check_homedir(void *arg) "HOME environment variable not set."); return; } - sprintf(path, "%s/.veejay", home ); - info->homedir = strndup( path, 1024 ); + snprintf(path,sizeof(path), "%s/.veejay", home ); + info->homedir = vj_strndup( path, 1024 ); if( veejay_valid_homedir(path) == 0) { diff --git a/veejay-current/veejay-server/veejay/vj-event.c b/veejay-current/veejay-server/veejay/vj-event.c index b83ee428..2f328f7b 100644 --- a/veejay-current/veejay-server/veejay/vj-event.c +++ b/veejay-current/veejay-server/veejay/vj-event.c @@ -343,7 +343,7 @@ int __done = 0;\ veejay_msg(VEEJAY_MSG_INFO, "--------------------------------------------------------");\ for(__done = 0; __len > (__done + 80); __done += 80)\ {\ - char *__tmp = strndup( str+__done, 80 );\ + char *__tmp = vj_strndup( str+__done, 80 );\ veejay_msg(VEEJAY_MSG_INFO, "[%zu][%s]",strlen(str),__tmp);\ if(__tmp) free(__tmp);\ }\ @@ -518,7 +518,7 @@ char *get_embedded_help( int fx_mode, int play_mode, int fx_entry, int id ) int n = vj_effect_get_num_params( fx_id ); char *fx_descr = vj_effect_get_description(fx_id); - sprintf(msg,"FX slot %d:%s\n", fx_entry, fx_descr ); + snprintf(msg,sizeof(msg),"FX slot %d:%s\n", fx_entry, fx_descr ); char *p = msg + strlen(msg); int i; for( i = 0; i < n ; i ++ ) { //@ specific FX help @@ -535,7 +535,7 @@ char *get_embedded_help( int fx_mode, int play_mode, int fx_entry, int id ) strncpy(p, fx_embedded_help[8+i].msg, len ); p += len; } - return strdup(msg); + return vj_strdup(msg); } return NULL; } @@ -682,7 +682,7 @@ static void store_macro_(veejay_t *v, char *str, long frame ) if( error != VEVO_NO_ERROR ) { // first element macro_block_t *m = vj_calloc( sizeof(macro_block_t)); - m->msg[0] = strdup(str); + m->msg[0] = vj_strdup(str); m->pending[0] = 1; m->age[0] = macro_current_age_; macro_current_age_++; @@ -696,7 +696,7 @@ static void store_macro_(veejay_t *v, char *str, long frame ) { if(c->msg[k] == NULL ) { - c->msg[k] = strdup(str); + c->msg[k] = vj_strdup(str); c->pending[k] = 1; c->age[k] = macro_current_age_; macro_current_age_ ++; @@ -908,7 +908,7 @@ vj_keyboard_event *new_keyboard_event( if(value) { ev->arg_len = strlen(value); - ev->arguments = strndup( value, ev->arg_len ); + ev->arguments = vj_strndup( value, ev->arg_len ); } else { @@ -1313,7 +1313,7 @@ void vj_event_fire_net_event(veejay_t *v, int net_id, char *str_arg, int *args, if(fmt) free(fmt); return; } - vims_arguments[i].value = (void*) strdup( str_arg ); + vims_arguments[i].value = (void*) vj_strdup( str_arg ); if(flags & VIMS_REQUIRE_ALL_PARAMS ) { if( strlen((char*)vims_arguments[i].value) <= 0 ) @@ -1400,7 +1400,7 @@ static char *inline_str_to_str(int flags, char *msg) veejay_memset(str,0, sizeof(str) ); if(sscanf( msg, "%s", str ) <= 0 ) return res; - res = strndup( str, 255 ); + res = vj_strndup( str, 255 ); } return res; } @@ -1521,7 +1521,11 @@ int vj_event_parse_msg( void *ptr, char *msg, int msg_len ) char *arg_str = NULL; memset( i_args, 0, sizeof(i_args) ); - arg_str = arguments = strndup( msg + 4 , msg_len - 4 ); + int n = 4; + if( msg[msg_len-4] == ';' ) + n = 5; + + arg_str = arguments = vj_strndup( msg + 4 , msg_len - n ); if( arguments == NULL ) { @@ -2140,7 +2144,7 @@ void vj_event_xml_parse_config( veejay_t *v, xmlDocPtr doc, xmlNodePtr cur ) } veejay_set_colors( c ); - v->settings->action_scheduler.sl = strdup( sample_list ); + v->settings->action_scheduler.sl = vj_strdup( sample_list ); veejay_msg(VEEJAY_MSG_DEBUG, "Scheduled '%s' for restart", sample_list ); v->settings->action_scheduler.state = 1; @@ -2446,7 +2450,7 @@ int vj_event_register_keyb_event(int event_id, int symbol, int modifier, const if(ff) { if(ff->arguments) free(ff->arguments); - if( value ) ff->arguments = strdup(value); + if( value ) ff->arguments = vj_strdup(value); if( value ) ff->arg_len = strlen(value); else ff->arg_len = 0; ff->event_id = event_id; veejay_msg( VEEJAY_MSG_DEBUG,"Updated keybinding %d + %d to VIMS %03d:%s;",modifier,symbol, ff->event_id, value); @@ -2537,7 +2541,7 @@ char *find_keyboard_default(int id) if( vj_event_default_sdl_keys[i].event_id == id ) { if( vj_event_default_sdl_keys[i].value != NULL ) - result = strdup( vj_event_default_sdl_keys[i].value ); + result = vj_strdup( vj_event_default_sdl_keys[i].value ); break; } } @@ -9498,7 +9502,7 @@ void vj_event_screenshot(void *ptr, const char format[], va_list ap) veejay_t *v = (veejay_t*) ptr; v->uc->hackme = 1; - v->uc->filename = strdup( filename ); + v->uc->filename = vj_strdup( filename ); } #endif #endif diff --git a/veejay-current/veejay-server/veejay/vj-eventman.c b/veejay-current/veejay-server/veejay/vj-eventman.c index 10e5de8f..c4c97e89 100644 --- a/veejay-current/veejay-server/veejay/vj-eventman.c +++ b/veejay-current/veejay-server/veejay/vj-eventman.c @@ -193,7 +193,7 @@ static vevo_port_t *_new_event( { int n = 0; int it = 1; - char param_name[16]; + char param_name[32]; char descr_name[255]; vevo_port_t *p = (void*) vpn( VEVO_EVENT_PORT ); @@ -216,10 +216,10 @@ static vevo_port_t *_new_event( int dd = 0; char *ds = NULL; - sprintf(param_name, "argument_%d", n ); + snprintf(param_name,sizeof(param_name), "argument_%d", n ); const char *arg = va_arg( ap, const char*); - char *descr = (char*) strdup( arg ); - sprintf(descr_name, "help_%d", n ); + char *descr = (char*) vj_strdup( arg ); + snprintf(descr_name,sizeof(descr_name), "help_%d", n ); if (format[it] == 'd') { diff --git a/veejay-current/veejay-server/veejay/vj-font.c b/veejay-current/veejay-server/veejay/vj-font.c index 5ec2aee9..b1f36df1 100644 --- a/veejay-current/veejay-server/veejay/vj-font.c +++ b/veejay-current/veejay-server/veejay/vj-font.c @@ -160,8 +160,8 @@ static void font_unlock( vj_font_t *f ) static char *make_key(int id) { char key[32]; - sprintf(key,"s%d",id); - return strdup(key); + snprintf(key,sizeof(key),"s%d",id); + return vj_strdup(key); } @@ -250,17 +250,17 @@ static char *vj_font_pos_to_timecode( vj_font_t *font, long pos ) vj_font_t *ff = (vj_font_t*) font; MPEG_timecode_t tc; veejay_memset(&tc, 0,sizeof(MPEG_timecode_t)); - char tmp[20]; + char tmp[32]; y4m_ratio_t ratio = mpeg_conform_framerate( ff->fps ); int n = mpeg_framerate_code( ratio ); mpeg_timecode(&tc, pos, n, ff->fps ); - snprintf(tmp, 20, "%2d:%2.2d:%2.2d:%2.2d", + snprintf(tmp, sizeof(tmp), "%2d:%2.2d:%2.2d:%2.2d", tc.h, tc.m, tc.s, tc.f ); - return strdup(tmp); + return vj_strdup(tmp); } static long vj_font_timecode_to_pos( vj_font_t *font, const char *tc ) @@ -351,7 +351,7 @@ static srt_seq_t *vj_font_new_srt_sequence( vj_font_t *f,int id,char *text, lon char tmp_key[16]; srt_seq_t *s = (srt_seq_t*) vj_calloc(sizeof( srt_seq_t )); s->id = id; - s->text = strdup( text ); + s->text = vj_strdup( text ); s->start = lo; s->end = hi; sprintf(tmp_key, "s%d", id ); @@ -371,7 +371,7 @@ static srt_seq_t *vj_font_new_srt_sequence( vj_font_t *f,int id,char *text, lon s->outline = 0; s->size = 40; s->font = get_default_font(f); - s->key = strdup(tmp_key); + s->key = vj_strdup(tmp_key); veejay_msg(VEEJAY_MSG_DEBUG, "New SRT sequence: '%s' starts at position %ld , ends at position %ld", @@ -758,7 +758,7 @@ char *vj_font_get_sequence( void *font, int seq ) uint8_t fg[3]; - sprintf( tmp, "%05d%09d%09d%02d%s%02d%s%03d%s%04d%04d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d", + snprintf( tmp,sizeof(tmp), "%05d%09d%09d%02d%s%02d%s%03d%s%04d%04d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d", s->id, (int)s->start, (int)s->end, @@ -790,7 +790,7 @@ char *vj_font_get_sequence( void *font, int seq ) free(tc1); free(tc2); free(key); - return strdup(tmp); + return vj_strdup(tmp); } int vj_font_new_text( void *font, char *text, long lo,long hi, int seq) @@ -922,7 +922,7 @@ void vj_font_update_text( void *font, long s1, long s2, int seq, char *text) font_lock( ff ); if( s->text ) free(s->text); - s->text = strdup( text ); + s->text = vj_strdup( text ); s->start = s1; s->end = s2; @@ -955,8 +955,8 @@ char **vj_font_get_sequences( void *font ) if( vevo_property_get( f->dictionary, items[i], 0,&s ) == VEVO_NO_ERROR ) { char tmp[16]; - sprintf(tmp, "%d", s->id ); - res[j] = strdup(tmp); + snprintf(tmp,sizeof(tmp),"%d", s->id ); + res[j] = vj_strdup(tmp); j++; } free(items[i]); @@ -983,7 +983,7 @@ char **vj_font_get_all_fonts( void *font ) char **res = (char**) vj_calloc(sizeof(char*) * (f->font_index +1) ); for( i =0; i < f->font_index ;i ++ ) - res[i] = strdup( f->font_list[i] ); + res[i] = vj_strdup( f->font_list[i] ); return res; } @@ -1027,7 +1027,7 @@ static int try_deepen( vj_font_t *f , char *path ) { if( f->font_index < MAX_FONTS ) { - char *try_font = strdup(path); + char *try_font = vj_strdup(path); if( get_font_name( f,try_font, f->font_index ) ) { f->font_table[f->font_index] = try_font; f->font_index ++; @@ -1181,7 +1181,7 @@ static char *get_font_name( vj_font_t *f,const char *font, int id ) } fontName[tlen/2] = '\0'; - f->font_list[id] = strdup( fontName ); + f->font_list[id] = vj_strdup( fontName ); return fontName; } @@ -1464,7 +1464,7 @@ void vj_font_set_osd_text(void *font, char *text ) vj_font_t *f = (vj_font_t*) font; if(f->add) free(f->add); - f->add = strdup( text ); + f->add = vj_strdup( text ); } void vj_font_set_dict( void *font, void *dict ) diff --git a/veejay-current/veejay-server/veejay/vj-misc.c b/veejay-current/veejay-server/veejay/vj-misc.c index a60d0e5c..8b62c56c 100644 --- a/veejay-current/veejay-server/veejay/vj-misc.c +++ b/veejay-current/veejay-server/veejay/vj-misc.c @@ -100,10 +100,10 @@ static char *relative_path(filelist_t *filelist, const char *node) { int len = strlen(filelist->working_dir); if( node + len + 1 ) { - char *tmp = strdup( node + len + 1); + char *tmp = vj_strdup( node + len + 1); return tmp; } - return strdup(node); + return vj_strdup(node); } static int is_usable_file( filelist_t *filelist, const char *node, const char *filename ) @@ -200,7 +200,7 @@ filelist_t *find_media_files( veejay_t *info ) fl->files = (char**) vj_calloc(sizeof(char*) * 1024 ); fl->max_files = 1024; fl->num_files = 0; - fl->working_dir = strdup(working_dir); + fl->working_dir = vj_strdup(working_dir); int res = find_files( fl, wd ); diff --git a/veejay-current/veejay-server/veejay/vj-perform.c b/veejay-current/veejay-server/veejay/vj-perform.c index 475f2ac7..adcad4b2 100644 --- a/veejay-current/veejay-server/veejay/vj-perform.c +++ b/veejay-current/veejay-server/veejay/vj-perform.c @@ -97,8 +97,8 @@ static void *lzo_; static VJFrame *crop_frame = NULL; static ycbcr_frame **video_output_buffer = NULL; /* scaled video output */ static int video_output_buffer_convert = 0; -static ycbcr_frame **frame_buffer; /* chain */ -static ycbcr_frame **primary_buffer; /* normal */ +static ycbcr_frame **frame_buffer = NULL; /* chain */ +static ycbcr_frame **primary_buffer = NULL; /* normal */ static ycbcr_frame *preview_buffer = NULL; static int preview_max_w; static int preview_max_h; @@ -652,14 +652,13 @@ int vj_perform_init(veejay_t * info) record_buffer->Cb = NULL; record_buffer->Cr = NULL; - primary_buffer = - (ycbcr_frame **) vj_malloc(sizeof(ycbcr_frame **) * PRIMARY_FRAMES); + primary_buffer = (ycbcr_frame **) vj_malloc(sizeof(ycbcr_frame **) * PRIMARY_FRAMES); const long buf_len = performer_frame_size_ * sizeof(uint8_t); int mlock_success =1 ; if(!primary_buffer) return 0; - for( c = 0; c < 8; c ++ ) + for( c = 0; c < PRIMARY_FRAMES; c ++ ) { primary_buffer[c] = (ycbcr_frame*) vj_calloc(sizeof(ycbcr_frame)); primary_buffer[c]->Y = (uint8_t*) vj_malloc(buf_len); @@ -913,9 +912,11 @@ void vj_perform_free(veejay_t * info) if(frame_buffer) free(frame_buffer); - for( c = 0;c < 8; c++ ) + for( c = 0;c < PRIMARY_FRAMES; c++ ) { - if(primary_buffer[c]->Y) free(primary_buffer[c]->Y ); + if(primary_buffer[c]->Y) { + free(primary_buffer[c]->Y ); + } free(primary_buffer[c] ); } if(primary_buffer) free(primary_buffer); @@ -3008,9 +3009,8 @@ int vj_perform_get_height( veejay_t *info ) static char *vj_perform_print_credits( veejay_t *info ) { char text[1024]; - veejay_memset(text,0,sizeof(text)); snprintf(text, 1024,"This is Veejay version %s\n%s\n%s\n%s\n%s",VERSION,intro,copyr,license,donateaddr); - return strdup(text); + return vj_strdup(text); } static char *vj_perform_osd_status( veejay_t *info ) @@ -3046,11 +3046,11 @@ static char *vj_perform_osd_status( veejay_t *info ) } if( status == 0 ) { snprintf(tmp,sizeof(tmp), "Proj"); - extra = strdup(tmp); + extra = vj_strdup(tmp); } else if(status == 1 ) { snprintf(tmp,sizeof(tmp), "Cam"); - extra = strdup(tmp); + extra = vj_strdup(tmp); } } diff --git a/veejay-current/veejay-server/veejay/vj-task.c b/veejay-current/veejay-server/veejay/vj-task.c index b159eb4f..48a94305 100644 --- a/veejay-current/veejay-server/veejay/vj-task.c +++ b/veejay-current/veejay-server/veejay/vj-task.c @@ -101,8 +101,8 @@ 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) ); + vj_task_args[i] = vj_calloc(sizeof(vj_task_arg_t)); + p_thread_args[i] = vj_calloc( sizeof(uint8_t) ); } n_cpu = sysconf( _SC_NPROCESSORS_ONLN ); @@ -126,15 +126,13 @@ static void task_reset() { unsigned int i; - memset( &p_threads,0,sizeof(p_threads)); - memset( &p_tasks,0,sizeof(p_tasks)); -// memset( job_list,0,sizeof(pjob_t*) * MAX_WORKERS ); -// memset( &vj_task_args,0,sizeof(vj_task_arg_t*) * MAX_WORKERS ); + veejay_memset( &p_threads,0,sizeof(p_threads)); + veejay_memset( &p_tasks,0,sizeof(p_tasks)); for( i = 0; i < MAX_WORKERS; i ++ ) { - memset( job_list[i],0, sizeof(pjob_t)); - memset( vj_task_args[i],0, sizeof(vj_task_arg_t)); - memset( p_thread_args[i],0, sizeof(uint8_t)); - memset( &(running_tasks[i]), 0, sizeof(struct task)); + veejay_memset( job_list[i],0, sizeof(pjob_t)); + veejay_memset( vj_task_args[i],0, sizeof(vj_task_arg_t)); + veejay_memset( p_thread_args[i],0, sizeof(uint8_t)); + veejay_memset( &(running_tasks[i]), 0, sizeof(struct task)); } numThreads = 0; @@ -481,13 +479,17 @@ int vj_task_run(uint8_t **buf1, uint8_t **buf2, uint8_t **buf3, int *strides,int return 0; vj_task_arg_t **f = (vj_task_arg_t**) vj_task_args; - unsigned int i,j; + uint8_t i,j; for ( i = 0; i < n_planes; i ++ ) { f[0]->input[i] = buf1[i]; f[0]->output[i]= buf2[i]; - if( buf3 != NULL ) + } + + if( buf3 != NULL ) { + for( i = 0; i < n_planes; i ++ ) { f[0]->temp[i] = buf3[i]; + } } f[0]->jobnum = 0; @@ -519,6 +521,10 @@ int vj_task_run(uint8_t **buf1, uint8_t **buf2, uint8_t **buf3, int *strides,int performer_job( n ); + for( i = 0; i < n; i ++ ) { + veejay_memset( f[i], 0, sizeof(vj_task_arg_t)); + } + return 1; } diff --git a/veejay-current/veejay-server/veejay/vjkf.c b/veejay-current/veejay-server/veejay/vjkf.c index 89080a23..cf84d52b 100644 --- a/veejay-current/veejay-server/veejay/vjkf.c +++ b/veejay-current/veejay-server/veejay/vjkf.c @@ -52,15 +52,15 @@ static char *keyframe_id( int p_id, int n_frame ) { char tmp[32]; - sprintf(tmp, "FX%d_%d",p_id,n_frame ); - return strdup(tmp); + snprintf(tmp,sizeof(tmp), "FX%d_%d",p_id,n_frame ); + return vj_strdup(tmp); } static char *extract_( const char *prefix , int p_id ) { char tmp[100]; - sprintf(tmp, "%s_p%d",prefix,p_id); - return strdup(tmp); + snprintf(tmp,sizeof(tmp), "%s_p%d",prefix,p_id); + return vj_strdup(tmp); } unsigned char *keyframe_pack( void *port, int parameter_id, int entry_id, int *rlen )