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.
This commit is contained in:
Zaggy1024 2025-12-15 17:04:55 -06:00 committed by Gregory Bertilson
parent fa3cda8e4a
commit 7c101ab910
2 changed files with 73 additions and 0 deletions

View file

@ -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;
}

View file

@ -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;
}