# HG changeset patch # User mosu # Date 1069013109 0 # Node ID 3abf5b7cb308aae1623e744166c53f9f96fffe33 # Parent 462b97f8746f1bb4ee50f60f3e60b1d4d699f132 Support for FLAC tracks that already contain the "fLaC" header. diff -r 462b97f8746f -r 3abf5b7cb308 libmpdemux/demux_mkv.cpp --- a/libmpdemux/demux_mkv.cpp Sun Nov 16 19:55:53 2003 +0000 +++ b/libmpdemux/demux_mkv.cpp Sun Nov 16 20:05:09 2003 +0000 @@ -2357,24 +2357,29 @@ } else if (!strcmp(track->codec_id, MKV_A_FLAC) || (track->a_formattag == 0xf1ac)) { + unsigned char *ptr; + int size; 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); if (track->a_formattag == mmioFOURCC('f', 'L', 'a', 'C')) { - dp = new_demux_packet(track->private_size); - memcpy(dp->buffer, track->private_data, track->private_size); + ptr = (unsigned char *)track->private_data; + size = track->private_size; } else { sh_a->format = mmioFOURCC('f', 'L', 'a', 'C'); - dp = new_demux_packet(track->private_size - sizeof(WAVEFORMATEX)); - memcpy(dp->buffer, (unsigned char *)track->private_data + - sizeof(WAVEFORMATEX), track->private_size - - sizeof(WAVEFORMATEX)); + ptr = (unsigned char *)track->private_data + sizeof(WAVEFORMATEX); + size = track->private_size - sizeof(WAVEFORMATEX); } + if ((size < 4) || (ptr[0] != 'f') || (ptr[1] != 'L') || + (ptr[2] != 'a') || (ptr[3] != 'C')) { + 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(size); + memcpy(dp->buffer, ptr, size); dp->pts = 0; dp->flags = 0; ds_add_packet(demuxer->audio, dp);