mirror of
https://github.com/mpv-player/mpv
synced 2024-11-14 22:48:35 +01:00
4010dd0b1a
The code in eosd_packer.c/.h is taken from vo_vdpau.c and has been made independent from vdpau API specifics. This allows other VOs, which need to pack the small EOSD images into a large surface for efficiency, to use this code.
72 lines
2.4 KiB
C
72 lines
2.4 KiB
C
/*
|
|
* This file is part of mplayer2.
|
|
*
|
|
* mplayer2 is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* mplayer2 is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with mplayer2; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
|
|
#ifndef MPLAYER_EOSD_PACKER_H
|
|
#define MPLAYER_EOSD_PACKER_H
|
|
|
|
#include <inttypes.h>
|
|
#include <stdbool.h>
|
|
|
|
#include "sub/ass_mp.h"
|
|
|
|
// Pool of surfaces
|
|
struct eosd_surface {
|
|
//void *native_surface;
|
|
int w;
|
|
int h;
|
|
};
|
|
|
|
struct eosd_rect {
|
|
int x0, y0, x1, y1;
|
|
};
|
|
|
|
// List of surfaces to be rendered
|
|
struct eosd_target {
|
|
struct eosd_rect source; // position in EOSD surface
|
|
struct eosd_rect dest; // position on screen
|
|
uint32_t color; // libass-style color of the image
|
|
// NOTE: This must not be accessed after you return from your VO's
|
|
// VOCTRL_DRAW_EOSD call - libass will free or reuse the associated
|
|
// memory. Feel free to set this to NULL to make erroneous accesses to
|
|
// this member fail early.
|
|
ASS_Image *ass_img;
|
|
};
|
|
|
|
struct eosd_packer {
|
|
struct eosd_surface surface;
|
|
struct eosd_target *targets;
|
|
int targets_count; // number of valid elements in targets
|
|
int targets_size; // number of allocated elements in targets
|
|
|
|
uint32_t max_surface_width;
|
|
uint32_t max_surface_height;
|
|
|
|
int *scratch;
|
|
};
|
|
|
|
struct eosd_packer *eosd_packer_create(void *talloc_ctx);
|
|
void eosd_packer_reinit(struct eosd_packer *state, uint32_t max_width,
|
|
uint32_t max_height);
|
|
void eosd_packer_generate(struct eosd_packer *state, mp_eosd_images_t *imgs,
|
|
bool *out_need_reposition, bool *out_need_upload,
|
|
bool *out_need_reallocate);
|
|
bool eosd_packer_calculate_source_bb(struct eosd_packer *state,
|
|
struct eosd_rect *out_bb);
|
|
|
|
#endif /* MPLAYER_EOSD_PACKER_H */
|