diff --git a/src/easymode.cpp b/src/easymode.cpp index 44c90fc..f5d3c83 100644 --- a/src/easymode.cpp +++ b/src/easymode.cpp @@ -331,10 +331,11 @@ static Config configs[] = { .skip_mp4 = false, .preserve_mtimes = false, .dual_mono = false - }, + } // DSF config - { +#ifdef HAS_DSF + ,{ .tag_mode = 'i', .skip_existing = false, .target_loudness = RG_TARGET_LOUDNESS, @@ -353,6 +354,7 @@ static Config configs[] = { .preserve_mtimes = false, .dual_mono = false } +#endif // Matroska config #ifdef HAS_MATROSKA @@ -526,7 +528,9 @@ static FileType determine_section_type(const std::string §ion) {"APE", FileType::APE}, {"TAK", FileType::TAK}, {"Musepack", FileType::MPC}, +#ifdef HAS_DSF {"DSF", FileType::DSF}, +#endif #ifdef HAS_MATROSKA {"Matroska", FileType::MATROSKA}, {"WebM", FileType::WEBM} diff --git a/src/rsgain.cpp b/src/rsgain.cpp index 695c619..f8942b6 100644 --- a/src/rsgain.cpp +++ b/src/rsgain.cpp @@ -411,13 +411,17 @@ static void help_main() { rsgain::print("{} {} supports writing tags to the following file types:\n", PROJECT_NAME, PROJECT_VERSION); rsgain::print(" FLAC (.flac), Ogg (.ogg, .oga, .spx), Opus (.opus), MP2 (.mp2), MP3 (.mp3),\n"); rsgain::print(" MP4 (.mp4, .m4a), WMA (.wma), WavPack (.wv), APE (.ape), WAV (.wav),\n"); - rsgain::print(" WAV (.wav), DSF (.dsf), TAK (.tak), "); + rsgain::print(" WAV (.wav), TAK (.tak), "); rsgain::print( +#ifdef HAS_DSF + "DSF (.dsf), " +#endif #ifdef HAS_MATROSKA "Matroska (.mka, .mkv), WebM (.webm),\n " #endif - "and AIFF (.aiff, .aif, .snd).\n"); + "and AIFF (.aiff, .aif, .snd).\n" + ); rsgain::print("\n"); rsgain::print(COLOR_RED "Options:\n" COLOR_OFF); diff --git a/src/rsgain.hpp b/src/rsgain.hpp index 0a6edf3..25879eb 100644 --- a/src/rsgain.hpp +++ b/src/rsgain.hpp @@ -1,6 +1,12 @@ #pragma once #include +// Taglib added DSF support in 2.0, but the TAGLIB_WITH_DSF define was not +// added untile 2.1. Check both ways. TAGLIB_MAJOR_VERSION can be dropped +// when taglib >= 2.1 is required. +#if (defined(TAGLIB_WITH_DSF) && TAGLIB_WITH_DSF == 1) || TAGLIB_MAJOR_VERSION > 1 +#define HAS_DSF +#endif #if defined(TAGLIB_WITH_MATROSKA) && TAGLIB_WITH_MATROSKA == 1 #define HAS_MATROSKA #endif diff --git a/src/scan.cpp b/src/scan.cpp index 357920b..bebf615 100644 --- a/src/scan.cpp +++ b/src/scan.cpp @@ -141,7 +141,9 @@ static FileType determine_filetype(const std::string &extension) {".ape", FileType::APE}, {".tak", FileType::TAK}, {".mpc", FileType::MPC}, +#ifdef HAS_DSF {".dsf", FileType::DSF}, +#endif #ifdef HAS_MATROSKA {".mka", FileType::MATROSKA}, {".mkv", FileType::MATROSKA}, diff --git a/src/scan.hpp b/src/scan.hpp index 1e97b58..0bc4809 100644 --- a/src/scan.hpp +++ b/src/scan.hpp @@ -29,7 +29,9 @@ enum class FileType { APE, TAK, MPC, +#ifdef HAS_DSF DSF, +#endif #ifdef HAS_MATROSKA MATROSKA, WEBM diff --git a/src/tag.cpp b/src/tag.cpp index 652592b..a2813db 100644 --- a/src/tag.cpp +++ b/src/tag.cpp @@ -54,7 +54,6 @@ #include #include #include -#include #include #define CRCPP_USE_CPP11 @@ -65,6 +64,10 @@ #include "tag.hpp" #include "output.hpp" +#ifdef HAS_DSF +#include +#endif + #ifdef HAS_MATROSKA #include #include @@ -268,9 +271,11 @@ bool tag_track(ScanJob::Track &track, const Config &config) ret = tag_apev2(track, config); break; +#ifdef HAS_DSF case FileType::DSF: ret = tag_riff(track, config); break; +#endif #ifdef HAS_MATROSKA case FileType::MATROSKA: @@ -328,8 +333,10 @@ bool tag_exists(const ScanJob::Track &track) case FileType::MPC: return tag_exists_ape(track); +#ifdef HAS_DSF case FileType::DSF: return tag_exists_id3(track); +#endif #ifdef HAS_MATROSKA case FileType::MATROSKA: @@ -348,7 +355,11 @@ static bool tag_exists_id3(const ScanJob::Track &track) { const TagLib::ID3v2::Tag *tag = nullptr; T file(track.path.string().c_str(), false); - if constexpr (std::is_same_v || std::is_same_v) + if constexpr (std::is_same_v +#ifdef HAS_DSF + || std::is_same_v +#endif + ) tag = file.tag(); else tag = file.ID3v2Tag(); @@ -590,7 +601,11 @@ static bool tag_riff(ScanJob::Track &track, const Config &config) TagLib::ID3v2::Tag *tag = nullptr; if constexpr (std::is_same_v) tag = file.ID3v2Tag(); - else if constexpr (std::is_same_v || std::is_same_v) + else if constexpr (std::is_same_v +#ifdef HAS_DSF + || std::is_same_v +#endif + ) tag = file.tag(); if (!tag) return false; @@ -610,7 +625,11 @@ static bool tag_riff(ScanJob::Track &track, const Config &config) id3v2version == 3 ? TagLib::ID3v2::Version::v3 : TagLib::ID3v2::Version::v4 ); #endif - else if constexpr (std::is_same_v || std::is_same_v) + else if constexpr (std::is_same_v +#ifdef HAS_DSF + || std::is_same_v +#endif + ) return file.save(); }