summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmpdemux/matroska.h7
-rw-r--r--mplayer.c13
2 files changed, 20 insertions, 0 deletions
diff --git a/libmpdemux/matroska.h b/libmpdemux/matroska.h
index 4cf985347e..9738c39251 100644
--- a/libmpdemux/matroska.h
+++ b/libmpdemux/matroska.h
@@ -44,5 +44,12 @@
#define MKV_S_TEXTASCII "S_TEXT/ASCII"
#define MKV_S_TEXTUTF8 "S_TEXT/UTF8"
#define MKV_S_TEXTSSA "S_TEXT/SSA"
+#define MKV_S_VOBSUB "S_VOBSUB"
+
+typedef struct {
+ char type; // t = text, v = VobSub
+ unsigned int palette[16]; // for VobSubs
+ int width, height; // for VobSubs
+} mkv_sh_sub_t;
#endif /* __MATROSKA_H */
diff --git a/mplayer.c b/mplayer.c
index 793317c34a..638c77e6ef 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -104,6 +104,9 @@ static int quiet=0;
static int last_dvb_step = 1;
#endif
+#ifdef HAVE_MATROSKA
+#include "libmpdemux/matroska.h"
+#endif
//**************************************************************************//
// Playtree
@@ -1602,6 +1605,16 @@ if (vo_spudec==NULL && stream->type==STREAMTYPE_DVD) {
}
#endif
+#ifdef HAVE_MATROSKA
+if ((vo_spudec == NULL) && (demuxer->type == DEMUXER_TYPE_MATROSKA) &&
+ (d_dvdsub->sh != NULL) && (((mkv_sh_sub_t *)d_dvdsub->sh)->type == 'v')) {
+ current_module = "spudec_init_matroska";
+ vo_spudec = spudec_new_scaled(((mkv_sh_sub_t *)d_dvdsub->sh)->palette,
+ ((mkv_sh_sub_t *)d_dvdsub->sh)->width,
+ ((mkv_sh_sub_t *)d_dvdsub->sh)->height);
+}
+#endif
+
if (vo_spudec==NULL) {
current_module="spudec_init_normal";
vo_spudec=spudec_new_scaled(NULL, sh_video->disp_w, sh_video->disp_h);