sub: pack libass bitmaps directly in sd_ass.c and osd_libass.c

Change all producer of libass images to packing the bitmaps into a
single larger bitmap directly when they're output. This is supposed to
help working towards refcounted sub bitmaps.

This will reduce performance for VOs like vo_xv, but not for vo_opengl.
vo_opengl simply will pick up the pre-packed sub bitmaps, and skip
packing them again. vo_xv will copy and pack the sub bitmaps
unnecessarily - but if we want sub bitmap refcounting, they'd have to be
copied anyway.

The packing code cannot be removed yet from vo_opengl, because there are
certain corner cases that still produce unpackad other sub bitmaps.
Actual refcounting will also require more work.
This commit is contained in:
wm4
2016-06-30 21:38:50 +02:00
parent 2d6da37b6b
commit c57304a591
6 changed files with 148 additions and 54 deletions

View File

@@ -57,8 +57,10 @@ struct osd_object {
struct mp_osd_res vo_res;
// Internally used by osd_libass.c
struct sub_bitmaps parts_cache;
bool changed;
struct ass_state ass;
struct mp_ass_packer *ass_packer;
struct ass_image **ass_imgs;
};
struct osd_external {