summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mkv.cpp
diff options
context:
space:
mode:
authormosu <mosu@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-11-16 12:10:34 +0000
committermosu <mosu@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-11-16 12:10:34 +0000
commit72c0c4f434535d2de7e85871b08431764772f685 (patch)
tree3ee322b40575e8eeb12b2f853f4342ead05f5403 /libmpdemux/demux_mkv.cpp
parent47f136d976eb7552f1ba20aa193af189c06ad6e8 (diff)
downloadmpv-72c0c4f434535d2de7e85871b08431764772f685.tar.bz2
mpv-72c0c4f434535d2de7e85871b08431764772f685.tar.xz
Support for FLAC in Matroska.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@11479 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_mkv.cpp')
-rw-r--r--libmpdemux/demux_mkv.cpp30
1 files changed, 26 insertions, 4 deletions
diff --git a/libmpdemux/demux_mkv.cpp b/libmpdemux/demux_mkv.cpp
index 82cf6a9658..a9d5fbb30e 100644
--- a/libmpdemux/demux_mkv.cpp
+++ b/libmpdemux/demux_mkv.cpp
@@ -774,7 +774,7 @@ static bool reverse_encodings(mkv_track_t *track, unsigned char *&data,
(zstream.avail_in != 0) && (result != Z_STREAM_END));
mp_msg(MSGT_DEMUX, MSGL_DBG2, "[mkv] zlib decompression: from %d to "
- "%d \n", new_size, zstream.total_out);
+ "%d \n", (int)new_size, (int)zstream.total_out);
new_size = zstream.total_out;
inflateEnd(&zstream);
@@ -1030,6 +1030,16 @@ static int check_track_information(mkv_demuxer_t *d) {
t->header_sizes[0] - t->header_sizes[1];
t->a_formattag = 0xFFFE;
+ } else if (!strcmp(t->codec_id, MKV_A_QDMC) ||
+ !strcmp(t->codec_id, MKV_A_QDMC2)) {
+ ;
+ } else if (!strcmp(t->codec_id, MKV_A_FLAC)) {
+ if ((t->private_data == NULL) || (t->private_size == 0)) {
+ mp_msg(MSGT_DEMUX, MSGL_WARN, "[mkv] FLAC track does not "
+ "contain valid headers.\n");
+ continue;
+ }
+ t->a_formattag = mmioFOURCC('f', 'L', 'a', 'C');
} else if (t->private_size >= sizeof(real_audio_v4_props_t)) {
if (!strcmp(t->codec_id, MKV_A_REAL28))
t->a_formattag = mmioFOURCC('2', '8', '_', '8');
@@ -1041,9 +1051,6 @@ static int check_track_information(mkv_demuxer_t *d) {
t->a_formattag = mmioFOURCC('d', 'n', 'e', 't');
else if (!strcmp(t->codec_id, MKV_A_REALSIPR))
t->a_formattag = mmioFOURCC('s', 'i', 'p', 'r');
- } else if (!strcmp(t->codec_id, MKV_A_QDMC) ||
- !strcmp(t->codec_id, MKV_A_QDMC2)) {
- ;
} else {
mp_msg(MSGT_DEMUX, MSGL_WARN, "[mkv] Unknown/unsupported audio "
"codec ID '%s' for track %u or missing/faulty private "
@@ -2347,6 +2354,21 @@ extern "C" int demux_mkv_open(demuxer_t *demuxer) {
memcpy(((char *)(sh_a->wf + 1)) + 10, src, codecdata_length);
track->realmedia = true;
+
+ } else if (!strcmp(track->codec_id, MKV_A_FLAC)) {
+ free(sh_a->wf);
+ sh_a->wf = NULL;
+
+ dp = new_demux_packet(4);
+ memcpy(dp->buffer, "fLaC", 4);
+ dp->pts = 0;
+ dp->flags = 0;
+ ds_add_packet(demuxer->audio, dp);
+ dp = new_demux_packet(track->private_size);
+ memcpy(dp->buffer, track->private_data, track->private_size);
+ dp->pts = 0;
+ dp->flags = 0;
+ ds_add_packet(demuxer->audio, dp);
}
} else {