summaryrefslogtreecommitdiffstats
path: root/sub
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-03-15 22:17:51 +0100
committerwm4 <wm4@nowhere>2014-03-15 22:17:51 +0100
commit86689f7bf23dd05b5e6b9e42e43379d52e27c338 (patch)
tree05040ae3532ec9718e320b69a11d97264935f83b /sub
parentf6b4f60264000ab16459639063cdfae64c3db942 (diff)
downloadmpv-86689f7bf23dd05b5e6b9e42e43379d52e27c338.tar.bz2
mpv-86689f7bf23dd05b5e6b9e42e43379d52e27c338.tar.xz
demux_libass: change how external ASS subtitles are loaded
Instead of parsing the ASS file in demux_libass.c and trying to pass the ASS_Track to the subtitle renderer, just read all file data in demux_libass.c, and let the subtitle renderer pass the file contents to ass_process_codec_private(). (This happens to parse full files too.) Makes the code simpler, though it also relies harder on the (messy) probe logic in demux_libass.c.
Diffstat (limited to 'sub')
-rw-r--r--sub/dec_sub.c4
-rw-r--r--sub/sd.h3
-rw-r--r--sub/sd_ass.c13
3 files changed, 5 insertions, 15 deletions
diff --git a/sub/dec_sub.c b/sub/dec_sub.c
index 0a62e52a15..79aaeba888 100644
--- a/sub/dec_sub.c
+++ b/sub/dec_sub.c
@@ -209,7 +209,6 @@ void sub_init_from_sh(struct dec_sub *sub, struct sh_stream *sh)
sub_set_extradata(sub, sh->sub->extradata, sh->sub->extradata_len);
struct sd init_sd = sub->init_sd;
init_sd.codec = sh->codec;
- init_sd.ass_track = sh->sub->track;
init_sd.sub_stream_w = sh->sub->w;
init_sd.sub_stream_h = sh->sub->h;
@@ -416,8 +415,7 @@ bool sub_read_all_packets(struct dec_sub *sub, struct sh_stream *sh)
pthread_mutex_lock(&sub->lock);
- if (!sub_accept_packets_in_advance(sub) || sh->sub->track || sub->num_sd < 1)
- {
+ if (!sub_accept_packets_in_advance(sub) || sub->num_sd < 1) {
pthread_mutex_unlock(&sub->lock);
return false;
}
diff --git a/sub/sd.h b/sub/sd.h
index 78b9825ead..3f348fcb32 100644
--- a/sub/sd.h
+++ b/sub/sd.h
@@ -28,9 +28,6 @@ struct sd {
// Resolution hints stored in mp4 files.
int sub_stream_w, sub_stream_h;
- // Make sd_ass use an existing track
- struct ass_track *ass_track;
-
// Shared renderer for ASS - done to avoid reloading embedded fonts.
struct ass_library *ass_library;
struct ass_renderer *ass_renderer;
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index e4428516b9..4ae7121bad 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -68,13 +68,9 @@ static int init(struct sd *sd)
ctx->is_converted = sd->converted_from != NULL;
- if (sd->ass_track) {
- ctx->ass_track = sd->ass_track;
- } else {
- ctx->ass_track = ass_new_track(sd->ass_library);
- if (!ctx->is_converted)
- ctx->ass_track->track_type = TRACK_TYPE_ASS;
- }
+ ctx->ass_track = ass_new_track(sd->ass_library);
+ if (!ctx->is_converted)
+ ctx->ass_track->track_type = TRACK_TYPE_ASS;
if (sd->extradata) {
ass_process_codec_private(ctx->ass_track, sd->extradata,
@@ -310,8 +306,7 @@ static void uninit(struct sd *sd)
{
struct sd_ass_priv *ctx = sd->priv;
- if (sd->ass_track != ctx->ass_track)
- ass_free_track(ctx->ass_track);
+ ass_free_track(ctx->ass_track);
talloc_free(ctx);
}