summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKacper Michajłow <kasper93@gmail.com>2024-04-13 18:30:39 +0200
committerKacper Michajłow <kasper93@gmail.com>2024-04-27 01:14:23 +0200
commitf55d19e8468440bd4d41d1ae817b9df8280f6378 (patch)
tree1e69750376cea8c5b14074797a2648c8377cb488
parentd8378dc226ad6be2a52ddaa0ca585838c28fe1a3 (diff)
downloadmpv-f55d19e8468440bd4d41d1ae817b9df8280f6378.tar.bz2
mpv-f55d19e8468440bd4d41d1ae817b9df8280f6378.tar.xz
sub/lavc_conv: don't override style of converted teletext pages
This fixes teletext pages rendering, while keeping the same default style for subtitles and other converted formats.
-rw-r--r--sub/lavc_conv.c9
-rw-r--r--sub/sd.h1
-rw-r--r--sub/sd_ass.c2
3 files changed, 11 insertions, 1 deletions
diff --git a/sub/lavc_conv.c b/sub/lavc_conv.c
index f269da3698..3a33933605 100644
--- a/sub/lavc_conv.c
+++ b/sub/lavc_conv.c
@@ -33,6 +33,7 @@
struct lavc_conv {
struct mp_log *log;
struct mp_subtitle_opts *opts;
+ bool styled;
AVCodecContext *avctx;
AVPacket *avpkt;
AVPacket *avpkt_vtt;
@@ -245,9 +246,12 @@ char **lavc_conv_decode(struct lavc_conv *priv, struct demux_packet *packet,
curr_pkt = priv->avpkt_vtt;
}
+ priv->styled = avctx->codec_id == AV_CODEC_ID_DVB_TELETEXT;
+
if (avctx->codec_id == AV_CODEC_ID_DVB_TELETEXT) {
if (!priv->opts->teletext_page) {
av_opt_set(avctx, "txt_page", "subtitle", AV_OPT_SEARCH_CHILDREN);
+ priv->styled = false;
} else if (priv->opts->teletext_page == -1) {
av_opt_set(avctx, "txt_page", "*", AV_OPT_SEARCH_CHILDREN);
} else {
@@ -285,6 +289,11 @@ done:
return priv->cur_list;
}
+bool lavc_conv_is_styled(struct lavc_conv *priv)
+{
+ return priv->styled;
+}
+
void lavc_conv_reset(struct lavc_conv *priv)
{
avcodec_flush_buffers(priv->avctx);
diff --git a/sub/sd.h b/sub/sd.h
index 173c87a7f8..681eaa9b22 100644
--- a/sub/sd.h
+++ b/sub/sd.h
@@ -55,6 +55,7 @@ struct lavc_conv *lavc_conv_create(struct sd *sd);
char *lavc_conv_get_extradata(struct lavc_conv *priv);
char **lavc_conv_decode(struct lavc_conv *priv, struct demux_packet *packet,
double *sub_pts, double *sub_duration);
+bool lavc_conv_is_styled(struct lavc_conv *priv);
void lavc_conv_reset(struct lavc_conv *priv);
void lavc_conv_uninit(struct lavc_conv *priv);
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index 8ff6443f5b..881383e965 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -651,7 +651,7 @@ static struct sub_bitmaps *get_bitmaps(struct sd *sd, struct mp_osd_res dim,
struct mp_subtitle_opts *opts = sd->opts;
struct mp_subtitle_shared_opts *shared_opts = sd->shared_opts;
bool no_ass = !opts->ass_enabled || shared_opts->ass_style_override[sd->order] == 5;
- bool converted = ctx->is_converted || no_ass;
+ bool converted = (ctx->is_converted && !lavc_conv_is_styled(ctx->converter)) || no_ass;
ASS_Track *track = no_ass ? ctx->shadow_track : ctx->ass_track;
ASS_Renderer *renderer = ctx->ass_renderer;
struct sub_bitmaps *res = &(struct sub_bitmaps){0};