summaryrefslogtreecommitdiffstats
path: root/sub/sd_ass.c
diff options
context:
space:
mode:
Diffstat (limited to 'sub/sd_ass.c')
-rw-r--r--sub/sd_ass.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index 9295cab07d..aa190ee4ac 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -36,6 +36,7 @@ struct sd_ass_priv {
struct ass_track *ass_track;
bool vsfilter_aspect;
bool incomplete_event;
+ struct sub_bitmap *parts;
};
static void free_last_event(ASS_Track *track)
@@ -147,7 +148,32 @@ static void get_bitmaps(struct sh_sub *sh, struct osd_state *osd,
res->bitmap_id = ++res->bitmap_pos_id;
else if (changed)
res->bitmap_pos_id++;
- res->type = SUBBITMAP_LIBASS;
+ res->format = SUBBITMAP_LIBASS;
+
+ int num_parts = 0;
+ int num_parts_alloc = MP_TALLOC_ELEMS(ctx->parts);
+ struct ass_image *img = res->imgs;
+ while (img) {
+ if (img->w == 0 || img->h == 0)
+ continue;
+ if (num_parts >= num_parts_alloc) {
+ num_parts_alloc = FFMAX(num_parts_alloc * 2, 32);
+ ctx->parts = talloc_realloc(ctx, ctx->parts, struct sub_bitmap,
+ num_parts_alloc);
+ }
+ struct sub_bitmap *p = &ctx->parts[num_parts];
+ p->bitmap = img->bitmap;
+ p->stride = img->stride;
+ p->libass.color = img->color;
+ p->dw = p->w = img->w;
+ p->dh = p->h = img->h;
+ p->x = img->dst_x;
+ p->y = img->dst_y;
+ img = img->next;
+ num_parts++;
+ }
+ res->parts = ctx->parts;
+ res->num_parts = num_parts;
}
static void reset(struct sh_sub *sh, struct osd_state *osd)