summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mkv.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@mplayer2.org>2011-08-20 06:00:57 +0300
committerUoti Urpala <uau@mplayer2.org>2011-08-20 06:06:12 +0300
commite2ca8853a6a26ca1afcababea0e4a743b525daa2 (patch)
tree29df44aaa56786654dd08d1ee25f4e463ee02ebd /libmpdemux/demux_mkv.c
parent46d90010ba1f78b68cdd6b2ee84a51fe46ee37a8 (diff)
downloadmpv-e2ca8853a6a26ca1afcababea0e4a743b525daa2.tar.bz2
mpv-e2ca8853a6a26ca1afcababea0e4a743b525daa2.tar.xz
demux_mkv: support extradata for wavpack audio tracks
Export the codec private data field for WavPack and TrueHD audio tracks. At least for WavPack this is necessary to make some samples work. Also change some other cases to use the same data-copying code.
Diffstat (limited to 'libmpdemux/demux_mkv.c')
-rw-r--r--libmpdemux/demux_mkv.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c
index 8cccf24889..085f2f82a0 100644
--- a/libmpdemux/demux_mkv.c
+++ b/libmpdemux/demux_mkv.c
@@ -1418,23 +1418,15 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track,
sh_a->wf->nBlockAlign = 1486;
track->fix_i_bps = 1;
track->qt_last_a_pts = 0.0;
- if (track->private_data != NULL) {
- sh_a->codecdata = malloc(track->private_size);
- memcpy(sh_a->codecdata, track->private_data, track->private_size);
- sh_a->codecdata_len = track->private_size;
- }
+ goto copy_private_data;
} else if (track->a_formattag == mmioFOURCC('M', 'P', '4', 'A')) {
int profile, srate_idx;
sh_a->wf->nAvgBytesPerSec = 16000;
sh_a->wf->nBlockAlign = 1024;
- if (!strcmp(track->codec_id, MKV_A_AAC) && track->private_data) {
- sh_a->codecdata = malloc(track->private_size);
- memcpy(sh_a->codecdata, track->private_data, track->private_size);
- sh_a->codecdata_len = track->private_size;
- return 0;
- }
+ if (!strcmp(track->codec_id, MKV_A_AAC) && track->private_data)
+ goto copy_private_data;
/* Recreate the 'private data' */
/* which faad2 uses in its initialization */
@@ -1559,7 +1551,14 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track,
sh_a->codecdata_len = size;
memcpy(sh_a->codecdata, ptr, size);
}
- } else if (track->a_formattag == mmioFOURCC('W', 'V', 'P', 'K') || track->a_formattag == mmioFOURCC('T', 'R', 'H', 'D')) { /* do nothing, still works */
+ } else if (track->a_formattag == mmioFOURCC('W', 'V', 'P', 'K') ||
+ track->a_formattag == mmioFOURCC('T', 'R', 'H', 'D')) {
+ copy_private_data:
+ if (!track->ms_compat && track->private_size) {
+ sh_a->codecdata = malloc(track->private_size);
+ sh_a->codecdata_len = track->private_size;
+ memcpy(sh_a->codecdata, track->private_data, track->private_size);
+ }
} else if (!track->ms_compat) {
goto error;
}