From 7c101ab910585c1253434ac44d1acb39f4176c14 Mon Sep 17 00:00:00 2001 From: Zaggy1024 Date: Mon, 15 Dec 2025 17:04:55 -0600 Subject: [PATCH] LibMedia: Add WAV PCM codecs to CodecID This is a subset of FFmpeg's PCM codec IDs, limited to only the ones that are supported by its WAV encoder. --- Libraries/LibMedia/CodecID.h | 37 +++++++++++++++++++++++ Libraries/LibMedia/FFmpeg/FFmpegHelpers.h | 36 ++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/Libraries/LibMedia/CodecID.h b/Libraries/LibMedia/CodecID.h index 6a7b7c8d38..84e97501a7 100644 --- a/Libraries/LibMedia/CodecID.h +++ b/Libraries/LibMedia/CodecID.h @@ -32,6 +32,16 @@ enum class CodecID : u8 { Vorbis, Opus, FLAC, + // PCM + U8, + S16LE, + S24LE, + S32LE, + S64LE, + F32LE, + F64LE, + ALaw, + MuLaw, }; inline TrackType track_type_from_codec_id(CodecID codec) @@ -53,6 +63,15 @@ inline TrackType track_type_from_codec_id(CodecID codec) case CodecID::Vorbis: case CodecID::Opus: case CodecID::FLAC: + case CodecID::U8: + case CodecID::S16LE: + case CodecID::S24LE: + case CodecID::S32LE: + case CodecID::S64LE: + case CodecID::F32LE: + case CodecID::F64LE: + case CodecID::ALaw: + case CodecID::MuLaw: return TrackType::Audio; case CodecID::Unknown: break; @@ -95,6 +114,24 @@ constexpr StringView codec_id_to_string(CodecID codec) return "Opus"sv; case Media::CodecID::FLAC: return "FLAC"sv; + case CodecID::U8: + return "unsigned 8-bit PCM"sv; + case CodecID::S16LE: + return "signed 16-bit PCM"sv; + case CodecID::S24LE: + return "signed 24-bit PCM"sv; + case CodecID::S32LE: + return "signed 32-bit PCM"sv; + case CodecID::S64LE: + return "signed 64-bit PCM"sv; + case CodecID::F32LE: + return "32-bit float PCM"sv; + case CodecID::F64LE: + return "64-bit float PCM"sv; + case CodecID::ALaw: + return "A-law PCM"sv; + case CodecID::MuLaw: + return "μ-law PCM"sv; } return "Unknown"sv; } diff --git a/Libraries/LibMedia/FFmpeg/FFmpegHelpers.h b/Libraries/LibMedia/FFmpeg/FFmpegHelpers.h index 0de316f50e..f8e93a59fc 100644 --- a/Libraries/LibMedia/FFmpeg/FFmpegHelpers.h +++ b/Libraries/LibMedia/FFmpeg/FFmpegHelpers.h @@ -48,6 +48,24 @@ static inline AVCodecID ffmpeg_codec_id_from_media_codec_id(CodecID codec) return AV_CODEC_ID_OPUS; case CodecID::FLAC: return AV_CODEC_ID_FLAC; + case CodecID::U8: + return AV_CODEC_ID_PCM_U8; + case CodecID::S16LE: + return AV_CODEC_ID_PCM_S16LE; + case CodecID::S24LE: + return AV_CODEC_ID_PCM_S24LE; + case CodecID::S32LE: + return AV_CODEC_ID_PCM_S32LE; + case CodecID::S64LE: + return AV_CODEC_ID_PCM_S64LE; + case CodecID::F32LE: + return AV_CODEC_ID_PCM_F32LE; + case CodecID::F64LE: + return AV_CODEC_ID_PCM_F64LE; + case CodecID::ALaw: + return AV_CODEC_ID_PCM_ALAW; + case CodecID::MuLaw: + return AV_CODEC_ID_PCM_MULAW; case CodecID::Unknown: return AV_CODEC_ID_NONE; } @@ -86,6 +104,24 @@ static inline CodecID media_codec_id_from_ffmpeg_codec_id(AVCodecID codec) return CodecID::Opus; case AV_CODEC_ID_FLAC: return CodecID::FLAC; + case AV_CODEC_ID_PCM_U8: + return CodecID::U8; + case AV_CODEC_ID_PCM_S16LE: + return CodecID::S16LE; + case AV_CODEC_ID_PCM_S24LE: + return CodecID::S24LE; + case AV_CODEC_ID_PCM_S32LE: + return CodecID::S32LE; + case AV_CODEC_ID_PCM_S64LE: + return CodecID::S64LE; + case AV_CODEC_ID_PCM_F32LE: + return CodecID::F32LE; + case AV_CODEC_ID_PCM_F64LE: + return CodecID::F64LE; + case AV_CODEC_ID_PCM_ALAW: + return CodecID::ALaw; + case AV_CODEC_ID_PCM_MULAW: + return CodecID::MuLaw; default: return CodecID::Unknown; }