diff options
Diffstat (limited to 'demux')
-rw-r--r-- | demux/demux.c | 15 | ||||
-rw-r--r-- | demux/demux_lavf.c | 21 | ||||
-rw-r--r-- | demux/demux_mkv.c | 37 | ||||
-rw-r--r-- | demux/demux_mpg.c | 2 | ||||
-rw-r--r-- | demux/demux_ts.c | 6 | ||||
-rw-r--r-- | demux/stheader.h | 3 |
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, |