@@ -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,12 @@ 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+ MP_HANDLE_OOM (event -> Text );
183+ memcpy (event -> Text , text .start , text .len );
184+ event -> Text [text .len ] = '\0' ;
185+ }
182186 return event ;
183187}
184188
@@ -253,7 +257,7 @@ static ASS_Event *add_osd_ass_event_escaped(ASS_Track *track, const char *style,
253257{
254258 bstr buf = {0 };
255259 osd_mangle_ass (& buf , text , false);
256- ASS_Event * e = add_osd_ass_event (track , style , buf . start );
260+ ASS_Event * e = add_osd_ass_event (track , style , buf );
257261 talloc_free (buf .start );
258262 return e ;
259263}
@@ -435,7 +439,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
435439 bstr_xappend (NULL , & buf , bstr0 ("{\\r}" ));
436440 }
437441
438- add_osd_ass_event (track , "progbar" , buf . start );
442+ add_osd_ass_event (track , "progbar" , buf );
439443 talloc_free (buf .start );
440444
441445 struct ass_draw * d = & (struct ass_draw ) { .scale = 4 };
@@ -451,7 +455,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
451455 ass_draw_start (d );
452456 ass_draw_rect_cw (d , - border , - border , width + border , height + border );
453457 ass_draw_stop (d );
454- add_osd_ass_event (track , "progbar" , d -> text );
458+ add_osd_ass_event (track , "progbar" , bstr0 ( d -> text ) );
455459 ass_draw_reset (d );
456460 }
457461
@@ -461,7 +465,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
461465 float pos = obj -> progbar_state .value * width - border / 2 ;
462466 ass_draw_rect_cw (d , 0 , 0 , pos , height );
463467 ass_draw_stop (d );
464- add_osd_ass_event (track , "progbar" , d -> text );
468+ add_osd_ass_event (track , "progbar" , bstr0 ( d -> text ) );
465469 ass_draw_reset (d );
466470
467471 // position marker
@@ -471,7 +475,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
471475 ass_draw_move_to (d , pos + border / 2 , 0 );
472476 ass_draw_line_to (d , pos + border / 2 , height );
473477 ass_draw_stop (d );
474- add_osd_ass_event (track , "progbar" , d -> text );
478+ add_osd_ass_event (track , "progbar" , bstr0 ( d -> text ) );
475479 ass_draw_reset (d );
476480
477481 d -> text = talloc_asprintf_append (d -> text , "{\\pos(%f,%f)}" , px , py );
@@ -508,7 +512,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
508512 }
509513
510514 ass_draw_stop (d );
511- add_osd_ass_event (track , "progbar" , d -> text );
515+ add_osd_ass_event (track , "progbar" , bstr0 ( d -> text ) );
512516 ass_draw_reset (d );
513517}
514518
@@ -540,11 +544,8 @@ static void update_external(struct osd_state *osd, struct osd_object *obj,
540544 while (t .len ) {
541545 bstr line ;
542546 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- }
547+ if (line .len )
548+ add_osd_ass_event (ext -> ass .track , "OSD" , line );
548549 }
549550}
550551
0 commit comments