Skip to content

Commit 3186e25

Browse files
committed
sub/osd_libass: change add_osd_ass_event argument to bstr
This allows to remove one dummy tmp allocation.
1 parent 233e896 commit 3186e25

1 file changed

Lines changed: 14 additions & 14 deletions

File tree

sub/osd_libass.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ static ASS_Style *get_style(struct ass_state *ass, char *name)
168168
}
169169

170170
static 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

Comments
 (0)