summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sub/sd_ass.c30
-rw-r--r--sub/sd_lavc_conv.c2
2 files changed, 14 insertions, 18 deletions
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index c46c55c1ab..22cd33b113 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -41,17 +41,14 @@ struct sd_ass_priv {
char last_text[500];
};
-static bool is_native_ass(const char *t)
-{
- return strcmp(t, "ass") == 0 || strcmp(t, "ssa") == 0;
-}
-
static bool supports_format(const char *format)
{
// ass-text is produced by converters and the subreader.c ssa parser; this
// format has ASS tags, but doesn't start with any prelude, nor does it
// have extradata.
- return format && (is_native_ass(format) || strcmp(format, "ass-text") == 0);
+ return format && (strcmp(format, "ass") == 0 ||
+ strcmp(format, "ssa") == 0 ||
+ strcmp(format, "ass-text") == 0);
}
static void free_last_event(ASS_Track *track)
@@ -64,7 +61,7 @@ static void free_last_event(ASS_Track *track)
static int init(struct sd *sd)
{
struct MPOpts *opts = sd->opts;
- if (!sd->ass_library || !sd->ass_renderer)
+ if (!sd->ass_library || !sd->ass_renderer || !sd->codec)
return -1;
bool is_converted = sd->converted_from != NULL;
@@ -99,16 +96,15 @@ static void decode(struct sd *sd, struct demux_packet *packet)
unsigned char *text = data;
struct sd_ass_priv *ctx = sd->priv;
ASS_Track *track = ctx->ass_track;
- if (is_native_ass(sd->codec)) {
- if (bstr_startswith0((bstr){data, data_len}, "Dialogue: ")) {
- // broken ffmpeg ASS packet format
- ctx->flush_on_seek = true;
- ass_process_data(track, data, data_len);
- } else {
- ass_process_chunk(track, data, data_len,
- (long long)(pts*1000 + 0.5),
- (long long)(duration*1000 + 0.5));
- }
+ if (strcmp(sd->codec, "ass") == 0) {
+ ass_process_chunk(track, data, data_len,
+ (long long)(pts*1000 + 0.5),
+ (long long)(duration*1000 + 0.5));
+ return;
+ } else if (strcmp(sd->codec, "ssa") == 0) {
+ // broken ffmpeg ASS packet format
+ ctx->flush_on_seek = true;
+ ass_process_data(track, data, data_len);
return;
}
// plaintext subs
diff --git a/sub/sd_lavc_conv.c b/sub/sd_lavc_conv.c
index 1fc0262f96..4f24e20709 100644
--- a/sub/sd_lavc_conv.c
+++ b/sub/sd_lavc_conv.c
@@ -87,7 +87,7 @@ static int init(struct sd *sd)
avctx->time_base = (AVRational) {1, 1000};
priv->avctx = avctx;
sd->priv = priv;
- sd->output_codec = "ass";
+ sd->output_codec = "ssa";
sd->output_extradata = avctx->subtitle_header;
sd->output_extradata_len = avctx->subtitle_header_size;
if (sd->output_extradata) {