summaryrefslogtreecommitdiffstats
path: root/sub
diff options
context:
space:
mode:
Diffstat (limited to 'sub')
-rw-r--r--sub/dec_sub.h3
-rw-r--r--sub/sd_ass.c32
2 files changed, 5 insertions, 30 deletions
diff --git a/sub/dec_sub.h b/sub/dec_sub.h
index 263df19bc0..4eb833c52b 100644
--- a/sub/dec_sub.h
+++ b/sub/dec_sub.h
@@ -21,9 +21,6 @@ void sub_reset(struct sh_sub *sh, struct osd_state *osd);
void sub_switchoff(struct sh_sub *sh, struct osd_state *osd);
void sub_uninit(struct sh_sub *sh);
-struct sh_sub *sd_ass_create_from_track(struct ass_track *track,
- const char *codec, struct MPOpts *opts);
-
#ifdef CONFIG_ASS
struct ass_track *sub_get_ass_track(struct osd_state *osd);
#endif
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index 02d0ed15bf..b107e0438f 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -79,7 +79,9 @@ static int init(struct sh_sub *sh, struct osd_state *osd)
} else {
ctx = talloc_zero(NULL, struct sd_ass_priv);
sh->context = ctx;
- if (ass) {
+ if (sh->track) {
+ ctx->ass_track = sh->track;
+ } else if (ass) {
ctx->ass_track = ass_new_track(osd->ass_library);
if (sh->extradata)
ass_process_codec_private(ctx->ass_track, sh->extradata,
@@ -277,7 +279,8 @@ static void uninit(struct sh_sub *sh)
{
struct sd_ass_priv *ctx = sh->context;
- ass_free_track(ctx->ass_track);
+ if (sh->track != ctx->ass_track)
+ ass_free_track(ctx->ass_track);
talloc_free(ctx);
}
@@ -293,31 +296,6 @@ const struct sd_functions sd_ass = {
.uninit = uninit,
};
-static int sd_ass_track_destructor(void *ptr)
-{
- uninit(ptr);
- return 1;
-}
-
-struct sh_sub *sd_ass_create_from_track(struct ass_track *track,
- const char *codec, struct MPOpts *opts)
-{
- struct sh_sub *sh = talloc(NULL, struct sh_sub);
- talloc_set_destructor(sh, sd_ass_track_destructor);
- *sh = (struct sh_sub) {
- .opts = opts,
- .gsh = talloc_struct(sh, struct sh_stream, {
- .codec = codec,
- }),
- .context = talloc_struct(sh, struct sd_ass_priv, {
- .ass_track = track,
- .vsfilter_aspect = is_ass_sub(codec),
- }),
- .initialized = true,
- };
- return sh;
-}
-
struct ass_track *sub_get_ass_track(struct osd_state *osd)
{
struct sh_sub *sh = osd ? osd->sh_sub : NULL;