mirror of
https://github.com/taglib/taglib.git
synced 2025-05-27 21:20:26 -04:00
Add methods RelativeVolumeFrame::identification and RelativeVolumeFrame::setIdentification.
BUG:150481 git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@735098 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
This commit is contained in:
parent
673b77c3ac
commit
b44cee48f4
@ -162,20 +162,28 @@ void RelativeVolumeFrame::setPeakVolume(const PeakVolume &peak)
|
||||
setPeakVolume(peak, MasterVolume);
|
||||
}
|
||||
|
||||
String RelativeVolumeFrame::identification() const
|
||||
{
|
||||
return d->identification;
|
||||
}
|
||||
|
||||
void RelativeVolumeFrame::setIdentification(const String &s)
|
||||
{
|
||||
d->identification = s;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// protected members
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void RelativeVolumeFrame::parseFields(const ByteVector &data)
|
||||
{
|
||||
ByteVector delimiter = textDelimiter(String::Latin1);
|
||||
uint pos = data.find(delimiter);
|
||||
d->identification = String(data.mid(0, pos), String::Latin1);
|
||||
pos += delimiter.size();
|
||||
int pos = 0;
|
||||
d->identification = readStringField(data, String::Latin1, &pos);
|
||||
|
||||
// Each channel is at least 4 bytes.
|
||||
|
||||
while(pos <= data.size() - 4) {
|
||||
while(pos <= (int)data.size() - 4) {
|
||||
|
||||
|
||||
ChannelType type = ChannelType(data[pos]);
|
||||
|
@ -244,6 +244,18 @@ namespace TagLib {
|
||||
|
||||
#endif
|
||||
|
||||
/*!
|
||||
* Returns the identification for this frame.
|
||||
*/
|
||||
String identification() const;
|
||||
|
||||
/*!
|
||||
* Sets the identification of the frame to \a s. The string
|
||||
* is used to identify the situation and/or device where this
|
||||
* adjustment should apply.
|
||||
*/
|
||||
void setIdentification(const String &s);
|
||||
|
||||
protected:
|
||||
virtual void parseFields(const ByteVector &data);
|
||||
virtual ByteVector renderFields() const;
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <textidentificationframe.h>
|
||||
#include <attachedpictureframe.h>
|
||||
#include <generalencapsulatedobjectframe.h>
|
||||
#include <relativevolumeframe.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace TagLib;
|
||||
@ -32,6 +33,7 @@ class TestID3v2 : public CppUnit::TestFixture
|
||||
CPPUNIT_TEST(testReadStringField);
|
||||
CPPUNIT_TEST(testParseAPIC);
|
||||
CPPUNIT_TEST(testParseGEOB);
|
||||
CPPUNIT_TEST(testParseRelativeVolumeFrame);
|
||||
CPPUNIT_TEST(testBrokenFrame1);
|
||||
//CPPUNIT_TEST(testItunes24FrameSize);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
@ -112,6 +114,26 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(String("d"), f.description());
|
||||
}
|
||||
|
||||
// http://bugs.kde.org/show_bug.cgi?id=150481
|
||||
void testParseRelativeVolumeFrame()
|
||||
{
|
||||
ID3v2::RelativeVolumeFrame f(
|
||||
ByteVector("RVA2" // Frame ID
|
||||
"\x00\x00\x00\x0B" // Frame size
|
||||
"\x00\x00" // Frame flags
|
||||
"ident\x00" // Identification
|
||||
"\x02" // Type of channel
|
||||
"\x00\x0F" // Volume adjustment
|
||||
"\x08" // Bits representing peak
|
||||
"\x45", 21)); // Peak volume
|
||||
CPPUNIT_ASSERT_EQUAL(String("ident"), f.identification());
|
||||
CPPUNIT_ASSERT_EQUAL(15.0f / 512.0f,
|
||||
f.volumeAdjustment(ID3v2::RelativeVolumeFrame::FrontRight));
|
||||
CPPUNIT_ASSERT_EQUAL((uchar)8,
|
||||
f.peakVolume(ID3v2::RelativeVolumeFrame::FrontRight).bitsRepresentingPeak);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("\x45"),
|
||||
f.peakVolume(ID3v2::RelativeVolumeFrame::FrontRight).peakVolume);
|
||||
}
|
||||
|
||||
/*void testItunes24FrameSize()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user