All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added MP3 embedded ID3v1 metadata reader/writer via
Mp3Id3v1Tagand integrated it into engine metadata read/write flow inStubCodecMediaEngine. - Added OGG Vorbis/Opus comment metadata reader via
OggParser.readCommentMetadata()and integrated it intoStubCodecMediaEngine.readMetadata(). - Added FLAC Vorbis comment metadata reader via
FlacParser.readVorbisCommentMetadata()and integrated it intoStubCodecMediaEngine.readMetadata(). - Added Java Sound audio transcoder
JavaSoundAudioTranscodeConverterfor JDK-only target formats (wav,aiff,au). - Added AIFF embedded text metadata read/write support (
NAME,AUTH,(c),ANNO) viaAiffParser.readTextMetadata()andAiffParser.writeTextMetadata(). - Added MP4/MOV to M4A audio-track remux route via
Mp4MovToM4aRemuxConverterin the video-to-audio conversion hub path.
- Updated audio-to-audio conversion routing in
DefaultConversionHubto use Java Sound transcoding path (while preserving explicit WAV/PCM routing). - Expanded facade regression coverage in
CodecMediaFacadeTestfor MP3 embedded metadata and OGG/FLAC metadata read paths. - Standardized metadata merge behavior in
StubCodecMediaEngine.readMetadata()to treat embedded metadata as canonical and sidecar values as fallback (putIfAbsentfor non-core keys). - Updated metadata write behavior in
StubCodecMediaEngine.writeMetadata()so embedded-capable formats (wav,mp3,aif/aiff/aifc) write in-file metadata and remove stale sidecar files. - Expanded metadata regression coverage in
CodecMediaFacadeTestand parser-level AIFF coverage inAiffParserTest.
- Confirmed metadata and conversion/facade behavior with
mvn -Dtest=CodecMediaFacadeTest test. - Confirmed AIFF embedded metadata parser and facade flows with
mvn -Dtest=AiffParserTest,CodecMediaFacadeTest test.
- Added WAV embedded metadata round-trip handling (RIFF
LIST/INFO) inWavParserand engine metadata flow inStubCodecMediaEngine. - Added internal Java sampled playback route (
java-sampled) for WAV/AIFF-family playback inStubCodecMediaEngine. - Added playback routing regression coverage in
StubCodecMediaEnginePlaybackRoutingTest.
- Replaced temporary WAV/PCM stub converter with production path via
WavPcmConverter, including realwav -> pcmdata-chunk extraction andpcm -> wavcontainer wrapping. - Updated conversion hub wiring in
DefaultConversionHubto route WAV/PCM through the renamed real converter. - Added preset-driven PCM->WAV parameter parsing in
WavPcmConverter.parsePcmWavParams()supportingsr=,ch=, andbits=. - Updated facade regression behavior in
CodecMediaFacadeTestto assert real re-encode behavior and preset-based output stream properties for WAV/PCM route. - Updated metadata behavior to use embedded WAV
LIST/INFOread/write for WAV inputs while keeping sidecar (.codecmedia.properties) persistence for non-WAV formats inStubCodecMediaEngine. - Updated playback behavior in
CodecMediaEngine.play()implementation path to prioritize internal Java sampled playback for WAV/AIFF family before desktop-open fallback.
- Added defensive bounds checks for little-endian reads in
WavPcmConverter.readLeInt()andWavPcmConverter.readLeUnsignedShort(). - Added WAV
fmtvalidation before payload extraction inWavPcmConverter.extractWavDataChunk(), rejecting non-PCM WAV payload extraction. - Hardened chunk traversal and container construction against arithmetic overflow in
WavPcmConverter.extractWavDataChunk()andWavPcmConverter.wrapPcmAsWav(). - Fixed WAV metadata flow so write/read operations no longer rely on sidecar-only behavior for WAV files, improving in-file metadata persistence consistency.
- Fixed playback routing so WAV/AIFF-family inputs no longer depend solely on desktop integration when internal sampled playback is available.
- Confirmed facade regression coverage with
mvn -Dtest=CodecMediaFacadeTest test. - Confirmed WAV metadata parser behavior with
mvn -Dtest=WavParserTest test. - Confirmed engine metadata and playback routing behavior with
mvn -Dtest=CodecMediaFacadeTest,StubCodecMediaEnginePlaybackRoutingTest test.
- Added strict PNG bit-depth validation in
PngParser.parse()to reject malformed IHDR values outside the PNG spec (1,2,4,8,16). - Added helper
PngParser.isValidBitDepth()to centralize allowed PNG bit-depth values during probe. - Added PNG color-type validation in
PngParser.parse()with helperPngParser.isValidColorType()to accept only spec-valid values (0,2,3,4,6). - Refined JPEG signature sniffing in
JpegParser.isLikelyJpeg()to require the exact 3-byte SOI/prefix check actually used by the parser. - Hardened JPEG SOF validation in
JpegParser.parse()to reject invalidbitsPerSample(only8/12) and unsupported component counts (only1/3/4). - Improved JPEG marker traversal in
JpegParser.parse()to correctly tolerate repeated0xFFfill bytes while preserving marker alignment validation. - Corrected HEIF
pixiFullBox payload parsing inHeifParser.extractPixiBitDepth()by skipping the 4-byte FullBox header before reading channel count and per-channel depths. - Documented FullBox offset semantics for
ispeextraction inHeifParser.extractIspeWidth()andHeifParser.extractIspeHeight(). - Removed non-container boxes (
mdat,skip,free) from recursive traversal candidates inHeifParser.isContainerType()to avoid unnecessary payload recursion. - Added bounds-checked big-endian integer reads in
HeifParser.readBeInt()to return codec-domain errors instead of runtime index failures on malformed inputs. - Added strict BMP
bitsPerPixelvalidation inBmpParser.parse()viaBmpParser.isValidBitsPerPixel(), allowing only spec-valid values (1,2,4,8,16,24,32). - Added defensive TIFF IFD entry-count bounds validation in
TiffParser.parse()to reject corruptentryCountvalues that exceed available bytes. - Documented WebP probe bit-depth assumption in
WebpParserwith explicit constantASSUMED_WEBP_BIT_DEPTH, applied consistently acrossVP8,VP8L, andVP8Xparsing.
- Confirmed compile stability after PNG/JPEG/HEIF/BMP/TIFF/WebP parser hardening with
mvn -q -DskipTests compile.
- Added safe top-level codec helper
ProbeResult.primaryCodec()to avoid directstreams().get(0)access for empty-stream cases. - Added no-arg
ConversionOptions.defaults()with fallback target format. - Added model/options consistency tests in
ModelOptionsConsistencyTest. - Added AVIF image transcode regression coverage in
CodecMediaFacadeTest, including runtime-safe behavior when HEIF/AVIF writers are unavailable.
- Aligned
ConversionOptions.defaults(String)with fallback behavior fornull/blank target format. - Documented default validation policy in
ValidationOptions.defaults(), including 500 MiB default size limit. - Documented nullable semantics of
PlaybackResult.message. - Extended image transcode extension routing in
ImageTranscodeConverterto recognizeavifas part of the HEIF-family conversion path. - Clarified intentional unsupported fallback behavior in
ConversionRouteResolverfornull/unknown/container/non-mapped routes. - Updated image conversion support notes in
README.mdto includeavifand document intentional unsupported container/unknown route handling. - Optimized
StubCodecMediaEngine.probe()to avoid redundant full-file reads when the probe prefix already contains the complete file. - Reworded
StubCodecMediaEngine.extractAudio()format-mismatch error message to user-facing language (removed internal "Stub" wording).
- Confirmed model/options polish via
mvn -Dtest=ModelOptionsConsistencyTest test. - Confirmed AVIF conversion-path regression with
mvn -Dtest=CodecMediaFacadeTest#convert_shouldTranscodePngToAvif test. - Confirmed facade behavior regression coverage with
mvn -Dtest=CodecMediaFacadeTest test.
- Improved MP3 duration estimation in
Mp3Parser.estimateDurationMillis()to prioritize Xing/VBRI frame-count metadata before scanned sample totals. - Excluded trailing ID3v1 tag bytes from MP3 audio scan range in
Mp3Parser, reducing bitrate drift when footer tags are present. - Added clearer non-Layer III error handling in
Mp3Parser.parse()for MPEG Layer I/II inputs. - Strengthened OGG logical-stream parsing in
OggParserwith per-stream page-sequence validation and serial-scoped metrics for multiplexed files. - Refined Vorbis bitrate-mode classification in
OggParser.detectVorbisBitrateMode()to infer from observed bitrate variation instead of coarse nominal/page-count heuristics. - Replaced broad OGG payload string scanning with structured Vorbis/Opus comment-header parsing in
OggParser, and fixed sequence tracking to uselongto avoid overflow. - Updated
WavParserto read/validateaudioFormatfromfmtand reject unsupported compressed WAV formats instead of silently computing incorrect duration. - Added RF64-aware WAV parsing in
WavParser, including unsigned chunk-size handling anddatasize sentinel (0xFFFFFFFF) resolution viads64. - Updated
FlacParserto reject reserved metadata block type127per FLAC spec. - Updated
FlacParserbitrate estimation to use encoded audio payload region after metadata blocks (instead of whole file bytes), reducing artwork/metadata inflation. - Updated
AiffParserto validate AIFCCOMMcompression type and reject unsupported compressed variants.
- Added MP3 parser regression tests for Xing-priority duration, trailing ID3v1 handling, and unsupported Layer I/II diagnostics in
Mp3ParserTest. - Added OGG parser tests for Vorbis CBR/VBR mode inference, broken page-sequence detection, and multiplexed-stream metric isolation in
OggParserTest. - Added WAV parser tests for unsupported compressed format rejection and RF64
ds64/datasentinel handling inWavParserTest. - Added FLAC parser tests for reserved block type rejection and metadata-heavy bitrate estimation behavior in
FlacParserTest. - Added explicit decode-only intent comment in
FlacCodec. - Added AIFF parser tests for supported AIFC
NONEand unsupported compression-type rejection inAiffParserTest. - Added explicit decode-only intent comment in
AiffCodec.
- Confirmed MP3 parser updates with
mvn -Dtest=Mp3ParserTest test. - Confirmed OGG parser updates with
mvn -Dtest=OggParserTest test. - Confirmed WAV parser updates with
mvn -Dtest=WavParserTest test. - Confirmed FLAC parser updates with
mvn -Dtest=FlacParserTest test. - Confirmed AIFF parser updates with
mvn -Dtest=AiffParserTest test. - Confirmed CLI argument/dispatch regression tests in
CodecMediaCliTestwithmvn test(incodecmedia-cli). - Confirmed Kotlin wrapper refactor stability with
gradlew.bat test(incodecmedia-kotlin).
- Migrated repository ownership and project references to
CodecMediaLib/codecmedia-java. - Updated SCM/issue/CI metadata in
pom.xml. - Updated organization metadata in
pom.xmltoCodecMediaLib.
- This
1.1.0release is a transition baseline and prepares for larger updates planned in the1.1.*series.
- Added richer MOV probe fields in
MovProbeInfo:videoBitrateKbps,audioBitrateKbps,bitDepth, anddisplayAspectRatio. - Added richer MP4 probe fields in
Mp4ProbeInfo: codec/audio stream details, frame rate, bitrate fields, bit depth, and display aspect ratio. - Added richer WebM probe fields in
WebmProbeInfo: per-track bitrate fields and display aspect ratio. - Added real fixture coverage in
CodecMediaFacadeTestfor probe/strict-validate using files undersrc/test/resources/example. - Added round-trip conversion test class
CodecMediaRoundTripConversionTestto validate same-extension convert->convert flows across all real example extensions (mp3,mp4,png,webm).
- Enhanced MOV parsing in
MovParserwith deeper BMFF track metadata extraction (hdlr,mdhd,stsd,btrt,stsz) and fallback bitrate estimation. - Enhanced MP4 parsing in
Mp4Parserto extract video/audio codec, sample rate, channels, frame rate, bit depth, bitrate, and aspect ratio. - Enhanced WebM parsing in
WebmParserto extract track bitrate when present and compute fallback bitrate/aspect ratio values. - Updated stream/tag mapping in
StubCodecMediaEngineso MOV/MP4/WebM probe results now expose richer stream bitrate and container tags (displayAspectRatio,bitDepth,videoBitrateKbps,audioBitrateKbps).
- Confirmed test stability after video parser improvements with
mvn test. - Confirmed real-fixture conversion regression path with
mvn -Dtest=CodecMediaRoundTripConversionTest test.
- Added OGG Opus identification/probing support alongside Vorbis in
OggParser. - Added AIFF/AIF/AIFC probing support with new parser/codec in
AiffParserandAiffCodec. - Added FLAC probing support with STREAMINFO parsing in
FlacParserandFlacCodec. - Added parser test coverage for MP3 VBR and mono channel-mode paths in
Mp3ParserTest. - Added parser test coverage for OGG Opus identification in
OggParserTest. - Added WAV parser synthetic profile tests (mono/stereo, sample-rate, bit-depth combinations) in
WavParserTest. - Added parser test coverage for AIFF probing in
AiffParserTest. - Added facade test coverage for
.m4aprobe/strict-validate flows inCodecMediaFacadeTest. - Added parser/facade test coverage for
.flacinFlacParserTestandCodecMediaFacadeTest.
- Improved probe routing in
StubCodecMediaEngineto perform lightweight prefix-based type sniffing before full-file decode, reducing unnecessary full reads for unsupported/unknown inputs. - Extended probe and strict validation routing in
StubCodecMediaEngineto include AIFF/AIF/AIFC. - Extended probe and strict validation routing in
StubCodecMediaEngineto include FLAC. - Expanded MP4 signature acceptance for M4A family brands in
Mp4Parser.isLikelyMp4(). - Updated feature notes in
README.mdto reflect OGG Vorbis/Opus probing support and prefix-sniff probe behavior.
- Added MOV parser/probe support via
MovParser. - Added WebM parser/probe support via
WebmParser. - Added MOV/WebM codec wrappers (
MovCodec,WebmCodec) and probe info records. - Added facade tests for MOV/WebM probe and strict validation in
CodecMediaFacadeTest.
- Extended probing and strict validation routing in
StubCodecMediaEngineto cover MOV and WebM. - Updated project metadata URLs and branding references in
pom.xmlandREADME.md.
- Fixed EBML element decoding in
WebmParserso multi-byte element IDs (includingDefaultDuration) are parsed with correct ID/size boundaries. - Fixed MOV frame-rate extraction in
MovParserto usemdhdtrack timescale when interpretingsttssample delta.
- Initial public release with probing, validation, metadata sidecar persistence, extraction workflow, playback simulation, and conversion routing.