From 72c0c4f434535d2de7e85871b08431764772f685 Mon Sep 17 00:00:00 2001 From: mosu Date: Sun, 16 Nov 2003 12:10:34 +0000 Subject: Support for FLAC in Matroska. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@11479 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_mkv.cpp | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'libmpdemux/demux_mkv.cpp') 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 { -- cgit v1.2.3