summaryrefslogtreecommitdiffstats
path: root/sub/dec_sub.h
diff options
context:
space:
mode:
Diffstat (limited to 'sub/dec_sub.h')
-rw-r--r--sub/dec_sub.h49
1 files changed, 35 insertions, 14 deletions
diff --git a/sub/dec_sub.h b/sub/dec_sub.h
index c71a2348aa..df6aaf9b91 100644
--- a/sub/dec_sub.h
+++ b/sub/dec_sub.h
@@ -1,14 +1,22 @@
#ifndef MPLAYER_DEC_SUB_H
#define MPLAYER_DEC_SUB_H
+#include <stdbool.h>
+#include <stdint.h>
+
+#define MAX_OSD_PARTS 8
+
struct sh_sub;
struct osd_state;
struct ass_track;
-enum sub_bitmap_type {
+enum sub_bitmap_format {
SUBBITMAP_EMPTY,
- SUBBITMAP_LIBASS,
- SUBBITMAP_RGBA,
+ SUBBITMAP_LIBASS, // A8, with a per-surface blend color (libass.color)
+ SUBBITMAP_RGBA, // B8G8R8A8
+ SUBBITMAP_OLD, // I8A8 (monochrome), premultiplied alpha
+
+ SUBBITMAP_COUNT
};
typedef struct mp_eosd_res {
@@ -16,21 +24,34 @@ typedef struct mp_eosd_res {
int mt, mb, ml, mr; // borders (top, bottom, left, right)
} mp_eosd_res_t;
+struct sub_bitmap {
+ void *bitmap;
+ int stride;
+ int w, h;
+ int x, y;
+ // Note: not clipped, going outside the screen area is allowed
+ int dw, dh;
+
+ union {
+ struct {
+ uint32_t color;
+ } libass;
+ };
+};
+
typedef struct sub_bitmaps {
- enum sub_bitmap_type type;
+ int render_index; // for VO cache state (limited by MAX_OSD_PARTS)
- struct ass_image *imgs;
+ enum sub_bitmap_format format;
+ bool scaled; // if false, dw==w && dh==h
- struct sub_bitmap {
- int w, h;
- int x, y;
- // Note: not clipped, going outside the screen area is allowed
- int dw, dh;
- void *bitmap;
- } *parts;
- int part_count;
+ struct sub_bitmap *parts;
+ int num_parts;
+
+ // Provided for VOs with old code
+ struct ass_image *imgs;
- bool scaled;
+ // Incremented on each change
int bitmap_id, bitmap_pos_id;
} mp_eosd_images_t;