diff options
author | wm4 <wm4@nowhere> | 2015-06-21 18:19:10 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-06-21 18:19:10 +0200 |
commit | 0316f5514ec47530844eb1f680457417f93671d7 (patch) | |
tree | 697a8355b7024bef55ddfeb9aef6a281d2ae9b32 /demux/demux_mkv.c | |
parent | be882175d85d8b1ea253dce11494a53264d04148 (diff) | |
download | mpv-0316f5514ec47530844eb1f680457417f93671d7.tar.bz2 mpv-0316f5514ec47530844eb1f680457417f93671d7.tar.xz |
demux_mkv: share some duplicated code
As a side effect, video tracks now actually export some fields
(language, default flag) to the player.
Diffstat (limited to 'demux/demux_mkv.c')
-rw-r--r-- | demux/demux_mkv.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index 4068b23807..0edb127bef 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -1168,6 +1168,19 @@ static void add_coverart(struct demuxer *demuxer) } } +static void init_track(demuxer_t *demuxer, mkv_track_t *track, + struct sh_stream *sh) +{ + track->stream = sh; + + if (track->language && (strcmp(track->language, "und") != 0)) + sh->lang = track->language; + + sh->demuxer_id = track->tnum; + sh->title = track->name; + sh->default_track = track->default_track; +} + static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track); static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track); static int demux_mkv_open_sub(demuxer_t *demuxer, mkv_track_t *track); @@ -1220,10 +1233,8 @@ static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track) struct sh_stream *sh = new_sh_stream(demuxer, STREAM_VIDEO); if (!sh) return 1; - track->stream = sh; + init_track(demuxer, track, sh); sh_video_t *sh_v = sh->video; - sh->demuxer_id = track->tnum; - sh->title = talloc_strdup(sh_v, track->name); sh_v->bits_per_coded_sample = 24; @@ -1359,7 +1370,7 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track) struct sh_stream *sh = new_sh_stream(demuxer, STREAM_AUDIO); if (!sh) return 1; - track->stream = sh; + init_track(demuxer, track, sh); sh_audio_t *sh_a = sh->audio; if (track->private_size > 0x1000000) @@ -1368,11 +1379,6 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track) unsigned char *extradata = track->private_data; unsigned int extradata_len = track->private_size; - if (track->language && (strcmp(track->language, "und") != 0)) - sh->lang = talloc_strdup(sh_a, track->language); - sh->demuxer_id = track->tnum; - sh->title = talloc_strdup(sh_a, track->name); - sh->default_track = track->default_track; if (!track->a_osfreq) track->a_osfreq = track->a_sfreq; sh_a->bits_per_coded_sample = track->a_bps ? track->a_bps : 16; @@ -1617,9 +1623,8 @@ static int demux_mkv_open_sub(demuxer_t *demuxer, mkv_track_t *track) struct sh_stream *sh = new_sh_stream(demuxer, STREAM_SUB); if (!sh) return 1; - track->stream = sh; - sh_sub_t *sh_s = sh->sub; - sh->demuxer_id = track->tnum; + init_track(demuxer, track, sh); + sh->codec = subtitle_type; bstr in = (bstr){track->private_data, track->private_size}; bstr buffer = demux_mkv_decode(demuxer->log, track, in, 2); @@ -1631,10 +1636,6 @@ static int demux_mkv_open_sub(demuxer_t *demuxer, mkv_track_t *track) } sh->extradata = track->private_data; sh->extradata_size = track->private_size; - if (track->language && (strcmp(track->language, "und") != 0)) - sh->lang = talloc_strdup(sh, track->language); - sh->title = talloc_strdup(sh, track->name); - sh->default_track = track->default_track; if (!subtitle_type) MP_ERR(demuxer, "Subtitle type '%s' is not supported.\n", track->codec_id); |