summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-06-21 18:19:10 +0200
committerwm4 <wm4@nowhere>2015-06-21 18:19:10 +0200
commit0316f5514ec47530844eb1f680457417f93671d7 (patch)
tree697a8355b7024bef55ddfeb9aef6a281d2ae9b32 /demux
parentbe882175d85d8b1ea253dce11494a53264d04148 (diff)
downloadmpv-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')
-rw-r--r--demux/demux_mkv.c33
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);