@@ -168,7 +168,7 @@ static ASS_Style *get_style(struct ass_state *ass, char *name)
168168}
169169
170170static ASS_Event * add_osd_ass_event (ASS_Track * track , const char * style ,
171- const char * text )
171+ bstr text )
172172{
173173 int n = ass_alloc_event (track );
174174 ASS_Event * event = track -> events + n ;
@@ -177,8 +177,11 @@ static ASS_Event *add_osd_ass_event(ASS_Track *track, const char *style,
177177 event -> Style = find_style (track , style , 0 );
178178 event -> ReadOrder = n ;
179179 mp_assert (event -> Text == NULL );
180- if (text )
181- event -> Text = strdup (text );
180+ if (text .start ) {
181+ event -> Text = malloc (text .len + 1 );
182+ memcpy (event -> Text , text .start , text .len );
183+ event -> Text [text .len ] = '\0' ;
184+ }
182185 return event ;
183186}
184187
@@ -253,7 +256,7 @@ static ASS_Event *add_osd_ass_event_escaped(ASS_Track *track, const char *style,
253256{
254257 bstr buf = {0 };
255258 osd_mangle_ass (& buf , text , false);
256- ASS_Event * e = add_osd_ass_event (track , style , buf . start );
259+ ASS_Event * e = add_osd_ass_event (track , style , buf );
257260 talloc_free (buf .start );
258261 return e ;
259262}
@@ -435,7 +438,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
435438 bstr_xappend (NULL , & buf , bstr0 ("{\\r}" ));
436439 }
437440
438- add_osd_ass_event (track , "progbar" , buf . start );
441+ add_osd_ass_event (track , "progbar" , buf );
439442 talloc_free (buf .start );
440443
441444 struct ass_draw * d = & (struct ass_draw ) { .scale = 4 };
@@ -451,7 +454,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
451454 ass_draw_start (d );
452455 ass_draw_rect_cw (d , - border , - border , width + border , height + border );
453456 ass_draw_stop (d );
454- add_osd_ass_event (track , "progbar" , d -> text );
457+ add_osd_ass_event (track , "progbar" , bstr0 ( d -> text ) );
455458 ass_draw_reset (d );
456459 }
457460
@@ -461,7 +464,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
461464 float pos = obj -> progbar_state .value * width - border / 2 ;
462465 ass_draw_rect_cw (d , 0 , 0 , pos , height );
463466 ass_draw_stop (d );
464- add_osd_ass_event (track , "progbar" , d -> text );
467+ add_osd_ass_event (track , "progbar" , bstr0 ( d -> text ) );
465468 ass_draw_reset (d );
466469
467470 // position marker
@@ -471,7 +474,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
471474 ass_draw_move_to (d , pos + border / 2 , 0 );
472475 ass_draw_line_to (d , pos + border / 2 , height );
473476 ass_draw_stop (d );
474- add_osd_ass_event (track , "progbar" , d -> text );
477+ add_osd_ass_event (track , "progbar" , bstr0 ( d -> text ) );
475478 ass_draw_reset (d );
476479
477480 d -> text = talloc_asprintf_append (d -> text , "{\\pos(%f,%f)}" , px , py );
@@ -508,7 +511,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
508511 }
509512
510513 ass_draw_stop (d );
511- add_osd_ass_event (track , "progbar" , d -> text );
514+ add_osd_ass_event (track , "progbar" , bstr0 ( d -> text ) );
512515 ass_draw_reset (d );
513516}
514517
@@ -540,11 +543,8 @@ static void update_external(struct osd_state *osd, struct osd_object *obj,
540543 while (t .len ) {
541544 bstr line ;
542545 bstr_split_tok (t , "\n" , & line , & t );
543- if (line .len ) {
544- char * tmp = bstrdup0 (NULL , line );
545- add_osd_ass_event (ext -> ass .track , "OSD" , tmp );
546- talloc_free (tmp );
547- }
546+ if (line .len )
547+ add_osd_ass_event (ext -> ass .track , "OSD" , line );
548548 }
549549}
550550
0 commit comments