summaryrefslogtreecommitdiffstats
path: root/sub/sd_srt.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-06-03 23:00:39 +0200
committerwm4 <wm4@nowhere>2013-06-03 23:00:39 +0200
commitf3871193fcfc5feaee42c883496fa5f8f99eb4f5 (patch)
tree424653d02ca21c19b793a34db5b37f5643bab4d0 /sub/sd_srt.c
parent61dfe121791adf953386642844cd9258ba99f179 (diff)
downloadmpv-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.
Diffstat (limited to 'sub/sd_srt.c')
-rw-r--r--sub/sd_srt.c8
1 files changed, 8 insertions, 0 deletions
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;
}