summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mencoder.c5
-rw-r--r--mpcommon.c18
-rw-r--r--mpcommon.h1
-rw-r--r--mplayer.c5
4 files changed, 21 insertions, 8 deletions
diff --git a/mencoder.c b/mencoder.c
index 63c4e8bdd1..47f9979b0e 100644
--- a/mencoder.c
+++ b/mencoder.c
@@ -1060,10 +1060,7 @@ default: {
if (ass_library) {
for (i = 0; i < demuxer->num_attachments; ++i) {
demux_attachment_t* att = demuxer->attachments + i;
- if (use_embedded_fonts &&
- att->name && att->type && att->data && att->data_size &&
- (strcmp(att->type, "application/x-truetype-font") == 0 ||
- strcmp(att->type, "application/x-font") == 0))
+ if (use_embedded_fonts && attachment_is_font(att))
ass_add_font(ass_library, att->name, att->data, att->data_size);
}
}
diff --git a/mpcommon.c b/mpcommon.c
index 61d61c743c..5756b8ad6a 100644
--- a/mpcommon.c
+++ b/mpcommon.c
@@ -297,6 +297,24 @@ int select_audio(demuxer_t* demuxer, int audio_id, char* audio_lang)
return demuxer->audio->id;
}
+bool attachment_is_font(struct demux_attachment *att)
+{
+ if (!att->name || !att->type || !att->data || !att->data_size)
+ return false;
+ // match against MIME types
+ if (strcmp(att->type, "application/x-truetype-font") == 0
+ || strcmp(att->type, "application/x-font") == 0)
+ return true;
+ // fallback: match against file extension
+ if (strlen(att->name) > 4) {
+ char *ext = att->name + strlen(att->name) - 4;
+ if (strcasecmp(ext, ".ttf") == 0 || strcasecmp(ext, ".ttc") == 0
+ || strcasecmp(ext, ".otf") == 0)
+ return true;
+ }
+ return false;
+}
+
/* Parse -noconfig common to both programs */
int disable_system_conf=0;
int disable_user_conf=0;
diff --git a/mpcommon.h b/mpcommon.h
index d7894edf06..3c35b8221a 100644
--- a/mpcommon.h
+++ b/mpcommon.h
@@ -35,6 +35,7 @@ void update_subtitles(struct MPContext *mpctx, struct MPOpts *opts,
void update_teletext(sh_video_t *sh_video, demuxer_t *demuxer, int reset);
int select_audio(demuxer_t* demuxer, int audio_id, char* audio_lang);
void set_osd_subtitle(struct MPContext *mpctx, subtitle *subs);
+bool attachment_is_font(struct demux_attachment *att);
extern int disable_system_conf;
extern int disable_user_conf;
diff --git a/mplayer.c b/mplayer.c
index fdead085ba..6be87667cc 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -3756,10 +3756,7 @@ if (opts->ass_enabled && ass_library) {
struct demuxer *d = mpctx->sources[j].demuxer;
for (int i = 0; i < d->num_attachments; i++) {
struct demux_attachment *att = d->attachments + i;
- if (use_embedded_fonts
- && att->name && att->type && att->data && att->data_size
- && (strcmp(att->type, "application/x-truetype-font") == 0
- || strcmp(att->type, "application/x-font") == 0))
+ if (use_embedded_fonts && attachment_is_font(att))
ass_add_font(ass_library, att->name, att->data, att->data_size);
}
}