summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
Diffstat (limited to 'demux')
-rw-r--r--demux/demux.c15
-rw-r--r--demux/demux_lavf.c21
-rw-r--r--demux/demux_mkv.c37
-rw-r--r--demux/demux_mpg.c2
-rw-r--r--demux/demux_ts.c6
-rw-r--r--demux/stheader.h3
6 files changed, 25 insertions, 59 deletions
diff --git a/demux/demux.c b/demux/demux.c
index c23185c90b..b3cb078dcb 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -241,21 +241,6 @@ demuxer_t *new_demuxer(struct MPOpts *opts, stream_t *stream, int type,
return d;
}
-const char *sh_sub_type2str(int type)
-{
- switch (type) {
- case 't': return "text";
- case 'm': return "movtext";
- case 'a': return "ass";
- case 'v': return "vobsub";
- case 'x': return "xsub";
- case 'b': return "dvb";
- case 'd': return "dvb-teletext";
- case 'p': return "hdmv pgs";
- }
- return "unknown";
-}
-
static struct sh_stream *new_sh_stream_id(demuxer_t *demuxer,
enum stream_type type,
int stream_index,
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c
index 498f99e014..968e9e60c8 100644
--- a/demux/demux_lavf.c
+++ b/demux/demux_lavf.c
@@ -387,32 +387,11 @@ static void handle_stream(demuxer_t *demuxer, int i)
}
case AVMEDIA_TYPE_SUBTITLE: {
sh_sub_t *sh_sub;
- char type;
- if (codec->codec_id == AV_CODEC_ID_TEXT ||
- codec->codec_id == AV_CODEC_ID_SUBRIP)
- type = 't';
- else if (codec->codec_id == AV_CODEC_ID_MOV_TEXT)
- type = 'm';
- else if (codec->codec_id == AV_CODEC_ID_SSA)
- type = 'a';
- else if (codec->codec_id == AV_CODEC_ID_DVD_SUBTITLE)
- type = 'v';
- else if (codec->codec_id == AV_CODEC_ID_XSUB)
- type = 'x';
- else if (codec->codec_id == AV_CODEC_ID_DVB_SUBTITLE)
- type = 'b';
- else if (codec->codec_id == AV_CODEC_ID_DVB_TELETEXT)
- type = 'd';
- else if (codec->codec_id == AV_CODEC_ID_HDMV_PGS_SUBTITLE)
- type = 'p';
- else
- break;
sh = new_sh_stream(demuxer, STREAM_SUB);
if (!sh)
break;
sh_sub = sh->sub;
- sh_sub->type = type;
if (codec->extradata_size) {
sh_sub->extradata = malloc(codec->extradata_size);
memcpy(sh_sub->extradata, codec->extradata, codec->extradata_size);
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index 03789631dc..647f831630 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -133,8 +133,6 @@ typedef struct mkv_track {
int fix_i_bps;
double qt_last_a_pts;
- int subtitle_type;
-
/* generic content encoding support */
mkv_content_encoding_t *encodings;
int num_encodings;
@@ -602,18 +600,6 @@ static void parse_trackentry(struct demuxer *demuxer,
if (!strcmp(track->codec_id, MKV_V_MSCOMP)
|| !strcmp(track->codec_id, MKV_A_ACM))
track->ms_compat = 1;
- else if (!strcmp(track->codec_id, MKV_S_VOBSUB))
- track->subtitle_type = 'v';
- else if (!strcmp(track->codec_id, MKV_S_TEXTSSA)
- || !strcmp(track->codec_id, MKV_S_TEXTASS)
- || !strcmp(track->codec_id, MKV_S_SSA)
- || !strcmp(track->codec_id, MKV_S_ASS))
- track->subtitle_type = 'a';
- else if (!strcmp(track->codec_id, MKV_S_TEXTASCII)
- || !strcmp(track->codec_id, MKV_S_TEXTUTF8))
- track->subtitle_type = 't';
- else if (!strcmp(track->codec_id, MKV_S_PGS))
- track->subtitle_type = 'p';
mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Codec ID: %s\n",
track->codec_id);
} else
@@ -1571,9 +1557,28 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
return 1;
}
+static const char *mkv_sub_tag[][2] = {
+ { MKV_S_VOBSUB, "dvd_subtitle" },
+ { MKV_S_TEXTSSA, "ass"},
+ { MKV_S_TEXTASS, "ass"},
+ { MKV_S_SSA, "ass"},
+ { MKV_S_ASS, "ass"},
+ { MKV_S_TEXTASCII, "subrip"},
+ { MKV_S_TEXTUTF8, "subrip"},
+ { MKV_S_PGS, "hdmv_pgs_subtitle"},
+ {0}
+};
+
static int demux_mkv_open_sub(demuxer_t *demuxer, mkv_track_t *track)
{
- if (track->subtitle_type) {
+ const char *subtitle_type = NULL;
+ for (int n = 0; mkv_sub_tag[n][0]; n++) {
+ if (strcmp(track->codec_id, mkv_sub_tag[n][0]) == 0) {
+ subtitle_type = mkv_sub_tag[n][1];
+ break;
+ }
+ }
+ if (subtitle_type) {
bstr in = (bstr){track->private_data, track->private_size};
struct sh_stream *gsh = new_sh_stream(demuxer, STREAM_SUB);
if (!gsh)
@@ -1582,7 +1587,7 @@ static int demux_mkv_open_sub(demuxer_t *demuxer, mkv_track_t *track)
sh_sub_t *sh = gsh->sub;
sh->gsh->demuxer_id = track->tnum;
track->sh_sub = sh;
- sh->type = track->subtitle_type;
+ sh->gsh->codec = subtitle_type;
bstr buffer = demux_mkv_decode(track, in, 2);
if (buffer.start && buffer.start != track->private_data) {
talloc_free(track->private_data);
diff --git a/demux/demux_mpg.c b/demux/demux_mpg.c
index 52153b9a6a..b30fb8e6e1 100644
--- a/demux/demux_mpg.c
+++ b/demux/demux_mpg.c
@@ -523,7 +523,7 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
if(!demux->s_streams[aid]){
sh_sub_t *sh = new_sh_sub(demux, aid);
- if (sh) sh->type = 'v';
+ if (sh) sh->gsh->codec = "dvd_subtitle";
mp_msg(MSGT_DEMUX,MSGL_V,"==> Found subtitle: %d\n",aid);
}
diff --git a/demux/demux_ts.c b/demux/demux_ts.c
index ac23f0e71b..6d41dfd939 100644
--- a/demux/demux_ts.c
+++ b/demux/demux_ts.c
@@ -415,11 +415,11 @@ static void ts_add_stream(demuxer_t * demuxer, ES_stream_t *es)
if (sh) {
switch (es->type) {
case SPU_DVB:
- sh->type = 'b'; break;
+ sh->gsh->codec = "dvb_subtitle"; break;
case SPU_DVD:
- sh->type = 'v'; break;
+ sh->gsh->codec = "dvd_subtitle"; break;
case SPU_PGS:
- sh->type = 'p'; break;
+ sh->gsh->codec = "hdmv_pgs_subtitle"; break;
}
priv->ts.streams[es->pid].id = priv->last_sid;
priv->ts.streams[es->pid].sh = sh;
diff --git a/demux/stheader.h b/demux/stheader.h
index 2fe1ac40c5..47dcf7a207 100644
--- a/demux/stheader.h
+++ b/demux/stheader.h
@@ -171,7 +171,6 @@ typedef struct sh_video {
typedef struct sh_sub {
SH_COMMON
- char type; // t = text, v = VobSub, a = SSA/ASS, m, x, b, d, p
bool active; // after track switch decoder may stay initialized, not active
unsigned char *extradata; // extra header data passed from demuxer
int extradata_len;
@@ -189,8 +188,6 @@ struct sh_sub *new_sh_sub_sid_lang(struct demuxer *demuxer, int id, int sid,
const char *lang);
struct sh_stream *new_sh_stream(struct demuxer *demuxer, enum stream_type type);
-const char *sh_sub_type2str(int type);
-
// video.c:
int video_read_properties(struct sh_video *sh_video);
int video_read_frame(struct sh_video *sh_video, float *frame_time_ptr,