mirror of https://github.com/mpv-player/mpv
55 lines
1.6 KiB
C
55 lines
1.6 KiB
C
#ifndef MPLAYER_SD_H
|
|
#define MPLAYER_SD_H
|
|
|
|
#include "dec_sub.h"
|
|
#include "demux/packet.h"
|
|
|
|
// up to 210 ms overlaps or gaps are removed
|
|
#define SUB_GAP_THRESHOLD 0.210
|
|
// don't change timings if durations are smaller
|
|
#define SUB_GAP_KEEP 0.4
|
|
|
|
struct sd {
|
|
struct mp_log *log;
|
|
struct MPOpts *opts;
|
|
|
|
const struct sd_functions *driver;
|
|
void *priv;
|
|
|
|
struct sh_stream *sh;
|
|
double video_fps;
|
|
|
|
// Shared renderer for ASS - done to avoid reloading embedded fonts.
|
|
struct ass_library *ass_library;
|
|
struct ass_renderer *ass_renderer;
|
|
pthread_mutex_t *ass_lock;
|
|
};
|
|
|
|
struct sd_functions {
|
|
const char *name;
|
|
bool accept_packets_in_advance;
|
|
bool (*supports_format)(const char *format);
|
|
int (*init)(struct sd *sd);
|
|
void (*decode)(struct sd *sd, struct demux_packet *packet);
|
|
void (*reset)(struct sd *sd);
|
|
void (*uninit)(struct sd *sd);
|
|
|
|
bool (*accepts_packet)(struct sd *sd); // implicit default if NULL: true
|
|
int (*control)(struct sd *sd, enum sd_ctrl cmd, void *arg);
|
|
|
|
void (*get_bitmaps)(struct sd *sd, struct mp_osd_res dim, double pts,
|
|
struct sub_bitmaps *res);
|
|
char *(*get_text)(struct sd *sd, double pts);
|
|
};
|
|
|
|
struct lavc_conv;
|
|
bool lavc_conv_supports_format(const char *format);
|
|
struct lavc_conv *lavc_conv_create(struct mp_log *log, const char *codec_name,
|
|
char *extradata, int extradata_len);
|
|
char *lavc_conv_get_extradata(struct lavc_conv *priv);
|
|
char **lavc_conv_decode(struct lavc_conv *priv, struct demux_packet *packet);
|
|
void lavc_conv_reset(struct lavc_conv *priv);
|
|
void lavc_conv_uninit(struct lavc_conv *priv);
|
|
|
|
#endif
|