summaryrefslogtreecommitdiffstats
path: root/sub
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-03-08 21:54:17 +0100
committerwm4 <wm4@nowhere>2016-03-08 22:01:57 +0100
commit876a3bafc5a0cb491ee1f1d5e928cd6e6ef530a8 (patch)
treeaf35260c02da290067e7a5b6bd1d5860cbb1ea7d /sub
parent75a36662cb6bb0c8a2aeb3a4034d3f8dc745bbdd (diff)
downloadmpv-876a3bafc5a0cb491ee1f1d5e928cd6e6ef530a8.tar.bz2
mpv-876a3bafc5a0cb491ee1f1d5e928cd6e6ef530a8.tar.xz
osd: cleanup: make OSDTYPE_ constants private to OSD code
No need to have them everywhere. The only exception/annoyance is MAX_OSD_PARTS, which is now basically duplicated (and at runtime initialization is checked with an assert()).
Diffstat (limited to 'sub')
-rw-r--r--sub/osd.c18
-rw-r--r--sub/osd.h19
-rw-r--r--sub/osd_state.h12
3 files changed, 28 insertions, 21 deletions
diff --git a/sub/osd.c b/sub/osd.c
index c05fc5a0e3..e37b6cf106 100644
--- a/sub/osd.c
+++ b/sub/osd.c
@@ -109,6 +109,8 @@ static bool osd_res_equals(struct mp_osd_res a, struct mp_osd_res b)
struct osd_state *osd_create(struct mpv_global *global)
{
+ assert(MAX_OSD_PARTS >= OSDTYPE_COUNT);
+
struct osd_state *osd = talloc_zero(NULL, struct osd_state);
*osd = (struct osd_state) {
.opts = global->opts,
@@ -151,24 +153,25 @@ void osd_changed_unlocked(struct osd_state *osd, int obj)
osd->want_redraw = true;
}
-void osd_set_text(struct osd_state *osd, int obj, const char *text)
+void osd_set_text(struct osd_state *osd, const char *text)
{
pthread_mutex_lock(&osd->lock);
- struct osd_object *osd_obj = osd->objs[obj];
+ struct osd_object *osd_obj = osd->objs[OSDTYPE_OSD];
if (!text)
text = "";
if (strcmp(osd_obj->text, text) != 0) {
talloc_free(osd_obj->text);
osd_obj->text = talloc_strdup(osd_obj, text);
- osd_changed_unlocked(osd, obj);
+ osd_changed_unlocked(osd, osd_obj->type);
}
pthread_mutex_unlock(&osd->lock);
}
-void osd_set_sub(struct osd_state *osd, int obj, struct dec_sub *dec_sub)
+void osd_set_sub(struct osd_state *osd, int index, struct dec_sub *dec_sub)
{
pthread_mutex_lock(&osd->lock);
- osd->objs[obj]->sub = dec_sub;
+ if (index >= 0 && index < 2)
+ osd->objs[OSDTYPE_SUB + index]->sub = dec_sub;
pthread_mutex_unlock(&osd->lock);
}
@@ -405,10 +408,11 @@ bool osd_query_and_reset_want_redraw(struct osd_state *osd)
return r;
}
-struct mp_osd_res osd_get_vo_res(struct osd_state *osd, int obj)
+struct mp_osd_res osd_get_vo_res(struct osd_state *osd)
{
pthread_mutex_lock(&osd->lock);
- struct mp_osd_res res = osd->objs[obj]->vo_res;
+ // Any OSDTYPE is fine; but it mustn't be a subtitle one (can have lower res.)
+ struct mp_osd_res res = osd->objs[OSDTYPE_OSD]->vo_res;
pthread_mutex_unlock(&osd->lock);
return res;
}
diff --git a/sub/osd.h b/sub/osd.h
index 654330f152..494b534d5e 100644
--- a/sub/osd.h
+++ b/sub/osd.h
@@ -78,17 +78,8 @@ struct mp_osd_res {
double display_par;
};
-enum mp_osdtype {
- OSDTYPE_SUB,
- OSDTYPE_SUB2, // IDs must be numerically successive
-
- OSDTYPE_OSD,
-
- OSDTYPE_EXTERNAL,
- OSDTYPE_EXTERNAL2,
-
- MAX_OSD_PARTS
-};
+// 0 <= sub_bitmaps.render_index < MAX_OSD_PARTS
+#define MAX_OSD_PARTS 5
// Start of OSD symbols in osd_font.pfb
#define OSD_CODEPOINTS 0xE000
@@ -149,8 +140,8 @@ void osd_free(struct osd_state *osd);
bool osd_query_and_reset_want_redraw(struct osd_state *osd);
-void osd_set_text(struct osd_state *osd, int obj, const char *text);
-void osd_set_sub(struct osd_state *osd, int obj, struct dec_sub *dec_sub);
+void osd_set_text(struct osd_state *osd, const char *text);
+void osd_set_sub(struct osd_state *osd, int index, struct dec_sub *dec_sub);
bool osd_get_render_subs_in_filter(struct osd_state *osd);
void osd_set_render_subs_in_filter(struct osd_state *osd, bool s);
@@ -188,7 +179,7 @@ void osd_draw_on_image_p(struct osd_state *osd, struct mp_osd_res res,
struct mp_image_params;
struct mp_osd_res osd_res_from_image_params(const struct mp_image_params *p);
-struct mp_osd_res osd_get_vo_res(struct osd_state *osd, int obj);
+struct mp_osd_res osd_get_vo_res(struct osd_state *osd);
void osd_rescale_bitmaps(struct sub_bitmaps *imgs, int frame_w, int frame_h,
struct mp_osd_res res, double compensate_par);
diff --git a/sub/osd_state.h b/sub/osd_state.h
index c52c3354cd..0fff668d2d 100644
--- a/sub/osd_state.h
+++ b/sub/osd_state.h
@@ -7,6 +7,18 @@
#define OSD_CONV_CACHE_MAX 4
+enum mp_osdtype {
+ OSDTYPE_SUB,
+ OSDTYPE_SUB2, // IDs must be numerically successive
+
+ OSDTYPE_OSD,
+
+ OSDTYPE_EXTERNAL,
+ OSDTYPE_EXTERNAL2,
+
+ OSDTYPE_COUNT
+};
+
struct ass_state {
struct mp_log *log;
struct ass_track *track;