mirror of
https://github.com/mpv-player/mpv
synced 2024-12-29 10:32:15 +00:00
572802e866
Lua scripts can call osd_set_external() early (before the VO window is created and obj->vo_res is filled), in which case the PlayResX field would be set to nonsense, and libass would print a pointless warning. There's an easy and a hard fix: either just go on and pass dummy values to libass (basically like before, just clamp them to avoid the values which make libass print the warning). Or attempt to update the PlayRes field to correct values on rendering (since at rendering time, you always know the screen size and the correct values). Do the latter. Since various things use PlayRes for scaling things, this might still not be fully ideal. This is a general problem with the async scripting interface.
90 lines
1.7 KiB
C
90 lines
1.7 KiB
C
#ifndef MP_OSD_STATE_H_
|
|
#define MP_OSD_STATE_H_
|
|
|
|
#include <pthread.h>
|
|
|
|
#include "osd.h"
|
|
|
|
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;
|
|
struct ass_renderer *render;
|
|
struct ass_library *library;
|
|
int res_x, res_y;
|
|
};
|
|
|
|
struct osd_object {
|
|
int type; // OSDTYPE_*
|
|
bool is_sub;
|
|
|
|
// OSDTYPE_OSD
|
|
bool osd_changed;
|
|
char *text;
|
|
struct osd_progbar_state progbar_state;
|
|
|
|
// OSDTYPE_SUB/OSDTYPE_SUB2
|
|
struct dec_sub *sub;
|
|
|
|
// OSDTYPE_EXTERNAL
|
|
struct osd_external *externals;
|
|
int num_externals;
|
|
|
|
// OSDTYPE_EXTERNAL2
|
|
struct sub_bitmaps *external2;
|
|
|
|
// VO cache state
|
|
int vo_change_id;
|
|
struct mp_osd_res vo_res;
|
|
|
|
// Internally used by osd_libass.c
|
|
bool changed;
|
|
struct ass_state ass;
|
|
struct mp_ass_packer *ass_packer;
|
|
struct ass_image **ass_imgs;
|
|
};
|
|
|
|
struct osd_external {
|
|
void *id;
|
|
char *text;
|
|
int res_x, res_y;
|
|
struct ass_state ass;
|
|
};
|
|
|
|
struct osd_state {
|
|
pthread_mutex_t lock;
|
|
|
|
struct osd_object *objs[MAX_OSD_PARTS];
|
|
|
|
bool render_subs_in_filter;
|
|
double force_video_pts;
|
|
|
|
bool want_redraw;
|
|
bool want_redraw_notification;
|
|
|
|
struct MPOpts *opts;
|
|
struct mpv_global *global;
|
|
struct mp_log *log;
|
|
|
|
struct mp_draw_sub_cache *draw_cache;
|
|
};
|
|
|
|
// defined in osd_libass.c and osd_dummy.c
|
|
void osd_object_get_bitmaps(struct osd_state *osd, struct osd_object *obj,
|
|
int format, struct sub_bitmaps *out_imgs);
|
|
void osd_init_backend(struct osd_state *osd);
|
|
void osd_destroy_backend(struct osd_state *osd);
|
|
|
|
#endif
|