mirror of
https://github.com/mpv-player/mpv
synced 2024-12-22 06:42:03 +00:00
64 lines
2.9 KiB
C
64 lines
2.9 KiB
C
#ifndef MPLAYER_DRAW_BMP_H
|
|
#define MPLAYER_DRAW_BMP_H
|
|
|
|
#include "osd.h"
|
|
|
|
struct mp_rect;
|
|
struct mp_image;
|
|
struct mpv_global;
|
|
struct mp_draw_sub_cache;
|
|
|
|
struct mp_draw_sub_cache *mp_draw_sub_alloc(void *ta_parent, struct mpv_global *g);
|
|
|
|
// Only for use in tests.
|
|
struct mp_draw_sub_cache *mp_draw_sub_alloc_test(struct mp_image *dst);
|
|
|
|
// Render the sub-bitmaps in sbs_list to dst. sbs_list must have been rendered
|
|
// for an OSD resolution equivalent to dst's size (UB if not).
|
|
// Warning: if dst is a format with alpha, and dst is not set to PL_ALPHA_PREMULTIPLIED
|
|
// (not done by default), this will be extremely slow.
|
|
// Warning: the caller is responsible for ensuring that dst is writable.
|
|
// cache: allocated instance; caches non-changing OSD parts etc.
|
|
// dst: image to draw to
|
|
// sbs_list: source sub-bitmaps
|
|
// returns: success
|
|
bool mp_draw_sub_bitmaps(struct mp_draw_sub_cache *cache, struct mp_image *dst,
|
|
struct sub_bitmap_list *sbs_list);
|
|
|
|
char *mp_draw_sub_get_dbg_info(struct mp_draw_sub_cache *c);
|
|
|
|
// Return a RGBA overlay with subtitles. The returned image uses IMGFMT_BGRA and
|
|
// premultiplied alpha, and the size specified by sbs_list.w/h.
|
|
// This can return a list of active (act_) and modified (mod_) rectangles.
|
|
// Active rectangles are regions that contain visible OSD pixels. Modified
|
|
// rectangles are regions that were changed since the last call. This function
|
|
// always makes the act region a subset of the mod region. Rectangles within a
|
|
// list never overlap with rectangles within the same list.
|
|
// If num_mod_rcs==0 is returned, this function guarantees that the act region
|
|
// did not change since the last call.
|
|
// If the user-provided lists are too small (max_*_rcs too small), multiple
|
|
// rectangles are merged until they fit in the list.
|
|
// You can pass max_act_rcs=0, which implies you render the whole overlay.
|
|
// cache: allocated instance; keeps track of changed regions
|
|
// sbs_list: source sub-bitmaps
|
|
// act_rcs: caller allocated list of non-transparent rectangles
|
|
// max_act_rcs: number of allocated items in act_rcs
|
|
// num_act_rcs: set to the number of valid items in act_rcs
|
|
// mod_rcs, max_mod_rcs, num_mod_rcs: modified rectangles
|
|
// returns: internal OSD overlay owned by cache, NULL on error
|
|
// read only, valid until the next call on cache
|
|
struct mp_image *mp_draw_sub_overlay(struct mp_draw_sub_cache *cache,
|
|
struct sub_bitmap_list *sbs_list,
|
|
struct mp_rect *act_rcs,
|
|
int max_act_rcs,
|
|
int *num_act_rcs,
|
|
struct mp_rect *mod_rcs,
|
|
int max_mod_rcs,
|
|
int *num_mod_rcs);
|
|
|
|
extern const bool mp_draw_sub_formats[SUBBITMAP_COUNT];
|
|
|
|
#endif /* MPLAYER_DRAW_BMP_H */
|
|
|
|
// vim: ts=4 sw=4 et tw=80
|