From 10dde2409ee034b22fd4ba507e7f9d1bfaa54982 Mon Sep 17 00:00:00 2001 From: Niels Elburg Date: Tue, 5 Dec 2006 20:53:04 +0000 Subject: [PATCH] more bugfixes, new vims 389, fx cut, fx copy, fx paste work in gveejayreloaded cross samples, fixed segfault in chromamagick, fixed uv length in dummy, disabled disconnect and quicklaunch button in gveejayreloaded (useless) git-svn-id: svn://code.dyne.org/veejay/trunk@694 eb8d1916-c9e9-0310-b8de-cf0c9472ead5 --- veejay-current/gveejay-reloaded/callback.c | 79 +++++++++-- veejay-current/gveejay-reloaded/vj-api.c | 131 +------------------ veejay-current/libstream/vj-tag.c | 4 +- veejay-current/libvje/effects/chromamagick.c | 8 +- veejay-current/libvje/effects/dummy.c | 12 +- veejay-current/libvje/plugload.c | 5 +- veejay-current/libyuv/subsample.c | 1 - veejay-current/share/gveejay.reloaded.glade | 2 - veejay-current/veejay/vims.h | 1 + veejay-current/veejay/vj-event.c | 15 ++- veejay-current/veejay/vj-event.h | 3 +- veejay-current/veejay/vj-eventman.c | 10 ++ veejay-current/veejay/vj-font.c | 73 ++++++++--- veejay-current/veejay/vj-perform.c | 2 +- 14 files changed, 172 insertions(+), 174 deletions(-) diff --git a/veejay-current/gveejay-reloaded/callback.c b/veejay-current/gveejay-reloaded/callback.c index 468bc8d3..c4c5a892 100644 --- a/veejay-current/gveejay-reloaded/callback.c +++ b/veejay-current/gveejay-reloaded/callback.c @@ -505,7 +505,6 @@ void on_button_fx_del_clicked(GtkWidget *w, gpointer user_data) #define slider_changed( arg_num, value ) \ {\ -online_update( arg_num, value );\ if(!info->status_lock && !info->parameter_lock)\ {\ info->parameter_lock = 1;\ @@ -517,7 +516,6 @@ info->parameter_lock = 0;\ #define param_changed( arg_num, fraction, name ) \ {\ -online_update( arg_num, (get_slider_val(name) + fraction) );\ if(!info->status_lock && !info->parameter_lock)\ {\ info->parameter_lock = 1;\ @@ -2496,25 +2494,88 @@ void on_colorselection_color_changed( GtkWidget *w, gpointer user_data) { DBG_C(); } +static +gchar *get_clipboard_fx_buffer() +{ + int len = 0; + int p[16]; + int i; + for(i=0; i <16;i++) + p[i] = 0; + multi_vims( VIMS_CHAIN_GET_ENTRY, "%d %d", 0, + info->uc.selected_chain_entry ); + + gchar *answer = recv_vims(3,&len); + if(len <= 0 || answer == NULL ) + { + if(answer) g_free(answer); + return NULL; + } + + i = sscanf( answer, "%d %d %d %d %d %d %d %d %d %d %d", + &p[0], //fx id + &p[1], //2 video + &p[2], //n params + &p[3], //p0 + &p[4], //p1 + &p[5], //p2 + &p[6], //p3 + &p[7],//p4 + &p[8],//p5 + &p[9],//p6 + &p[10] //p7 + ); + + char preset[512]; + bzero(preset,512); + sprintf(preset, "%d", p[0]); + veejay_msg(0, "%s", answer); + for(i=0; i < p[2] ;i++) + { + char tmp[10]; + sprintf(tmp, " %d", p[3+i] ); + strcat( preset,tmp); + } + g_free(answer); + return strdup(preset); +} + +static *last_fx_buf = NULL; void on_button_fx_cut_clicked( GtkWidget *w, gpointer user_data) { - DBG_C(); + if(last_fx_buf) + free(last_fx_buf); + + last_fx_buf = get_clipboard_fx_buffer(); - clone_clipboard_entry(); on_button_fx_del_clicked( NULL,NULL ); } void on_button_fx_paste_clicked( GtkWidget *w, gpointer user_data) { - DBG_C(); + int i = info->uc.selected_chain_entry; + sample_slot_t *s = info->selected_slot; - preset_from_clipboard( "buffer" ); + if( last_fx_buf && s) + { + char msg[256]; + sprintf( msg, "%03d:%d %d %s;", + VIMS_CHAIN_ENTRY_SET_PRESET, + s->sample_id, + i, + last_fx_buf ); + msg_vims(msg); + info->uc.reload_hint[HINT_ENTRY]=1; + } + + } void on_button_fx_copy_clicked(GtkWidget *w, gpointer user_data) { - DBG_C(); - - clone_clipboard_entry(); + if(last_fx_buf) + free(last_fx_buf); + + last_fx_buf = get_clipboard_fx_buffer(); } void on_copy1_activate( GtkWidget *w, gpointer user_data) { diff --git a/veejay-current/gveejay-reloaded/vj-api.c b/veejay-current/gveejay-reloaded/vj-api.c index 62a19d8a..1f65f495 100644 --- a/veejay-current/gveejay-reloaded/vj-api.c +++ b/veejay-current/gveejay-reloaded/vj-api.c @@ -256,7 +256,6 @@ static int vims_verbosity = 0; #define livido_port_t vevo_port_t static vevo_port_t *fx_list_ = NULL; -static vevo_port_t *fx_clipboard_ = NULL; typedef struct { @@ -565,10 +564,7 @@ void setup_knobs(); void free_samplebank(void); void reset_samplebank(void); int verify_bank_capacity(int *bank_page_, int *slot_, int sample_id, int sample_type ); -static void clone_clipboard_entry(void); static void widget_get_rect_in_screen (GtkWidget *widget, GdkRectangle *r); -static void preset_from_clipboard(char *mkey); -static void online_update(int keyp, int value); static void update_curve_widget(const char *name); static void update_curve_accessibility(const char *name); static void vj_preview_draw(void); @@ -1580,7 +1576,9 @@ gboolean dialogkey_snooper( GtkWidget *w, GdkEventKey *event, gpointer user_data gchar *text = gdkkey_by_id( event->keyval ); gchar *mod = gdkmod_by_id( event->state ); - if( mod != NULL ) +veejay_msg(0, "%d : %d, %p, %p", event->keyval, event->state ,text,mod); + + if( mod != NULL && text != NULL) { if(strlen(mod) < 2 ) sprintf(tmp, "%s", text ); @@ -3672,123 +3670,6 @@ static void load_v4l_info() } } -static void online_update(int keyp, int value) -{ - char mkey[16]; - sprintf( mkey, "i%d", info->uc.selected_chain_entry ); - vevo_port_t *cur = NULL; - vevo_property_get( fx_clipboard_, mkey, 0, &cur ); - if(!cur) - return; - char key[16]; - sprintf(key, "parameter%d", keyp); - vevo_property_set( cur, key, LIVIDO_ATOM_TYPE_INT,1,&value ); -} - -static void update_clipboard(int fxid, int np, int *args) -{ - int i; - char mkey[5]; - sprintf( mkey, "i%d", info->uc.selected_chain_entry ); - vevo_port_t *cur = NULL; - vevo_property_get( fx_clipboard_, mkey, 0, &cur ); - - if( !cur ) - { - cur = (vevo_port_t*) vpn( 400 ); - vevo_property_set( fx_clipboard_, mkey, LIVIDO_ATOM_TYPE_VOIDPTR,1,&cur); - } - - int id = fxid; - int nn = np; - - vevo_property_set( cur, "fxid",LIVIDO_ATOM_TYPE_INT, 1, &id ); - - for( i = 0; i < nn; i ++ ) - { - char pname[16]; - sprintf(pname, "parameter%d",i); - int value = args[i]; - vevo_property_set(cur, pname, LIVIDO_ATOM_TYPE_INT,1, &value ); - } - - vevo_property_set( cur, "num_param", LIVIDO_ATOM_TYPE_INT,1, &i ); -} - -static void clone_clipboard_entry(void) -{ - char mkey[5]; - sprintf( mkey, "i%d", info->uc.selected_chain_entry ); - vevo_port_t *cur = NULL; - vevo_port_t *buf = NULL; - int fxid = 0; - int np = 0; - int i; - - vevo_property_get( fx_clipboard_, mkey, 0, &cur ); - if( !cur ) - return; - - vevo_property_get( cur, "fxid", 0, &fxid ); - vevo_property_get( cur, "num_param", 0, &np ); - - vevo_property_get( fx_clipboard_, "buffer", 0, &buf ); - if( !buf ) - { - buf = (vevo_port_t*) vpn( 500 ); - vevo_property_set( fx_clipboard_, "buffer", LIVIDO_ATOM_TYPE_VOIDPTR,1,&buf); - } - - vevo_property_set( buf, "fxid", LIVIDO_ATOM_TYPE_INT,1,&fxid ); - vevo_property_set( buf, "num_param", LIVIDO_ATOM_TYPE_INT, 1, &np ); - - for( i = 0; i < np; i ++ ) - { - char pname[5]; - sprintf(pname, "parameter%d",i); - int value = 0; - vevo_property_get(cur, pname,0, &value); - vevo_property_set(buf, pname, LIVIDO_ATOM_TYPE_INT,1, &value ); - } -} - -static void preset_from_clipboard(char *mkey) -{ - vevo_port_t *cur = NULL; - vevo_property_get( fx_clipboard_, mkey, 0, &cur ); - - if(!cur) - return; - - int fxid = 0; - int np = 0; - int i; - char msg[100]; - - vevo_property_get( cur, "fxid", 0, &fxid ); - vevo_property_get( cur, "num_param", 0, &np ); - - sprintf( msg, "%03d:%d %d %d ", VIMS_CHAIN_ENTRY_SET_PRESET,0, - info->uc.selected_chain_entry, fxid ); - - for( i = 0; i < np; i ++ ) - { - char pname[5]; - sprintf(pname, "parameter%d",i); - int value = 0; - vevo_property_get(cur, pname,0, &value); - char token[10]; - sprintf(token, "%d ", value); - strcat(msg,token); - } - - int len = strlen(msg); - msg[len-1] = ';'; - msg[len] = '\0'; - msg_vims( msg ); - info->uc.reload_hint[HINT_ENTRY] = 1; -} - static gint load_parameter_info() { int *st = &(info->uc.entry_tokens[0]); @@ -3839,13 +3720,12 @@ static gint load_parameter_info() for( i = 0; i < 16; i ++ ) st[i] = p[i]; - update_clipboard( p[0],p[2], q); - g_free(answer); return 1; } + // load effect chain static void load_effectchain_info() { @@ -6190,7 +6070,6 @@ void vj_gui_free() } info = NULL; - vevo_port_free( fx_clipboard_ ); vevo_port_free( fx_list_ ); } @@ -6505,8 +6384,6 @@ void vj_gui_init(char *glade_file, int launcher, char *hostname, int port_num) gtk_widget_show( info->sample_bank_pad ); - fx_clipboard_ = vpn( 300 ); - info->elref = NULL; info->effect_info = NULL; info->devlist = NULL; diff --git a/veejay-current/libstream/vj-tag.c b/veejay-current/libstream/vj-tag.c index 500a44b5..e1cf3e33 100644 --- a/veejay-current/libstream/vj-tag.c +++ b/veejay-current/libstream/vj-tag.c @@ -2117,9 +2117,9 @@ int vj_tag_get_frame(int t1, uint8_t *buffer[3], uint8_t * abuffer) if(!tag) return -1; if( vj_tag_input->pix_fmt == FMT_420|| vj_tag_input->pix_fmt == FMT_420F) - uv_len = uv_len / 4; + uv_len = len / 4; else - uv_len = uv_len / 2; + uv_len = len / 2; switch (tag->source_type) { case VJ_TAG_TYPE_V4L: diff --git a/veejay-current/libvje/effects/chromamagick.c b/veejay-current/libvje/effects/chromamagick.c index 843db1de..c1eb8f37 100644 --- a/veejay-current/libvje/effects/chromamagick.c +++ b/veejay-current/libvje/effects/chromamagick.c @@ -478,7 +478,10 @@ void chromamagic_freeze(VJFrame *frame, VJFrame *frame2, int w, int h, int op_a) b = Cb2[i]; if ( a < pixel_U_lo_ ) a = pixel_U_lo_; if ( b < pixel_U_lo_ ) b = pixel_U_lo_; - c = 255 - ((256-a) * (256 - a)) / b; + if(b) + c = 255 - ((256-a) * (256 - a)) / b; + else + c = 255 - a; Cb[i] = CLAMP_UV(c); a = Cr[i]; @@ -486,7 +489,10 @@ void chromamagic_freeze(VJFrame *frame, VJFrame *frame2, int w, int h, int op_a) if ( a < pixel_U_lo_ ) a = pixel_U_lo_; if ( b < pixel_U_lo_ ) b = pixel_U_lo_; + if(b) c = 255 - (( 256 - a ) * ( 256 - a )) / b; + else + c= 255 -a; Cr[i] = CLAMP_UV(c); } diff --git a/veejay-current/libvje/effects/dummy.c b/veejay-current/libvje/effects/dummy.c index 23900112..28e4eb24 100644 --- a/veejay-current/libvje/effects/dummy.c +++ b/veejay-current/libvje/effects/dummy.c @@ -63,9 +63,9 @@ void dummy_apply( VJFrame *frame, int width, int height, int color) colorCb = bl_pix_get_color_cb(color); colorCr = bl_pix_get_color_cr(color); - memset( Y, colorY, len); - memset( Cb,colorCb,uv_len); - memset( Cr,colorCr,uv_len); + veejay_memset( Y, colorY, len); + veejay_memset( Cb,colorCb,uv_len); + veejay_memset( Cr,colorCr,uv_len); } void dummy_rgb_apply( VJFrame *frame, int width, int height, int r,int g, int b) @@ -81,8 +81,8 @@ void dummy_rgb_apply( VJFrame *frame, int width, int height, int r,int g, int b) _rgb2yuv(r,g,b,colorY,colorCb,colorCr); - memset( Y, colorY, len); - memset( Cb,colorCb,uv_len); - memset( Cr,colorCr,uv_len); + veejay_memset( Y, colorY, len); + veejay_memset( Cb,colorCb,uv_len); + veejay_memset( Cr,colorCr,uv_len); } void dummy_free(){} diff --git a/veejay-current/libvje/plugload.c b/veejay-current/libvje/plugload.c index aa478414..120cb3da 100644 --- a/veejay-current/libvje/plugload.c +++ b/veejay-current/libvje/plugload.c @@ -499,7 +499,7 @@ static void add_to_plugin_list( const char *path ) return; int i; - char fullname[PATH_MAX+1]; + char fullname[PATH_MAX]; struct dirent **files = NULL; struct stat sbuf; int res = 0; @@ -525,7 +525,6 @@ static void add_to_plugin_list( const char *path ) return; } int n_files = scandir( path, &files, select_f, alphasort ); -veejay_msg(VEEJAY_MSG_DEBUG, "%d: '%s' ",n_files, path ); if( n_files <= 0 ) { veejay_msg(VEEJAY_MSG_ERROR, "No FF plugins found in %s", path ); @@ -541,7 +540,7 @@ veejay_msg(VEEJAY_MSG_DEBUG, "%d: '%s' ",n_files, path ); veejay_msg(VEEJAY_MSG_ERROR, "'%s' marked as bad", name); continue; } - bzero(fullname , PATH_MAX+1); + bzero(fullname , PATH_MAX); sprintf(fullname, "%s/%s", path,name ); void *handle = dlopen(fullname, RTLD_NOW ); diff --git a/veejay-current/libyuv/subsample.c b/veejay-current/libyuv/subsample.c index ff0e3425..5fb8f5c6 100644 --- a/veejay-current/libyuv/subsample.c +++ b/veejay-current/libyuv/subsample.c @@ -699,7 +699,6 @@ void chroma_subsample(subsample_mode_t mode, void *data, uint8_t *ycbcr[], void chroma_supersample(subsample_mode_t mode,void *data, uint8_t *ycbcr[], int width, int height) { - switch (mode) { case SSM_420_JPEG_BOX: ss_420jpeg_to_444(ycbcr[1], width, height); diff --git a/veejay-current/share/gveejay.reloaded.glade b/veejay-current/share/gveejay.reloaded.glade index 8fe09a21..53a59fc7 100644 --- a/veejay-current/share/gveejay.reloaded.glade +++ b/veejay-current/share/gveejay.reloaded.glade @@ -589,7 +589,6 @@ - True localhost:3490 True GTK_RELIEF_HALF @@ -616,7 +615,6 @@ - True Disconnect True GTK_RELIEF_HALF diff --git a/veejay-current/veejay/vims.h b/veejay-current/veejay/vims.h index ce456ce0..65791d2c 100644 --- a/veejay-current/veejay/vims.h +++ b/veejay-current/veejay/vims.h @@ -205,6 +205,7 @@ enum { VIMS_ENTRY_SOURCE_TOGGLE = 381, #ifdef HAVE_FREETYPE + VIMS_COPYRIGHT = 389, VIMS_FONT_POS = 390, VIMS_FONT_COL = 391, VIMS_FONT_SIZE_FONT = 392, diff --git a/veejay-current/veejay/vj-event.c b/veejay-current/veejay/vj-event.c index 6564f135..9959ea5b 100644 --- a/veejay-current/veejay/vj-event.c +++ b/veejay-current/veejay/vj-event.c @@ -207,6 +207,7 @@ static struct { /* hardcoded keyboard layout (the default keys) */ { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_u, VIMS_MOD_NONE, "6 -1" }, { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_o, VIMS_MOD_NONE, "7 -1" }, { VIMS_OSD, SDLK_o, VIMS_MOD_CTRL, NULL }, + { VIMS_COPYRIGHT, SDLK_c, VIMS_MOD_CTRL, NULL }, { VIMS_SELECT_BANK, SDLK_1, VIMS_MOD_NONE, "1" }, { VIMS_SELECT_BANK, SDLK_2, VIMS_MOD_NONE, "2" }, { VIMS_SELECT_BANK, SDLK_3, VIMS_MOD_NONE, "3" }, @@ -6033,7 +6034,7 @@ void vj_event_v4l_set_hue(void *ptr, const char format[], va_list ap) } -void vj_event_toggle_osd( void *ptr, const char format, va_list ap ) +void vj_event_toggle_osd( void *ptr, const char format[], va_list ap ) { veejay_t *v = (veejay_t*) ptr; if(v->use_osd == 0 ) @@ -6041,7 +6042,17 @@ void vj_event_toggle_osd( void *ptr, const char format, va_list ap ) else v->use_osd = 0; } - +void vj_event_toggle_copyright( void *ptr, const char format[], va_list ap ) +{ + static int old_osd = -1; + veejay_t *v = (veejay_t*) ptr; + if( old_osd == -1 ) + old_osd = v->use_osd; + if(v->use_osd == 0 || v->use_osd == 1) + v->use_osd = 2; + else + v->use_osd = (old_osd==-1?0: old_osd); +} void vj_event_tag_set_format(void *ptr, const char format[], va_list ap) { diff --git a/veejay-current/veejay/vj-event.h b/veejay-current/veejay/vj-event.h index b140ecbd..665714be 100644 --- a/veejay-current/veejay/vj-event.h +++ b/veejay-current/veejay/vj-event.h @@ -244,7 +244,8 @@ void vj_event_font_set_position(void *ptr, const char format[], va_list ap ); void vj_event_font_set_color(void *ptr, const char format[], va_list ap ); void vj_event_font_set_size_and_font(void *ptr,const char format[], va_list ap ); void vj_event_select_subtitle( void *ptr, const char format[], va_list ap ); -void vj_event_toggle_osd( void *ptr, const char format, va_list ap ); +void vj_event_toggle_osd( void *ptr, const char format[], va_list ap ); +void vj_event_toggle_copyright( void *ptr, const char format[], va_list ap ); #endif #endif diff --git a/veejay-current/veejay/vj-eventman.c b/veejay-current/veejay/vj-eventman.c index 0131bddb..9dcf3ec1 100644 --- a/veejay-current/veejay/vj-eventman.c +++ b/veejay-current/veejay/vj-eventman.c @@ -2231,6 +2231,16 @@ void vj_init_vevo_events(void) 0, NULL ); + index_map_[ VIMS_COPYRIGHT ] = _new_event( + NULL, + VIMS_OSD, + "Print copyright", + vj_event_toggle_copyright, + 0, + VIMS_ALLOW_ANY, + NULL + ); + index_map_[ VIMS_OSD ] = _new_event( NULL, VIMS_OSD, diff --git a/veejay-current/veejay/vj-font.c b/veejay-current/veejay/vj-font.c index a9747f0d..1c23c544 100644 --- a/veejay-current/veejay/vj-font.c +++ b/veejay-current/veejay/vj-font.c @@ -1002,6 +1002,8 @@ static int test_font( vj_font_t *f , const char *font, int id) if( n2 <= 2 ) { FT_Done_Face(face); + free(name1); + free(name2); return 0; } @@ -1174,8 +1176,16 @@ void vj_font_destroy(void *ctx) free(f->index); } - if(f->face) + if( f->face ) + { + int c; + for( c = 0; c < 256 ; c ++) + { + if( f->glyphs[c] ) + FT_Done_Glyph( f->glyphs[c] ); + } FT_Done_Face( f->face ); + } if(f->plain) vj_font_dictionary_destroy( f->plain ); @@ -1279,16 +1289,31 @@ void *vj_font_get_plain_dict( void *font ) return f->plain; } -void vj_font_customize_osd( void *font,void *uc ) +void vj_font_print_credits(void *font, char *text) +{ + vj_font_t *f = (vj_font_t*) font; + + static const char *intro = + "A visual instrument for GNU/Linux\n"; + static const char *license = + "This program is licensed as\n Free Software (GNU/GPL version 2)\n\nFor more information see:\nhttp://veejay.dyne.org\nhttp://www.sourceforge.net/projects/veejay\nhttp://www.gnu.org"; + static const char *copyr = + "(C) 2002-2006 Copyright N.Elburg et all\n"; + + + //@ create text to print + sprintf(text, "This is Veejay version %s\n%s\n%s\n%s",VERSION,intro,copyr,license); + + +} + + +void vj_font_customize_osd( void *font,void *uc, int type ) { vj_font_t *f = (vj_font_t*) font; veejay_t *v = (veejay_t*) uc; video_playback_setup *settings =v->settings; -#ifdef STRICT_CHECKING - assert(f->time == 1 ); -#endif - char buf[256]; switch( v->uc->playback_mode ) @@ -1316,6 +1341,7 @@ void vj_font_customize_osd( void *font,void *uc ) if(f->add) free(f->add); f->add = strdup( buf ); + f->time = type; } void vj_font_set_constraints_and_dict( void *font, long lo, long hi, float fps, void *dict ) @@ -1842,15 +1868,7 @@ static void vj_font_text_osd_render(vj_font_t *f, long posi, void *_picture ) FT_GlyphSlot slot = face->glyph; FT_Vector pos[MAXSIZE_TEXT]; FT_Vector delta; - char osd_text[256]; - unsigned char *tmp_text = vj_font_pos_to_timecode( f, posi ); - - int size = strlen(osd_text); - if( f->add ) - sprintf(osd_text, "%s %s", tmp_text, f->add ); - else - sprintf(osd_text, "%s", tmp_text ); - + char osd_text[1024]; unsigned char c; int x = 0, y = 0, i=0; int str_w, str_w_max; @@ -1861,8 +1879,27 @@ static void vj_font_text_osd_render(vj_font_t *f, long posi, void *_picture ) int x1,y1; str_w = str_w_max = 0; - x = 0; - y = picture->height - f->current_size - 4; + int size = 0; + if(f->time == 2 ) + { + vj_font_print_credits(f,osd_text); + size = strlen(osd_text); + + } + else + { + unsigned char *tmp_text = vj_font_pos_to_timecode( f, posi ); + + if( f->add ) + sprintf(osd_text, "%s %s", tmp_text, f->add ); + else + sprintf(osd_text, "%s", tmp_text ); + size = strlen( osd_text ); + free(tmp_text); + + y = picture->height - f->current_size - 4; + } + x1 = x; y1 = y; @@ -1947,8 +1984,6 @@ static void vj_font_text_osd_render(vj_font_t *f, long posi, void *_picture ) x += slot->advance.x >> 6; } - - free(tmp_text); } diff --git a/veejay-current/veejay/vj-perform.c b/veejay-current/veejay/vj-perform.c index ddb02763..fd47ecf9 100644 --- a/veejay-current/veejay/vj-perform.c +++ b/veejay-current/veejay/vj-perform.c @@ -2817,7 +2817,7 @@ static int vj_perform_render_font( veejay_t *info, video_playback_setup *setting ); frame->ssm = 1; } - vj_font_customize_osd(info->osd, info ); + vj_font_customize_osd(info->osd, info, info->use_osd ); vj_font_render( info->osd, font_frame , settings->current_frame_num ); } }