mirror of
https://github.com/mpv-player/mpv.git
synced 2025-12-22 10:57:08 +00:00
sub/osd_libass: change add_osd_ass_event argument to bstr
This allows to remove one dummy tmp allocation.
This commit is contained in:
@@ -168,7 +168,7 @@ static ASS_Style *get_style(struct ass_state *ass, char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static ASS_Event *add_osd_ass_event(ASS_Track *track, const char *style,
|
static ASS_Event *add_osd_ass_event(ASS_Track *track, const char *style,
|
||||||
const char *text)
|
bstr text)
|
||||||
{
|
{
|
||||||
int n = ass_alloc_event(track);
|
int n = ass_alloc_event(track);
|
||||||
ASS_Event *event = track->events + n;
|
ASS_Event *event = track->events + n;
|
||||||
@@ -177,8 +177,12 @@ static ASS_Event *add_osd_ass_event(ASS_Track *track, const char *style,
|
|||||||
event->Style = find_style(track, style, 0);
|
event->Style = find_style(track, style, 0);
|
||||||
event->ReadOrder = n;
|
event->ReadOrder = n;
|
||||||
mp_assert(event->Text == NULL);
|
mp_assert(event->Text == NULL);
|
||||||
if (text)
|
if (text.start) {
|
||||||
event->Text = strdup(text);
|
event->Text = malloc(text.len + 1);
|
||||||
|
MP_HANDLE_OOM(event->Text);
|
||||||
|
memcpy(event->Text, text.start, text.len);
|
||||||
|
event->Text[text.len] = '\0';
|
||||||
|
}
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,7 +257,7 @@ static ASS_Event *add_osd_ass_event_escaped(ASS_Track *track, const char *style,
|
|||||||
{
|
{
|
||||||
bstr buf = {0};
|
bstr buf = {0};
|
||||||
osd_mangle_ass(&buf, text, false);
|
osd_mangle_ass(&buf, text, false);
|
||||||
ASS_Event *e = add_osd_ass_event(track, style, buf.start);
|
ASS_Event *e = add_osd_ass_event(track, style, buf);
|
||||||
talloc_free(buf.start);
|
talloc_free(buf.start);
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@@ -435,7 +439,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
|
|||||||
bstr_xappend(NULL, &buf, bstr0("{\\r}"));
|
bstr_xappend(NULL, &buf, bstr0("{\\r}"));
|
||||||
}
|
}
|
||||||
|
|
||||||
add_osd_ass_event(track, "progbar", buf.start);
|
add_osd_ass_event(track, "progbar", buf);
|
||||||
talloc_free(buf.start);
|
talloc_free(buf.start);
|
||||||
|
|
||||||
struct ass_draw *d = &(struct ass_draw) { .scale = 4 };
|
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)
|
|||||||
ass_draw_start(d);
|
ass_draw_start(d);
|
||||||
ass_draw_rect_cw(d, -border, -border, width + border, height + border);
|
ass_draw_rect_cw(d, -border, -border, width + border, height + border);
|
||||||
ass_draw_stop(d);
|
ass_draw_stop(d);
|
||||||
add_osd_ass_event(track, "progbar", d->text);
|
add_osd_ass_event(track, "progbar", bstr0(d->text));
|
||||||
ass_draw_reset(d);
|
ass_draw_reset(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,7 +465,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
|
|||||||
float pos = obj->progbar_state.value * width - border / 2;
|
float pos = obj->progbar_state.value * width - border / 2;
|
||||||
ass_draw_rect_cw(d, 0, 0, pos, height);
|
ass_draw_rect_cw(d, 0, 0, pos, height);
|
||||||
ass_draw_stop(d);
|
ass_draw_stop(d);
|
||||||
add_osd_ass_event(track, "progbar", d->text);
|
add_osd_ass_event(track, "progbar", bstr0(d->text));
|
||||||
ass_draw_reset(d);
|
ass_draw_reset(d);
|
||||||
|
|
||||||
// position marker
|
// position marker
|
||||||
@@ -471,7 +475,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
|
|||||||
ass_draw_move_to(d, pos + border / 2, 0);
|
ass_draw_move_to(d, pos + border / 2, 0);
|
||||||
ass_draw_line_to(d, pos + border / 2, height);
|
ass_draw_line_to(d, pos + border / 2, height);
|
||||||
ass_draw_stop(d);
|
ass_draw_stop(d);
|
||||||
add_osd_ass_event(track, "progbar", d->text);
|
add_osd_ass_event(track, "progbar", bstr0(d->text));
|
||||||
ass_draw_reset(d);
|
ass_draw_reset(d);
|
||||||
|
|
||||||
d->text = talloc_asprintf_append(d->text, "{\\pos(%f,%f)}", px, py);
|
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ass_draw_stop(d);
|
ass_draw_stop(d);
|
||||||
add_osd_ass_event(track, "progbar", d->text);
|
add_osd_ass_event(track, "progbar", bstr0(d->text));
|
||||||
ass_draw_reset(d);
|
ass_draw_reset(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -540,11 +544,8 @@ static void update_external(struct osd_state *osd, struct osd_object *obj,
|
|||||||
while (t.len) {
|
while (t.len) {
|
||||||
bstr line;
|
bstr line;
|
||||||
bstr_split_tok(t, "\n", &line, &t);
|
bstr_split_tok(t, "\n", &line, &t);
|
||||||
if (line.len) {
|
if (line.len)
|
||||||
char *tmp = bstrdup0(NULL, line);
|
add_osd_ass_event(ext->ass.track, "OSD", line);
|
||||||
add_osd_ass_event(ext->ass.track, "OSD", tmp);
|
|
||||||
talloc_free(tmp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user