2011-01-16 19:03:08 +01:00
|
|
|
#ifndef MPLAYER_SD_H
|
|
|
|
#define MPLAYER_SD_H
|
|
|
|
|
VO, sub: refactor
Remove VFCTRL_DRAW_OSD, VFCAP_EOSD_FILTER, VFCAP_EOSD_RGBA, VFCAP_EOSD,
VOCTRL_DRAW_EOSD, VOCTRL_GET_EOSD_RES, VOCTRL_QUERY_EOSD_FORMAT.
Remove draw_osd_with_eosd(), which rendered the OSD by calling
VOCTRL_DRAW_EOSD. Change VOs to call osd_draw() directly, which takes
a callback as argument. (This basically works like the old OSD API,
except multiple OSD bitmap formats are supported and caching is
possible.)
Remove all mentions of "eosd". It's simply "osd" now.
Make OSD size per-OSD-object, as they can be different when using
vf_sub. Include display_par/video_par in resolution change detection.
Fix the issue with margin borders in vo_corevideo.
2012-10-19 19:25:18 +02:00
|
|
|
#include "dec_sub.h"
|
2013-11-18 18:46:44 +01:00
|
|
|
#include "demux/packet.h"
|
2013-06-01 19:44:12 +02:00
|
|
|
|
2015-12-05 23:55:56 +01:00
|
|
|
// up to 200 ms overlaps or gaps are removed
|
|
|
|
#define SUB_GAP_THRESHOLD 0.2
|
|
|
|
// don't change timings if durations are smaller
|
|
|
|
#define SUB_GAP_KEEP 0.4
|
|
|
|
|
2013-06-01 19:44:12 +02:00
|
|
|
struct sd {
|
2013-12-21 19:06:37 +01:00
|
|
|
struct mp_log *log;
|
2013-06-01 19:44:12 +02:00
|
|
|
struct MPOpts *opts;
|
|
|
|
|
|
|
|
const struct sd_functions *driver;
|
|
|
|
void *priv;
|
|
|
|
|
|
|
|
const char *codec;
|
|
|
|
|
|
|
|
// Extra header data passed from demuxer
|
|
|
|
char *extradata;
|
|
|
|
int extradata_len;
|
|
|
|
|
2015-12-05 23:56:28 +01:00
|
|
|
struct sh_stream *sh;
|
|
|
|
|
2013-06-02 23:01:37 +02:00
|
|
|
// Set to !=NULL if the input packets are being converted from another
|
|
|
|
// format.
|
|
|
|
const char *converted_from;
|
|
|
|
|
2013-06-01 19:44:12 +02:00
|
|
|
// Video resolution used for subtitle decoding. Doesn't necessarily match
|
|
|
|
// the resolution of the VO, nor does it have to be the OSD resolution.
|
|
|
|
int sub_video_w, sub_video_h;
|
|
|
|
|
2015-12-05 23:56:28 +01:00
|
|
|
double video_fps;
|
|
|
|
|
2013-06-01 19:44:12 +02:00
|
|
|
// Shared renderer for ASS - done to avoid reloading embedded fonts.
|
|
|
|
struct ass_library *ass_library;
|
|
|
|
struct ass_renderer *ass_renderer;
|
2015-07-06 21:55:37 +02:00
|
|
|
pthread_mutex_t *ass_lock;
|
2013-06-01 19:44:55 +02:00
|
|
|
|
2013-06-02 22:35:00 +02:00
|
|
|
// If false, try to remove multiple subtitles.
|
|
|
|
// (Only for decoders which have accept_packets_in_advance set.)
|
|
|
|
bool no_remove_duplicates;
|
|
|
|
|
2013-06-01 19:44:55 +02:00
|
|
|
// Set by sub converter
|
|
|
|
const char *output_codec;
|
|
|
|
char *output_extradata;
|
|
|
|
int output_extradata_len;
|
|
|
|
|
|
|
|
// Internal buffer for sd_conv_* functions
|
|
|
|
struct sd_conv_buffer *sd_conv_buffer;
|
2013-06-01 19:44:12 +02:00
|
|
|
};
|
2011-01-16 19:03:08 +01:00
|
|
|
|
|
|
|
struct sd_functions {
|
2013-06-03 21:49:39 +02:00
|
|
|
const char *name;
|
2013-04-28 21:12:11 +02:00
|
|
|
bool accept_packets_in_advance;
|
|
|
|
bool (*supports_format)(const char *format);
|
2013-06-01 19:44:12 +02:00
|
|
|
int (*init)(struct sd *sd);
|
|
|
|
void (*decode)(struct sd *sd, struct demux_packet *packet);
|
2013-06-01 19:44:55 +02:00
|
|
|
void (*reset)(struct sd *sd);
|
|
|
|
void (*uninit)(struct sd *sd);
|
|
|
|
|
2015-12-05 23:54:00 +01:00
|
|
|
bool (*accepts_packet)(struct sd *sd); // implicit default if NULL: true
|
2013-06-01 19:54:31 +02:00
|
|
|
void (*fix_events)(struct sd *sd);
|
2013-06-29 01:34:11 +02:00
|
|
|
int (*control)(struct sd *sd, enum sd_ctrl cmd, void *arg);
|
2013-06-01 19:54:31 +02:00
|
|
|
|
2013-06-01 19:44:55 +02:00
|
|
|
// decoder
|
2013-06-01 19:44:12 +02:00
|
|
|
void (*get_bitmaps)(struct sd *sd, struct mp_osd_res dim, double pts,
|
2012-08-25 20:22:39 +02:00
|
|
|
struct sub_bitmaps *res);
|
2013-06-01 19:44:12 +02:00
|
|
|
char *(*get_text)(struct sd *sd, double pts);
|
2013-06-01 19:44:55 +02:00
|
|
|
|
|
|
|
// converter
|
|
|
|
struct demux_packet *(*get_converted)(struct sd *sd);
|
2011-01-16 19:03:08 +01:00
|
|
|
};
|
|
|
|
|
2013-06-01 19:44:55 +02:00
|
|
|
void sd_conv_add_packet(struct sd *sd, void *data, int data_len, double pts,
|
|
|
|
double duration);
|
|
|
|
struct demux_packet *sd_conv_def_get_converted(struct sd *sd);
|
|
|
|
void sd_conv_def_reset(struct sd *sd);
|
|
|
|
void sd_conv_def_uninit(struct sd *sd);
|
|
|
|
|
2013-06-01 19:54:18 +02:00
|
|
|
#define SD_MAX_LINE_LEN 1000
|
|
|
|
|
2011-01-16 19:03:08 +01:00
|
|
|
#endif
|