diff options
author | wm4 <wm4@nowhere> | 2013-06-03 23:00:39 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-06-03 23:00:39 +0200 |
commit | f3871193fcfc5feaee42c883496fa5f8f99eb4f5 (patch) | |
tree | 424653d02ca21c19b793a34db5b37f5643bab4d0 | |
parent | 61dfe121791adf953386642844cd9258ba99f179 (diff) | |
download | mpv-f3871193fcfc5feaee42c883496fa5f8f99eb4f5.tar.bz2 mpv-f3871193fcfc5feaee42c883496fa5f8f99eb4f5.tar.xz |
sd_srt, sd_microdvd: set ASS script resolution
Both converters can output \pos and deal with font sizes, so they assume
a specific script resolution (PlayResX/PlayResY). The implicit
assumption was that a specific resolution was guaranteed. The
MP_ASS_FONT_PLAYRESY constant is connected to this.
Better make it explicit, so that the implicit dependency on
MP_ASS_FONT_PLAYRESY is removed. (Unfortunately, libavcodec sub
converters still don't set PlayResX/PlayResY explicitly, so the value
set by that constant can't be declared as arbitrary yet.)
PlayResY=288 is most likely the SSA natural script resolution (or
something like this?), as well as the libass and VSFilter default.
PlayResX=384 is the fallback value set by libass if PlayResY is set to
288, and PlayResX is unset.
-rw-r--r-- | sub/ass_mp.h | 3 | ||||
-rw-r--r-- | sub/sd_microdvd.c | 8 | ||||
-rw-r--r-- | sub/sd_srt.c | 8 |
3 files changed, 18 insertions, 1 deletions
diff --git a/sub/ass_mp.h b/sub/ass_mp.h index b6ec2808c0..9f40b34166 100644 --- a/sub/ass_mp.h +++ b/sub/ass_mp.h @@ -27,7 +27,8 @@ #include "config.h" #include "subreader.h" -// font sizes and explicit tags in subassconvert.c assume this size (?) +// This is probably arbitrary. +// sd_lavc_conv might indirectly still assume this PlayResY, though. #define MP_ASS_FONT_PLAYRESY 288 #define MP_ASS_RGBA(r, g, b, a) \ diff --git a/sub/sd_microdvd.c b/sub/sd_microdvd.c index adf8679676..81c8ef92c8 100644 --- a/sub/sd_microdvd.c +++ b/sub/sd_microdvd.c @@ -309,6 +309,12 @@ static void convert_microdvd(const char *orig, char *dest, int dest_buffer_size) new_line.buf[new_line.len] = 0; } +static const char *microdvd_ass_extradata = + "[Script Info]\n" + "ScriptType: v4.00+\n" + "PlayResX: 384\n" + "PlayResY: 288\n"; + static bool supports_format(const char *format) { return format && strcmp(format, "microdvd") == 0; @@ -317,6 +323,8 @@ static bool supports_format(const char *format) static int init(struct sd *sd) { sd->output_codec = "ass-text"; + sd->output_extradata = (char *)microdvd_ass_extradata; + sd->output_extradata_len = strlen(sd->output_extradata); return 0; } diff --git a/sub/sd_srt.c b/sub/sd_srt.c index fcad088dc1..6258acde5b 100644 --- a/sub/sd_srt.c +++ b/sub/sd_srt.c @@ -437,6 +437,12 @@ static void convert_subrip(const char *orig, char *dest, int dest_buffer_size) new_line.buf[new_line.len] = 0; } +static const char *srt_ass_extradata = + "[Script Info]\n" + "ScriptType: v4.00+\n" + "PlayResX: 384\n" + "PlayResY: 288\n"; + static bool supports_format(const char *format) { return format && (strcmp(format, "subrip") == 0 || @@ -446,6 +452,8 @@ static bool supports_format(const char *format) static int init(struct sd *sd) { sd->output_codec = "ass-text"; + sd->output_extradata = (char *)srt_ass_extradata; + sd->output_extradata_len = strlen(sd->output_extradata); return 0; } |