1 /***************************************************************************
2 copyright : (C) 2003 by Ismael Orenstein
3 email : orenstein@kde.org
4 ***************************************************************************/
6 /***************************************************************************
7 * This library is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU Lesser General Public License version *
9 * 2.1 as published by the Free Software Foundation. *
11 * This library is distributed in the hope that it will be useful, but *
12 * WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
14 * Lesser General Public License for more details. *
16 * You should have received a copy of the GNU Lesser General Public *
17 * License along with this library; if not, write to the Free Software *
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
21 * Alternatively, this file is available under the Mozilla Public *
22 * License Version 1.1. You may obtain a copy of the License at *
23 * http://www.mozilla.org/MPL/ *
24 ***************************************************************************/
26 #ifndef TAGLIB_XINGHEADER_H
27 #define TAGLIB_XINGHEADER_H
29 #include "mpegheader.h"
30 #include "taglib_export.h"
38 //! An implementation of the Xing VBR headers
41 * This is a minimalistic implementation of the Xing VBR headers. Xing
42 * headers are often added to VBR (variable bit rate) MP3 streams to make it
43 * easy to compute the length and quality of a VBR stream. Our implementation
44 * is only concerned with the total size of the stream (so that we can
45 * calculate the total playing time and the average bitrate). It uses
46 * <a href="http://home.pcisys.net/~melanson/codecs/mp3extensions.txt">this text</a>
47 * and the XMMS sources as references.
50 class TAGLIB_EXPORT XingHeader
54 * Parses a Xing header based on \a data. The data must be at least 16
55 * bytes long (anything longer than this is discarded).
57 XingHeader(const ByteVector &data);
60 * Destroy this XingHeader instance.
62 virtual ~XingHeader();
65 * Returns true if the data was parsed properly and if there is a valid
66 * Xing header present.
71 * Returns the total number of frames.
73 uint totalFrames() const;
76 * Returns the total size of stream in bytes.
78 uint totalSize() const;
81 * Returns the offset for the start of this Xing header, given the
82 * version and channels of the frame
84 // BIC: rename to offset()
85 static int xingHeaderOffset(TagLib::MPEG::Header::Version v,
86 TagLib::MPEG::Header::ChannelMode c);
89 XingHeader(const XingHeader &);
90 XingHeader &operator=(const XingHeader &);
92 void parse(const ByteVector &data);
94 class XingHeaderPrivate;