mirror of
https://github.com/mpv-player/mpv
synced 2024-12-27 01:22:30 +00:00
671df54e4d
This is mainly a refactor. I'm hoping it will make some things easier in the future due to cleanly separating codec metadata and stream metadata. Also, declare that the "codec" field can not be NULL anymore. demux.c will set it to "" if it's NULL when added. This gets rid of a corner case everything had to handle, but which rarely happened.
50 lines
1.4 KiB
C
50 lines
1.4 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 mpv_global *global;
|
|
struct mp_log *log;
|
|
struct MPOpts *opts;
|
|
|
|
const struct sd_functions *driver;
|
|
void *priv;
|
|
|
|
struct demuxer *demuxer;
|
|
struct mp_codec_params *codec;
|
|
};
|
|
|
|
struct sd_functions {
|
|
const char *name;
|
|
bool accept_packets_in_advance;
|
|
int (*init)(struct sd *sd);
|
|
void (*decode)(struct sd *sd, struct demux_packet *packet);
|
|
void (*reset)(struct sd *sd);
|
|
void (*select)(struct sd *sd, bool selected);
|
|
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;
|
|
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
|