Skip to content

Commit f4aec4d

Browse files
authored
Merge pull request #13218 from daschuer/gh13205
Fix reading metadata for some file extensions
2 parents a09448e + 71aba03 commit f4aec4d

27 files changed

Lines changed: 183 additions & 110 deletions

src/sources/metadatasourcetaglib.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ MetadataSourceTagLib::importTrackMetadataAndCoverImage(
111111
// is read and data in subsequent tags is ignored.
112112

113113
switch (m_fileType) {
114-
case taglib::FileType::MP3: {
114+
case taglib::FileType::MPEG: {
115115
TagLib::MPEG::File file(TAGLIB_FILENAME_FROM_QSTRING(m_fileName));
116116
if (!taglib::readAudioPropertiesFromFile(pTrackMetadata, file)) {
117117
break;
@@ -198,7 +198,7 @@ MetadataSourceTagLib::importTrackMetadataAndCoverImage(
198198
}
199199
break;
200200
}
201-
case taglib::FileType::OGG: {
201+
case taglib::FileType::OggVorbis: {
202202
TagLib::Ogg::Vorbis::File file(TAGLIB_FILENAME_FROM_QSTRING(m_fileName));
203203
if (!taglib::readAudioPropertiesFromFile(pTrackMetadata, file)) {
204204
break;
@@ -207,14 +207,14 @@ MetadataSourceTagLib::importTrackMetadataAndCoverImage(
207207
if (pTag) {
208208
taglib::xiph::importTrackMetadataFromTag(pTrackMetadata,
209209
*pTag,
210-
taglib::FileType::OGG,
210+
taglib::FileType::OggVorbis,
211211
resetMissingTagMetadata);
212212
taglib::xiph::importCoverImageFromTag(pCoverImage, *pTag);
213213
return afterImport(ImportResult::Succeeded);
214214
}
215215
break;
216216
}
217-
case taglib::FileType::OPUS: {
217+
case taglib::FileType::Opus: {
218218
TagLib::Ogg::Opus::File file(TAGLIB_FILENAME_FROM_QSTRING(m_fileName));
219219
if (!taglib::readAudioPropertiesFromFile(pTrackMetadata, file)) {
220220
break;
@@ -223,14 +223,14 @@ MetadataSourceTagLib::importTrackMetadataAndCoverImage(
223223
if (pTag) {
224224
taglib::xiph::importTrackMetadataFromTag(pTrackMetadata,
225225
*pTag,
226-
taglib::FileType::OPUS,
226+
taglib::FileType::Opus,
227227
resetMissingTagMetadata);
228228
taglib::xiph::importCoverImageFromTag(pCoverImage, *pTag);
229229
return afterImport(ImportResult::Succeeded);
230230
}
231231
break;
232232
}
233-
case taglib::FileType::WV: {
233+
case taglib::FileType::WavPack: {
234234
TagLib::WavPack::File file(TAGLIB_FILENAME_FROM_QSTRING(m_fileName));
235235
if (!taglib::readAudioPropertiesFromFile(pTrackMetadata, file)) {
236236
break;
@@ -474,7 +474,7 @@ class OggTagSaver : public TagSaver {
474474
#else
475475
return pFile->isOpen() &&
476476
taglib::xiph::exportTrackMetadataIntoTag(
477-
pFile->tag(), trackMetadata, taglib::FileType::OGG);
477+
pFile->tag(), trackMetadata, taglib::FileType::OggVorbis);
478478
#endif
479479
}
480480

@@ -503,7 +503,7 @@ class OpusTagSaver : public TagSaver {
503503
const TrackMetadata& trackMetadata) {
504504
return pFile->isOpen() &&
505505
taglib::xiph::exportTrackMetadataIntoTag(
506-
pFile->tag(), trackMetadata, taglib::FileType::OPUS);
506+
pFile->tag(), trackMetadata, taglib::FileType::Opus);
507507
}
508508

509509
TagLib::Ogg::Opus::File m_file;
@@ -636,7 +636,7 @@ MetadataSourceTagLib::exportTrackMetadata(
636636

637637
std::unique_ptr<TagSaver> pTagSaver;
638638
switch (m_fileType) {
639-
case taglib::FileType::MP3: {
639+
case taglib::FileType::MPEG: {
640640
pTagSaver = std::make_unique<MpegTagSaver>(safelyWritableFile.fileName(), trackMetadata);
641641
break;
642642
}
@@ -648,15 +648,15 @@ MetadataSourceTagLib::exportTrackMetadata(
648648
pTagSaver = std::make_unique<FlacTagSaver>(safelyWritableFile.fileName(), trackMetadata);
649649
break;
650650
}
651-
case taglib::FileType::OGG: {
651+
case taglib::FileType::OggVorbis: {
652652
pTagSaver = std::make_unique<OggTagSaver>(safelyWritableFile.fileName(), trackMetadata);
653653
break;
654654
}
655-
case taglib::FileType::OPUS: {
655+
case taglib::FileType::Opus: {
656656
pTagSaver = std::make_unique<OpusTagSaver>(safelyWritableFile.fileName(), trackMetadata);
657657
break;
658658
}
659-
case taglib::FileType::WV: {
659+
case taglib::FileType::WavPack: {
660660
pTagSaver = std::make_unique<WavPackTagSaver>(safelyWritableFile.fileName(), trackMetadata);
661661
break;
662662
}

src/sources/metadatasourcetaglib.h

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,11 @@ namespace mixxx {
77
// Universal default implementation of IMetadataSource using TagLib.
88
class MetadataSourceTagLib : public MetadataSource {
99
public:
10-
explicit MetadataSourceTagLib(
11-
const QString& fileName)
12-
: m_fileName(fileName),
13-
m_fileType(taglib::getFileTypeFromFileName(fileName)) {
14-
}
1510
MetadataSourceTagLib(
1611
const QString& fileName,
17-
taglib::FileType fileType)
12+
const QString& fileType)
1813
: m_fileName(fileName),
19-
m_fileType(fileType) {
14+
m_fileType(taglib::stringToEnumFileType(fileType)) {
2015
}
2116

2217
std::pair<ImportResult, QDateTime> importTrackMetadataAndCoverImage(

src/sources/soundsource.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ QString SoundSource::getTypeFromFile(const QFileInfo& fileInfo) {
8383

8484
SoundSource::SoundSource(const QUrl& url, const QString& type)
8585
: AudioSource(validateLocalFileUrl(url)),
86-
MetadataSourceTagLib(getLocalFileName()),
86+
MetadataSourceTagLib(getLocalFileName(), type),
8787
m_type(type) {
8888
}
8989

src/sources/soundsourceffmpeg.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -385,12 +385,12 @@ QStringList SoundSourceProviderFFmpeg::getSupportedFileTypes() const {
385385
list.append("mp4");
386386
continue;
387387
} else if (!strcmp(pavInputFormat->name, "mov,mp4,m4a,3gp,3g2,mj2")) {
388-
list.append("mov");
388+
list.append("mov"); // QuickTime File Format video/quicktime
389389
list.append("mp4");
390390
list.append("m4a");
391-
list.append("3gp");
392-
list.append("3g2");
393-
list.append("mj2");
391+
list.append("3gp"); // 3GPP file format audio/3gpp
392+
list.append("3g2"); // 3GPP2 file format audio/3gpp2
393+
list.append("mj2"); // Motion JPEG 2000 video/mj2
394394
continue;
395395
} else if (!strcmp(pavInputFormat->name, "opus") ||
396396
!strcmp(pavInputFormat->name, "libopus")) {
@@ -419,30 +419,30 @@ QStringList SoundSourceProviderFFmpeg::getSupportedFileTypes() const {
419419
continue;
420420
} else if (!strcmp(pavInputFormat->name, "wma") ||
421421
!strcmp(pavInputFormat->name, "xwma")) {
422-
list.append("wma");
422+
list.append("wma"); // Windows Media Audio audio/x-ms-wma
423423
continue;
424424
*/
425425
///////////////////////////////////////////////////////////
426426
// Untested codecs
427427
///////////////////////////////////////////////////////////
428428
/*
429429
} else if (!strcmp(pavInputFormat->name, "ac3")) {
430-
list.append("ac3");
430+
list.append("ac3"); // AC-3 Compressed Audio (Dolby Digital), Revision A audio/ac3
431431
continue;
432432
} else if (!strcmp(pavInputFormat->name, "caf")) {
433-
list.append("caf");
433+
list.append("caf"); // Apple Lossless
434434
continue;
435435
} else if (!strcmp(pavInputFormat->name, "mpc")) {
436-
list.append("mpc");
436+
list.append("mpc"); // Musepack encoded audio audio/musepack
437437
continue;
438438
} else if (!strcmp(pavInputFormat->name, "mpeg")) {
439439
list.append("mpeg");
440440
continue;
441441
} else if (!strcmp(pavInputFormat->name, "tak")) {
442-
list.append("tak");
442+
list.append("tak"); // Tom's lossless Audio Kompressor audio/x-tak
443443
continue;
444444
} else if (!strcmp(pavInputFormat->name, "tta")) {
445-
list.append("tta");
445+
list.append("tta"); // True Audio, version 2
446446
continue;
447447
*/
448448
}

src/sources/soundsourcesndfile.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const QStringList kSupportedFileTypes = {
1616
// ALAC/CAF has been added in version 1.0.26
1717
// NOTE(uklotzde, 2015-05-26): Unfortunately ALAC in M4A containers
1818
// is still not supported https://github.com/mixxxdj/mixxx/pull/904#issuecomment-221928362
19-
QStringLiteral("caf"),
19+
QStringLiteral("caf"), // Core Audio Format / Apple Lossless
2020
QStringLiteral("flac"),
2121
QStringLiteral("ogg"),
2222
QStringLiteral("wav"),

src/test/seratobeatgridtest.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,11 @@ TEST_F(SeratoBeatGridTest, ParseBeatGridDataMP3) {
8888
parseBeatGridDataInDirectory(
8989
QDir(MixxxTest::getOrInitTestDir().filePath(
9090
QStringLiteral("serato/data/mp3/beatgrid"))),
91-
mixxx::taglib::FileType::MP3);
91+
mixxx::taglib::FileType::MPEG);
9292
}
9393

9494
TEST_F(SeratoBeatGridTest, ParseEmptyDataMP3) {
95-
parseEmptyBeatGridData(mixxx::taglib::FileType::MP3);
95+
parseEmptyBeatGridData(mixxx::taglib::FileType::MPEG);
9696
}
9797

9898
TEST_F(SeratoBeatGridTest, ParseBeatGridDataMP4) {

src/test/seratomarkers2test.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ TEST_F(SeratoMarkers2Test, ParseMarkers2DataMP3) {
429429
parseMarkers2DataInDirectory(
430430
QDir(MixxxTest::getOrInitTestDir().filePath(
431431
QStringLiteral("serato/data/mp3/markers2"))),
432-
mixxx::taglib::FileType::MP3);
432+
mixxx::taglib::FileType::MPEG);
433433
}
434434

435435
TEST_F(SeratoMarkers2Test, ParseMarkers2DataMP4) {
@@ -450,11 +450,11 @@ TEST_F(SeratoMarkers2Test, ParseMarkers2DataOGG) {
450450
parseMarkers2DataInDirectory(
451451
QDir(MixxxTest::getOrInitTestDir().filePath(
452452
QStringLiteral("serato/data/ogg/markers2"))),
453-
mixxx::taglib::FileType::OGG);
453+
mixxx::taglib::FileType::OggVorbis);
454454
}
455455

456456
TEST_F(SeratoMarkers2Test, ParseEmptyDataMP3) {
457-
parseEmptyMarkers2Data(mixxx::taglib::FileType::MP3);
457+
parseEmptyMarkers2Data(mixxx::taglib::FileType::MPEG);
458458
}
459459

460460
TEST_F(SeratoMarkers2Test, ParseEmptyDataMP4) {

src/test/seratomarkerstest.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ TEST_F(SeratoMarkersTest, ParseMarkersDataMP3) {
181181
parseMarkersDataInDirectory(
182182
QDir(MixxxTest::getOrInitTestDir().filePath(
183183
QStringLiteral("serato/data/mp3/markers_"))),
184-
mixxx::taglib::FileType::MP3);
184+
mixxx::taglib::FileType::MPEG);
185185
}
186186

187187
TEST_F(SeratoMarkersTest, ParseMarkersDataMP4) {
@@ -192,7 +192,7 @@ TEST_F(SeratoMarkersTest, ParseMarkersDataMP4) {
192192
}
193193

194194
TEST_F(SeratoMarkersTest, ParseEmptyDataMP3) {
195-
parseEmptyMarkersData(mixxx::taglib::FileType::MP3);
195+
parseEmptyMarkersData(mixxx::taglib::FileType::MPEG);
196196
}
197197

198198
TEST_F(SeratoMarkersTest, ParseEmptyDataMP4) {

src/test/seratotagstest.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ TEST_F(SeratoTagsTest, CueColorConversionRoundtrip) {
271271
}
272272

273273
TEST_F(SeratoTagsTest, MarkersParseDumpRoundtrip) {
274-
const auto filetype = mixxx::taglib::FileType::MP3;
274+
const auto filetype = mixxx::taglib::FileType::MPEG;
275275
QDir dir(MixxxTest::getOrInitTestDir().filePath(QStringLiteral("/serato/data/mp3/markers_/")));
276276
dir.setFilter(QDir::Files);
277277
dir.setNameFilters(QStringList() << "*.octet-stream");
@@ -306,7 +306,7 @@ TEST_F(SeratoTagsTest, MarkersParseDumpRoundtrip) {
306306
}
307307

308308
TEST_F(SeratoTagsTest, Markers2RoundTrip) {
309-
const auto filetype = mixxx::taglib::FileType::MP3;
309+
const auto filetype = mixxx::taglib::FileType::MPEG;
310310
QDir dir(MixxxTest::getOrInitTestDir().filePath(QStringLiteral("serato/data/mp3/markers2/")));
311311
dir.setFilter(QDir::Files);
312312
dir.setNameFilters(QStringList() << "*.octet-stream");

src/test/soundproxy_test.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "sources/soundsourceproxy.h"
88
#include "test/mixxxtest.h"
99
#include "test/soundsourceproviderregistration.h"
10+
#include "track/taglib/trackmetadata_file.h"
1011
#include "track/track.h"
1112
#include "track/trackmetadata.h"
1213
#include "util/samplebuffer.h"
@@ -1086,3 +1087,15 @@ TEST_F(SoundSourceProxyTest, freeModeGarbage) {
10861087
break;
10871088
}
10881089
}
1090+
1091+
TEST_F(SoundSourceProxyTest, taglibStringToEnumFileType) {
1092+
const QStringList fileTypes = SoundSourceProxy::getSupportedFileTypes();
1093+
for (const auto& fileType : fileTypes) {
1094+
qDebug() << fileType;
1095+
if (fileType != "okt" && // Oktalyzer
1096+
fileType != "stm") { // "Scream Tracker";
1097+
ASSERT_NE(mixxx::taglib::stringToEnumFileType(fileType),
1098+
mixxx::taglib::FileType::Unknown);
1099+
}
1100+
}
1101+
}

0 commit comments

Comments
 (0)