diff options
author | James Stembridge <jstembridge@users.sourceforge.net> | 2005-01-14 15:24:07 +0000 |
---|---|---|
committer | James Stembridge <jstembridge@users.sourceforge.net> | 2005-01-14 15:24:07 +0000 |
commit | 05f670cb8cb0e0594d85ee50e8d126557cf3f8fe (patch) | |
tree | 638bdc4737dab9c7c3724ab372459590a607e07b /src/libmusepack/idtag.c | |
parent | f03ebd99a8e85f09d1abcde8fcc4a6b3318d82ad (diff) | |
download | xine-lib-05f670cb8cb0e0594d85ee50e8d126557cf3f8fe.tar.gz xine-lib-05f670cb8cb0e0594d85ee50e8d126557cf3f8fe.tar.bz2 |
(Drum roll) Long awaited support for Musepack
CVS patchset: 7344
CVS date: 2005/01/14 15:24:07
Diffstat (limited to 'src/libmusepack/idtag.c')
-rw-r--r-- | src/libmusepack/idtag.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/libmusepack/idtag.c b/src/libmusepack/idtag.c new file mode 100644 index 000000000..4b02b33f4 --- /dev/null +++ b/src/libmusepack/idtag.c @@ -0,0 +1,83 @@ +/* + Copyright (c) 2004, The Musepack Development Team + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of the The Musepack Development Team nor the + names of its contributors may be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/// \file idtag.c +/// Rudimentary id3tag handling routines, just enough to skip id3v2 tags, +/// if present. + +#include "musepack/musepack.h" +#include "musepack/internal.h" + +mpc_int32_t +JumpID3v2 (mpc_reader* r) { + unsigned char tmp [10]; + mpc_uint32_t Unsynchronisation; // ID3v2.4-flag + mpc_uint32_t ExtHeaderPresent; // ID3v2.4-flag + mpc_uint32_t ExperimentalFlag; // ID3v2.4-flag + mpc_uint32_t FooterPresent; // ID3v2.4-flag + mpc_int32_t ret; + + // seek to first byte of mpc data + if (!r->seek (r->data, 0)) { + return 0; + } + + r->read(r->data, tmp, sizeof(tmp)); + + // check id3-tag + if ( 0 != memcmp ( tmp, "ID3", 3) ) + return 0; + + // read flags + Unsynchronisation = tmp[5] & 0x80; + ExtHeaderPresent = tmp[5] & 0x40; + ExperimentalFlag = tmp[5] & 0x20; + FooterPresent = tmp[5] & 0x10; + + if ( tmp[5] & 0x0F ) + return -1; // not (yet???) allowed + if ( (tmp[6] | tmp[7] | tmp[8] | tmp[9]) & 0x80 ) + return -1; // not allowed + + // read HeaderSize (syncsave: 4 * $0xxxxxxx = 28 significant bits) + ret = tmp[6] << 21; + ret += tmp[7] << 14; + ret += tmp[8] << 7; + ret += tmp[9] ; + ret += 10; + if ( FooterPresent ) + ret += 10; + + return ret; +} |