From cc41e87119256cdb1e5afc455c338d6e8268d772 Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 14 Jan 2026 21:23:45 +0100 Subject: [PATCH] Fixed wav/aiff pcm support in ffmpeg parser --- src/libs/audio/impl/ffmpeg/AudioFile.cpp | 35 +++++++++++++++++++- src/libs/audio/impl/ffmpeg/Utils.cpp | 3 +- src/libs/audio/impl/taglib/AudioFileInfo.cpp | 2 ++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/libs/audio/impl/ffmpeg/AudioFile.cpp b/src/libs/audio/impl/ffmpeg/AudioFile.cpp index 83de989e..22f64749 100644 --- a/src/libs/audio/impl/ffmpeg/AudioFile.cpp +++ b/src/libs/audio/impl/ffmpeg/AudioFile.cpp @@ -81,7 +81,7 @@ namespace lms::audio::ffmpeg std::optional avdemuxerToContainerType(std::string_view name) { - if (name == "aiff") + if (name == "aiff" || name == "aifc" || name == "aif") return core::media::Container::AIFF; if (name == "ape") return core::media::Container::APE; @@ -142,6 +142,39 @@ namespace lms::audio::ffmpeg return core::media::Codec::MPC8; case AV_CODEC_ID_OPUS: return core::media::Codec::Opus; + case AV_CODEC_ID_PCM_S16LE: + case AV_CODEC_ID_PCM_S16BE: + case AV_CODEC_ID_PCM_U16LE: + case AV_CODEC_ID_PCM_U16BE: + case AV_CODEC_ID_PCM_S8: + case AV_CODEC_ID_PCM_U8: + case AV_CODEC_ID_PCM_S32LE: + case AV_CODEC_ID_PCM_S32BE: + case AV_CODEC_ID_PCM_U32LE: + case AV_CODEC_ID_PCM_U32BE: + case AV_CODEC_ID_PCM_S24LE: + case AV_CODEC_ID_PCM_S24BE: + case AV_CODEC_ID_PCM_U24LE: + case AV_CODEC_ID_PCM_U24BE: + case AV_CODEC_ID_PCM_S16LE_PLANAR: + case AV_CODEC_ID_PCM_F32BE: + case AV_CODEC_ID_PCM_F32LE: + case AV_CODEC_ID_PCM_F64BE: + case AV_CODEC_ID_PCM_F64LE: + case AV_CODEC_ID_PCM_S8_PLANAR: + case AV_CODEC_ID_PCM_S24LE_PLANAR: + case AV_CODEC_ID_PCM_S32LE_PLANAR: + case AV_CODEC_ID_PCM_S16BE_PLANAR: + case AV_CODEC_ID_PCM_S64LE: + case AV_CODEC_ID_PCM_S64BE: + case AV_CODEC_ID_PCM_F16LE: + case AV_CODEC_ID_PCM_F24LE: + case AV_CODEC_ID_PCM_MULAW: + case AV_CODEC_ID_PCM_ALAW: + case AV_CODEC_ID_ADPCM_G726: + case AV_CODEC_ID_ADPCM_G722: + case AV_CODEC_ID_ADPCM_G726LE: + return core::media::Codec::PCM; case AV_CODEC_ID_SHORTEN: return core::media::Codec::Shorten; case AV_CODEC_ID_VORBIS: diff --git a/src/libs/audio/impl/ffmpeg/Utils.cpp b/src/libs/audio/impl/ffmpeg/Utils.cpp index a3ab243c..0dab5030 100644 --- a/src/libs/audio/impl/ffmpeg/Utils.cpp +++ b/src/libs/audio/impl/ffmpeg/Utils.cpp @@ -24,10 +24,11 @@ namespace lms::audio::ffmpeg::utils std::span getSupportedExtensions() { // TODO: list demuxers to retrieve supported formats - static const std::array fileExtensions{ + static const std::array fileExtensions{ ".aac", ".alac", ".aif", + ".aifc", ".aiff", ".ape", ".dsf", diff --git a/src/libs/audio/impl/taglib/AudioFileInfo.cpp b/src/libs/audio/impl/taglib/AudioFileInfo.cpp index b0251481..3b860e31 100644 --- a/src/libs/audio/impl/taglib/AudioFileInfo.cpp +++ b/src/libs/audio/impl/taglib/AudioFileInfo.cpp @@ -212,12 +212,14 @@ namespace lms::audio::taglib } else if (const auto* aiffFile{ dynamic_cast(&file) }) { + // We don't check for potential Aiff-C format here, we considerer it PCM for now audioProperties.container = core::media::Container::AIFF; audioProperties.codec = core::media::Codec::PCM; audioProperties.bitsPerSample = aiffFile->audioProperties()->bitsPerSample(); } else if (const auto* wavFile{ dynamic_cast(&file) }) { + // We don't check for format here, we considerer it PCM for now audioProperties.container = core::media::Container::WAV; audioProperties.codec = core::media::Codec::PCM; audioProperties.bitsPerSample = wavFile->audioProperties()->bitsPerSample();