diff options
Diffstat (limited to 'sub')
-rw-r--r-- | sub/dec_sub.c | 14 | ||||
-rw-r--r-- | sub/dec_sub.h | 10 | ||||
-rw-r--r-- | sub/sd.h | 2 | ||||
-rw-r--r-- | sub/sd_ass.c | 6 |
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); @@ -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); } |