diff options
-rw-r--r-- | libvo/font_load.h | 1 | ||||
-rw-r--r-- | libvo/sub.c | 20 | ||||
-rw-r--r-- | libvo/sub.h | 1 | ||||
-rw-r--r-- | mplayer.c | 12 |
4 files changed, 17 insertions, 17 deletions
diff --git a/libvo/font_load.h b/libvo/font_load.h index 44832d57f7..282c9cdc7c 100644 --- a/libvo/font_load.h +++ b/libvo/font_load.h @@ -62,7 +62,6 @@ typedef struct font_desc { } font_desc_t; extern font_desc_t* vo_font; -extern font_desc_t* sub_font; #ifdef HAVE_FREETYPE diff --git a/libvo/sub.c b/libvo/sub.c index d3d52067d9..bffb5646a3 100644 --- a/libvo/sub.c +++ b/libvo/sub.c @@ -71,7 +71,6 @@ char * const sub_osd_names_short[] ={ "", "|>", "||", "[]", "<<" , ">>", "", "", //static int vo_font_loaded=-1; font_desc_t* vo_font=NULL; -font_desc_t* sub_font=NULL; #ifdef HAVE_TV_TELETEXT void* vo_osd_teletext_page=NULL; @@ -643,7 +642,7 @@ subtitle* vo_sub=NULL; // vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)) -inline static void vo_update_text_sub(mp_osd_obj_t* obj,int dxs,int dys){ +inline static void vo_update_text_sub(struct osd_state *osd, mp_osd_obj_t* obj,int dxs,int dys){ unsigned char *t; int c,i,j,l,x,y,font,prevc,counter; int k; @@ -652,10 +651,11 @@ inline static void vo_update_text_sub(mp_osd_obj_t* obj,int dxs,int dys){ int xmin=dxs,xmax=0; int h,lasth; int xtblc, utblc; + struct font_desc *sub_font = osd->sub_font; obj->flags|=OSDFLAG_CHANGED|OSDFLAG_VISIBLE; - if(!vo_sub || !sub_font || !sub_visibility || (sub_font->font[40]<0)){ + if(!vo_sub || !osd->sub_font || !sub_visibility || (sub_font->font[40]<0)){ obj->flags&=~OSDFLAG_VISIBLE; return; } @@ -1099,20 +1099,20 @@ int osd_update(struct osd_state *osd, int dxs, int dys) force_load_font = 0; load_font_ft(dxs, dys, &vo_font, font_name, osd_font_scale_factor); if (sub_font_name) - load_font_ft(dxs, dys, &sub_font, sub_font_name, text_font_scale_factor); + load_font_ft(dxs, dys, &osd->sub_font, sub_font_name, text_font_scale_factor); else - load_font_ft(dxs, dys, &sub_font, font_name, text_font_scale_factor); + load_font_ft(dxs, dys, &osd->sub_font, font_name, text_font_scale_factor); prev_dxs = dxs; prev_dys = dys; defer_counter = 0; } else { if (!vo_font) load_font_ft(dxs, dys, &vo_font, font_name, osd_font_scale_factor); - if (!sub_font) { + if (!osd->sub_font) { if (sub_font_name) - load_font_ft(dxs, dys, &sub_font, sub_font_name, text_font_scale_factor); + load_font_ft(dxs, dys, &osd->sub_font, sub_font_name, text_font_scale_factor); else - load_font_ft(dxs, dys, &sub_font, font_name, text_font_scale_factor); + load_font_ft(dxs, dys, &osd->sub_font, font_name, text_font_scale_factor); } } #endif @@ -1128,7 +1128,7 @@ int osd_update(struct osd_state *osd, int dxs, int dys) break; #endif case OSDTYPE_SUBTITLE: - vo_update_text_sub(obj,dxs,dys); + vo_update_text_sub(osd, obj,dxs,dys); break; #ifdef HAVE_TV_TELETEXT case OSDTYPE_TELETEXT: @@ -1190,7 +1190,7 @@ int osd_update(struct osd_state *osd, int dxs, int dys) struct osd_state *osd_create(void) { - struct osd_state *osd = talloc_ptrtype(NULL, osd); + struct osd_state *osd = talloc_zero(NULL, struct osd_state); *osd = (struct osd_state){ }; if(!draw_alpha_init_flag){ diff --git a/libvo/sub.h b/libvo/sub.h index 328af4d274..c793a6b6aa 100644 --- a/libvo/sub.h +++ b/libvo/sub.h @@ -51,6 +51,7 @@ typedef struct mp_osd_obj_s { struct osd_state { unsigned char osd_text[64]; + struct font_desc *sub_font; }; #include "subreader.h" @@ -670,8 +670,8 @@ void exit_player_with_rc(struct MPContext *mpctx, const char* how, int rc){ #ifdef HAVE_FREETYPE current_module="uninit_font"; - if (sub_font && sub_font != vo_font) free_font_desc(sub_font); - sub_font = NULL; + if (mpctx->osd->sub_font && mpctx->osd->sub_font != vo_font) free_font_desc(mpctx->osd->sub_font); + mpctx->osd->sub_font = NULL; if (vo_font) free_font_desc(vo_font); vo_font = NULL; done_freetype(); @@ -2804,6 +2804,8 @@ if(!codecs_file || !parse_codec_cfg(codecs_file)){ //------ load global data first ------ + mpctx->osd = osd_create(); + // check font #ifdef HAVE_FREETYPE init_freetype(); @@ -2825,16 +2827,14 @@ if(!codecs_file || !parse_codec_cfg(codecs_file)){ vo_font=read_font_desc(MPLAYER_DATADIR "/font/font.desc",font_factor,verbose>1); } if (sub_font_name) - sub_font = read_font_desc(sub_font_name, font_factor, verbose>1); + mpctx->osd->sub_font = read_font_desc(sub_font_name, font_factor, verbose>1); else - sub_font = vo_font; + mpctx->osd->sub_font = vo_font; #endif #ifdef HAVE_FONTCONFIG } #endif - mpctx->osd = osd_create(); - #ifdef USE_ASS ass_library = ass_init(); #endif |