summaryrefslogtreecommitdiffstats
path: root/sub
diff options
context:
space:
mode:
Diffstat (limited to 'sub')
-rw-r--r--sub/dec_sub.c14
-rw-r--r--sub/dec_sub.h10
-rw-r--r--sub/sd.h2
-rw-r--r--sub/sd_ass.c6
4 files changed, 19 insertions, 13 deletions
diff --git a/sub/dec_sub.c b/sub/dec_sub.c
index 75f5509c62..fbce829f5f 100644
--- a/sub/dec_sub.c
+++ b/sub/dec_sub.c
@@ -49,7 +49,7 @@ struct dec_sub {
struct mpv_global *global;
struct MPOpts *opts;
- struct demuxer *demuxer;
+ struct attachment_list *attachments;
struct sh_stream *sh;
double last_pkt_pts;
@@ -94,7 +94,7 @@ static struct sd *init_decoder(struct dec_sub *sub)
.log = mp_log_new(sd, sub->log, driver->name),
.opts = sub->opts,
.driver = driver,
- .demuxer = sub->demuxer,
+ .attachments = sub->attachments,
.codec = sub->codec,
};
@@ -112,10 +112,12 @@ static struct sd *init_decoder(struct dec_sub *sub)
// Thread-safety of the returned object: all functions are thread-safe,
// except sub_get_bitmaps() and sub_get_text(). Decoder backends (sd_*)
// do not need to acquire locks.
-struct dec_sub *sub_create(struct mpv_global *global, struct demuxer *demuxer,
- struct sh_stream *sh)
+// Ownership of attachments goes to the caller, and is released with
+// talloc_free() (even on failure).
+struct dec_sub *sub_create(struct mpv_global *global, struct sh_stream *sh,
+ struct attachment_list *attachments)
{
- assert(demuxer && sh && sh->type == STREAM_SUB);
+ assert(sh && sh->type == STREAM_SUB);
struct dec_sub *sub = talloc(NULL, struct dec_sub);
*sub = (struct dec_sub){
@@ -124,7 +126,7 @@ struct dec_sub *sub_create(struct mpv_global *global, struct demuxer *demuxer,
.opts = global->opts,
.sh = sh,
.codec = sh->codec,
- .demuxer = demuxer,
+ .attachments = talloc_steal(sub, attachments),
.last_pkt_pts = MP_NOPTS_VALUE,
.last_vo_pts = MP_NOPTS_VALUE,
.start = MP_NOPTS_VALUE,
diff --git a/sub/dec_sub.h b/sub/dec_sub.h
index b3f30520e3..cedb140e79 100644
--- a/sub/dec_sub.h
+++ b/sub/dec_sub.h
@@ -6,7 +6,6 @@
#include "osd.h"
-struct demuxer;
struct sh_stream;
struct mpv_global;
struct demux_packet;
@@ -22,8 +21,13 @@ enum sd_ctrl {
SD_CTRL_SET_VIDEO_DEF_FPS,
};
-struct dec_sub *sub_create(struct mpv_global *global, struct demuxer *demuxer,
- struct sh_stream *sh);
+struct attachment_list {
+ struct demux_attachment *entries;
+ int num_entries;
+};
+
+struct dec_sub *sub_create(struct mpv_global *global, struct sh_stream *sh,
+ struct attachment_list *attachments);
void sub_destroy(struct dec_sub *sub);
void sub_lock(struct dec_sub *sub);
void sub_unlock(struct dec_sub *sub);
diff --git a/sub/sd.h b/sub/sd.h
index b142654ed1..92bbf906fd 100644
--- a/sub/sd.h
+++ b/sub/sd.h
@@ -17,7 +17,7 @@ struct sd {
const struct sd_functions *driver;
void *priv;
- struct demuxer *demuxer;
+ struct attachment_list *attachments;
struct mp_codec_params *codec;
};
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index 5c56d3e0df..4426c2ebab 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -117,10 +117,10 @@ static void add_subtitle_fonts(struct sd *sd)
{
struct sd_ass_priv *ctx = sd->priv;
struct MPOpts *opts = sd->opts;
- if (!opts->ass_enabled || !sd->demuxer)
+ if (!opts->ass_enabled || !sd->attachments)
return;
- for (int i = 0; i < sd->demuxer->num_attachments; i++) {
- struct demux_attachment *f = &sd->demuxer->attachments[i];
+ for (int i = 0; i < sd->attachments->num_entries; i++) {
+ struct demux_attachment *f = &sd->attachments->entries[i];
if (opts->use_embedded_fonts && attachment_is_font(sd->log, f))
ass_add_font(ctx->ass_library, f->name, f->data, f->data_size);
}