diff options
author | wm4 <wm4@nowhere> | 2013-04-15 21:25:21 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-04-20 23:28:27 +0200 |
commit | 331982b99ce3b50b95ac340eb17c6116913480f3 (patch) | |
tree | b0e0c14521f509a883c0420d9e6277c0329eb773 /demux/demux_mkv.c | |
parent | 5ac50f88c90167e9ade0c998ac62e935e259acee (diff) | |
download | mpv-331982b99ce3b50b95ac340eb17c6116913480f3.tar.bz2 mpv-331982b99ce3b50b95ac340eb17c6116913480f3.tar.xz |
sub, demux: identify subtitle types with the codec name
Get rid of the 1-char subtitle type field. Use sh_stream->codec instead
just like audio and video do. Use codec names as defined by libavcodec
for simplicity, even if they're somewhat verbose and annoying.
Note that ffmpeg might switch to "ass" as codec name for ASS, so we
don't bother with the current silly "ssa" name.
Diffstat (limited to 'demux/demux_mkv.c')
-rw-r--r-- | demux/demux_mkv.c | 37 |
1 files changed, 21 insertions, 16 deletions
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); |