~ubuntu-branches/ubuntu/utopic/ardour3/utopic

« back to all changes in this revision

Viewing changes to libs/taglib/taglib/mpeg/mpegheader.h

  • Committer: Package Import Robot
  • Author(s): Felipe Sateler
  • Date: 2013-09-21 19:05:02 UTC
  • Revision ID: package-import@ubuntu.com-20130921190502-8gsftrku6jnzhd7v
Tags: upstream-3.4~dfsg
ImportĀ upstreamĀ versionĀ 3.4~dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************
 
2
    copyright            : (C) 2002 - 2008 by Scott Wheeler
 
3
    email                : wheeler@kde.org
 
4
 ***************************************************************************/
 
5
 
 
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.                     *
 
10
 *                                                                         *
 
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.                       *
 
15
 *                                                                         *
 
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  *
 
19
 *   USA                                                                   *
 
20
 *                                                                         *
 
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
 ***************************************************************************/
 
25
 
 
26
#ifndef TAGLIB_MPEGHEADER_H
 
27
#define TAGLIB_MPEGHEADER_H
 
28
 
 
29
#include "taglib_export.h"
 
30
 
 
31
namespace TagLib {
 
32
 
 
33
  class ByteVector;
 
34
 
 
35
  namespace MPEG {
 
36
 
 
37
    //! An implementation of MP3 frame headers
 
38
 
 
39
    /*!
 
40
     * This is an implementation of MPEG Layer III headers.  The API follows more
 
41
     * or less the binary format of these headers.  I've used
 
42
     * <a href="http://www.mp3-tech.org/programmer/frame_header.html">this</a>
 
43
     * document as a reference.
 
44
     */
 
45
 
 
46
    class TAGLIB_EXPORT Header
 
47
    {
 
48
    public:
 
49
      /*!
 
50
       * Parses an MPEG header based on \a data.
 
51
       */
 
52
      Header(const ByteVector &data);
 
53
 
 
54
      /*!
 
55
       * Does a shallow copy of \a h.
 
56
       */
 
57
      Header(const Header &h);
 
58
 
 
59
      /*!
 
60
       * Destroys this Header instance.
 
61
       */
 
62
      virtual ~Header();
 
63
 
 
64
      /*!
 
65
       * Returns true if the frame is at least an appropriate size and has
 
66
       * legal values.
 
67
       */
 
68
      bool isValid() const;
 
69
 
 
70
      /*!
 
71
       * The MPEG Version.
 
72
       */
 
73
      enum Version {
 
74
        //! MPEG Version 1
 
75
        Version1 = 0,
 
76
        //! MPEG Version 2
 
77
        Version2 = 1,
 
78
        //! MPEG Version 2.5
 
79
        Version2_5 = 2
 
80
      };
 
81
 
 
82
      /*!
 
83
       * Returns the MPEG Version of the header.
 
84
       */
 
85
      Version version() const;
 
86
 
 
87
      /*!
 
88
       * Returns the layer version.  This will be between the values 1-3.
 
89
       */
 
90
      int layer() const;
 
91
 
 
92
      /*!
 
93
       * Returns true if the MPEG protection bit is enabled.
 
94
       */
 
95
      bool protectionEnabled() const;
 
96
 
 
97
      /*!
 
98
       * Returns the bitrate encoded in the header.
 
99
       */
 
100
      int bitrate() const;
 
101
 
 
102
      /*!
 
103
       * Returns the sample rate in Hz.
 
104
       */
 
105
      int sampleRate() const;
 
106
 
 
107
      /*!
 
108
       * Returns true if the frame is padded.
 
109
       */
 
110
      bool isPadded() const;
 
111
 
 
112
      /*!
 
113
       * There are a few combinations or one or two channel audio that are
 
114
       * possible:
 
115
       */
 
116
      enum ChannelMode {
 
117
        //! Stereo
 
118
        Stereo        = 0,
 
119
        //! Stereo
 
120
        JointStereo   = 1,
 
121
        //! Dual Mono
 
122
        DualChannel   = 2,
 
123
        //! Mono
 
124
        SingleChannel = 3
 
125
      };
 
126
 
 
127
      /*!
 
128
       * Returns the channel mode for this frame.
 
129
       */
 
130
      ChannelMode channelMode() const;
 
131
 
 
132
      /*!
 
133
       * Returns true if the copyrighted bit is set.
 
134
       */
 
135
      bool isCopyrighted() const;
 
136
 
 
137
      /*!
 
138
       * Returns true if the "original" bit is set.
 
139
       */
 
140
      bool isOriginal() const;
 
141
 
 
142
      /*!
 
143
       * Returns the frame length.
 
144
       */
 
145
      int frameLength() const;
 
146
 
 
147
      /*!
 
148
       * Returns the number of frames per sample.
 
149
       */
 
150
      int samplesPerFrame() const;
 
151
 
 
152
      /*!
 
153
       * Makes a shallow copy of the header.
 
154
       */
 
155
      Header &operator=(const Header &h);
 
156
 
 
157
    private:
 
158
      void parse(const ByteVector &data);
 
159
 
 
160
      class HeaderPrivate;
 
161
      HeaderPrivate *d;
 
162
    };
 
163
  }
 
164
}
 
165
 
 
166
#endif