mirror of
https://github.com/mpv-player/mpv
synced 2024-12-27 09:32:40 +00:00
3ad918bbc6
Instead, sd_lavc.c and spudec.c (the two image sub decoders) always output indexed/paletted images. For this purpose, add SUBBITMAP_INDEXED, and convert the subs to RGBA in img_convert.c instead. If a VO is used that supports the old OSD format only, the indexed bitmaps are converted to the old OSD format by abusing spudec.c in a similar way sd_lavc.c used to do. The main reason why spudec.c is used is because the images must not only be converted to the old format, but also properly scaled, cropped, and aligned (the asm code in libvo/osd.c requires this alignment). Remove support for the old format (packed variant) from the OpenGL VOs. (The packed formats were how the actual OSD format was handled in some GPU-driven VOs for a while.) Remove all conversions from old to new formats. Now all subtitle decoders and OSD renderers produce the new formats only. Add an evil hack to convert the new format (scaled+indexed bitmaps) to the old format. It creates a new spudec instance to convert images to grayscale and to scale them. This is temporary for VOs which don't support new OSD formats yet (vo_xv, vo_x11, vo_lavc).
43 lines
1.1 KiB
C
43 lines
1.1 KiB
C
#ifndef MPLAYER_DEC_SUB_H
|
|
#define MPLAYER_DEC_SUB_H
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#include "sub.h"
|
|
|
|
struct sh_sub;
|
|
struct ass_track;
|
|
struct MPOpts *opts;
|
|
|
|
struct sub_render_params {
|
|
double pts;
|
|
struct mp_eosd_res dim;
|
|
double normal_scale;
|
|
double vsfilter_scale;
|
|
};
|
|
|
|
static inline bool is_text_sub(int type)
|
|
{
|
|
return type == 't' || type == 'm' || type == 'a';
|
|
}
|
|
|
|
void sub_decode(struct sh_sub *sh, struct osd_state *osd, void *data,
|
|
int data_len, double pts, double duration);
|
|
void sub_get_bitmaps(struct osd_state *osd, struct sub_render_params *params,
|
|
struct sub_bitmaps *res);
|
|
void sub_init(struct sh_sub *sh, struct osd_state *osd);
|
|
void sub_reset(struct sh_sub *sh, struct osd_state *osd);
|
|
void sub_switchoff(struct sh_sub *sh, struct osd_state *osd);
|
|
void sub_uninit(struct sh_sub *sh);
|
|
|
|
struct sh_sub *sd_ass_create_from_track(struct ass_track *track,
|
|
bool vsfilter_aspect,
|
|
struct MPOpts *opts);
|
|
|
|
#ifdef CONFIG_ASS
|
|
struct ass_track *sub_get_ass_track(struct osd_state *osd);
|
|
#endif
|
|
|
|
#endif
|