Repository navigation
Releases: gmrdad82/pito-codecs
Releases · gmrdad82/pito-codecs
Release list
v1.4.2
Fixed
- H.264 encodes on AMD and other Mesa graphics cards no longer hang at 59.94 fps and similar rates (4K among the sizes hit): the stream's header leaves the frame rate to the container, which Mesa's header reader handles.
v1.4.1
Changed
- Listing an MKV's keyframes reads its Cues instead of the whole file, with the same list: a 4.2 GB file on a network share answers in about half a second instead of 35 s. Files without complete Cues are still read in full.
v1.4.0
Added
- The README shows the PITO MD wordmark at its Licence section.
Changed
- An MKV or WebM file opens for video from its headers and Cues instead of reading every cluster: a 4.4 GB file on a network share shows its first frame in about 110 ms, reading 6.3 MB, and callers opening the same file at once share one read.
- Media times count from the file's start, and
Probecarries that start, so a stream that starts late lines up with the others.
Fixed
- VP9 sources export on the GPU through VA-API with or without an overlay; files whose frames keep several references used to fail with "no free VA-API surface for VP9".
- The
ac3feature builds withouthevc,vp9,gif,webporopus.
v1.3.0
Added
- AC-3 and E-AC-3 sound in MKV and MP4 decodes natively, ported from oxideav-ac3.
- MP3, MP2 and MP1 sound in MKV, MP4 and MOV decodes natively, ported from minimp3.
- VP9 sources export to VP9 in MP4 with smart cuts: the middles are copied and only the frames before each piece's first keyframe are encoded.
pcod framesturns a folder of PNG frames and an optional WAV into an H.264 and AAC MP4 with faststart, tagged BT.709.- PNG decode, ported from zune-png, and a WAV reader.
- On VA-API with Mesa, an export with an overlay stays on the GPU: decoded, overlaid by a video-processing blend and encoded without a copy to system memory.
- Every Release carries a docs bundle for the PITO MD docs site, with guides and a generated command reference.
Changed
- The brand now reads PITO MD.
- A caption or watermark layer costs what its painted area costs: about 1 ms per change at 1080p instead of 12 ms or more, with the same output.
- Exports decode on the GPU whenever they encode on the GPU, smart-cut edges included.
- VA-API frame readback waits until a frame is no longer a reference, so it no longer holds up decoding.
- The README shows a section, a chart and a picture per feature.
CodecgainsMp3,Ac3andEac3, andCodecConfiggainsVp9, so code that matches them exhaustively needs new arms.
Fixed
export_framesstops afterCanvas.framesframes instead of running until the frame callback ends.
v1.2.1
Fixed
- An audio range or stream from an MKV PCM track starts on the right sample: a block whose millisecond timestamp rounds to the start could make the seek land after it and shift the range by up to one block.
v1.2.0
Exports from the app's own frames at any size, a public blend without copies, export progress that follows real work, GPU stills about 3x faster, and the audit's second hardening wave.
Added
export_frameswrites caller-made frames at their own size and frame rate to MP4, with the same GPU-first H.264 routing asexportand premixed AAC sample-exact against the video.Blenderis public: kept across frames with the sameArc<Rgba>overlay, it blends without copying it.
Changed
- Export progress counts copied frames as they're written and encoded frames as they're encoded, then the final file pass, so it rises steadily to 1.0.
- GPU keyframe stills read the decoded VA-API picture directly instead of through the streaming staging path: time to first frame on the GPU about 3x faster (10.5 to 3.6 ms at 1440p in a same-run comparison).
- HEVC pictures above level 6.2's luma size (8192x4352) are refused, and VA-API builds only the tile boundaries it sends.
Fixed
- MKV resync never rescans bytes it has scanned, so a damaged file can't make a seek take quadratic time; warnings are capped.
- MP4 sample tables are bounded by their chunk table and the file's bytes across tracks.
packeton the MP4 and MKV readers looks samples up without indexing; H.264 slice-group maps are capped by the picture size; EBML floats of an odd size are ignored.
v1.1.1
Hardening for files from anywhere: malformed headers are refused instead of crashing or allocating without bound, and every parser is fuzzed on CI.
Added
media::Pcm, the PCM sample converter the readers use.- Fuzzing on GitHub CI for the MP4 and MKV readers, probe, the H.264, HEVC and VP9 decoders, AAC, Opus and PCM: a short run on every push and a longer one nightly.
Fixed
- H.264 crop offsets are checked without wrapping, so a picture is never sliced outside its planes; the HEVC conformance window always stays inside the picture.
- An indexed MKV open keeps at most 2^26 samples per track and no more samples than half the file's bytes; laced frames need at least one byte each.
- Fragmented MP4 runs of empty samples are bounded.
v1.1.0
One home for each shared public type. Every old path still compiles, marked deprecated.
Added
media::length_prefixed_to_annexb,media::threadsandmp4::AvcConfig::parameter_sets_annexb, whichpcodnow uses instead of its own copies.
Changed
Rgba,RateandBitstreameach live once inmedia.filter::Rgba,webp::Rgba,h264::Rate,gpu::Rate,h264::Bitstreamandgpu::Bitstreamare deprecated aliases of them, so existing code keeps compiling and values are interchangeable.media::Rateandmedia::BitstreamderiveHash, andmedia::Rgbahasstride().
v1.0.5
Recordings of 100 GB and more: memory that doesn't grow with the file, fast probes with or without Cues, and exports that use about a quarter of the memory.
Added
audio_mix_streamstreams the mix of every audio track, with the same rules asaudio_mix.
Changed
probeof an MKV without Cues reads its head and tail: milliseconds instead of a pass over the whole file.Probe.framesisNonethere too;frame_countgives the count.keyframesandframe_countread block headers in one sequential pass with bounded memory, and seeks in a Cue-less MKV bisect its clusters.- The full MKV index the media front builds holds video blocks only, about half the memory.
- Exports write each re-encoded edge as it finishes, and a track mix streams in one-second steps, so a long export's peak memory stays near 0.2 GB.
- Audio reads use large sequential windows, at disk speed.
Fixed
- An exported MP4's mvhd, tkhd, mdhd and edit-list durations reach the last frame's end; they could be two frames short.
- Every feature builds on its own.
v1.0.4
Exports of MKV recordings smart-cut, every join is exact, and probing a large MKV reads only its head.
Added
frame_countgives a file's exact frame count on demand.Exported.reasonssays why a piece or a whole export was re-encoded instead of copied.
Changed
- MKV sources smart-cut into MP4: the stream between cuts is copied, and only the frames around each cut are re-encoded.
probeof an MKV with Cues reads its head, Cues, first blocks and last cluster instead of every block: a few milliseconds whatever the file size.Probe.framesisNonethere;frame_countgives the exact count.- VA-API H.264 and HEVC refuse pictures below 352x240, which then run on the CPU: smaller ones faulted AMD's video engine.
Fixed
- The ffmpeg route's join gives every part its exact duration, so a long edit can't drift; copied MKV parts start on the right frame, tiny parts open, and the audio mix trims to exact sample counts.
- A track mix ends on the video's last sample instead of up to one AAC frame past it, and reads MKV audio without ffmpeg.