Skip to content

Commit

Permalink
Added TagLib::MP4::PropertyMap::codec()
Browse files Browse the repository at this point in the history
  • Loading branch information
lalinsky committed Oct 8, 2013
1 parent 9b5869e commit 2d5abd4
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 4 deletions.
1 change: 1 addition & 0 deletions NEWS
Expand Up @@ -5,6 +5,7 @@ TagLib 1.9.1 (Oct 8, 2013)
* Fixed constructing String from ByteVector.
* Fixed compilation on MSVC with the /Zc:wchar_t- option.
* Fixed detecting of RIFF files with invalid chunk sizes.
* Added TagLib::MP4::PropertyMap::codec().

TagLib 1.9 (Oct 6, 2013)
========================
Expand Down
16 changes: 12 additions & 4 deletions taglib/mp4/mp4properties.cpp
Expand Up @@ -34,14 +34,15 @@ using namespace TagLib;
class MP4::Properties::PropertiesPrivate
{
public:
PropertiesPrivate() : length(0), bitrate(0), sampleRate(0), channels(0), bitsPerSample(0), encrypted(false) {}
PropertiesPrivate() : length(0), bitrate(0), sampleRate(0), channels(0), bitsPerSample(0), encrypted(false), codec(MP4::Properties::Unknown) {}

int length;
int bitrate;
int sampleRate;
int channels;
int bitsPerSample;
bool encrypted;
Codec codec;
};

MP4::Properties::Properties(File *file, MP4::Atoms *atoms, ReadStyle style)
Expand Down Expand Up @@ -114,6 +115,7 @@ MP4::Properties::Properties(File *file, MP4::Atoms *atoms, ReadStyle style)
file->seek(atom->offset);
data = file->readBlock(atom->length);
if(data.mid(20, 4) == "mp4a") {
d->codec = AAC;
d->channels = data.toShort(40U);
d->bitsPerSample = data.toShort(42U);
d->sampleRate = data.toUInt(46U);
Expand All @@ -135,10 +137,11 @@ MP4::Properties::Properties(File *file, MP4::Atoms *atoms, ReadStyle style)
}
else if (data.mid(20, 4) == "alac") {
if (atom->length == 88 && data.mid(56, 4) == "alac") {
d->codec = ALAC;
d->bitsPerSample = data.at(69);
d->channels = data.at(73);
d->bitrate = data.toUInt(80U) / 1000;
d->sampleRate = data.toUInt(84U);
d->channels = data.at(73);
d->bitrate = data.toUInt(80U) / 1000;
d->sampleRate = data.toUInt(84U);
}
}

Expand Down Expand Up @@ -189,3 +192,8 @@ MP4::Properties::isEncrypted() const
return d->encrypted;
}

MP4::Properties::Codec MP4::Properties::codec() const
{
return d->codec;
}

9 changes: 9 additions & 0 deletions taglib/mp4/mp4properties.h
Expand Up @@ -40,6 +40,12 @@ namespace TagLib {
class TAGLIB_EXPORT Properties : public AudioProperties
{
public:
enum Codec {
Unknown = 0,
AAC,
ALAC
};

Properties(File *file, Atoms *atoms, ReadStyle style = Average);
virtual ~Properties();

Expand All @@ -50,6 +56,9 @@ namespace TagLib {
virtual int bitsPerSample() const;
bool isEncrypted() const;

//! Audio codec used in the MP4 file
Codec codec() const;

private:
class PropertiesPrivate;
PropertiesPrivate *d;
Expand Down
2 changes: 2 additions & 0 deletions tests/test_mp4.cpp
Expand Up @@ -39,6 +39,7 @@ class TestMP4 : public CppUnit::TestFixture
CPPUNIT_ASSERT_EQUAL(2, f.audioProperties()->channels());
CPPUNIT_ASSERT_EQUAL(44100, f.audioProperties()->sampleRate());
CPPUNIT_ASSERT_EQUAL(16, ((MP4::Properties *)f.audioProperties())->bitsPerSample());
CPPUNIT_ASSERT_EQUAL(MP4::Properties::AAC, ((MP4::Properties *)f.audioProperties())->codec());
}

void testPropertiesALAC()
Expand All @@ -49,6 +50,7 @@ class TestMP4 : public CppUnit::TestFixture
CPPUNIT_ASSERT_EQUAL(2, f.audioProperties()->channels());
CPPUNIT_ASSERT_EQUAL(44100, f.audioProperties()->sampleRate());
CPPUNIT_ASSERT_EQUAL(16, ((MP4::Properties *)f.audioProperties())->bitsPerSample());
CPPUNIT_ASSERT_EQUAL(MP4::Properties::ALAC, ((MP4::Properties *)f.audioProperties())->codec());
}

void testCheckValid()
Expand Down

0 comments on commit 2d5abd4

Please sign in to comment.