Skip to content

Commit 99d6d4c

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 99d6d4c

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

sub/osd_libass.c

Lines changed: 15 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,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

Comments
 (0)