Skip to content

Releases: gmrdad82/pito-codecs

v1.4.2

Choose a tag to compare

@github-actions github-actions released this 15 Oct 03:52
v1.4.2
fb2655e

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

Choose a tag to compare

@github-actions github-actions released this 15 Oct 02:35
v1.4.1
671d83e

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

Choose a tag to compare

@github-actions github-actions released this 15 Oct 00:39
v1.4.0
5ad5b4d

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 Probe carries 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 ac3 feature builds without hevc, vp9, gif, webp or opus.

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 20:40
v1.3.0
2a365ce

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 frames turns 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.
  • Codec gains Mp3, Ac3 and Eac3, and CodecConfig gains Vp9, so code that matches them exhaustively needs new arms.

Fixed

  • export_frames stops after Canvas.frames frames instead of running until the frame callback ends.

v1.2.1

Choose a tag to compare

@github-actions github-actions released this 12 Oct 19:00
v1.2.1
c8e2c8a

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

Choose a tag to compare

@github-actions github-actions released this 12 Oct 17:15
v1.2.0
3ae8747

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_frames writes caller-made frames at their own size and frame rate to MP4, with the same GPU-first H.264 routing as export and premixed AAC sample-exact against the video.
  • Blender is public: kept across frames with the same Arc<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.
  • packet on 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

Choose a tag to compare

@github-actions github-actions released this 12 Oct 15:27
v1.1.1
0715513

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

Choose a tag to compare

@github-actions github-actions released this 12 Oct 14:05
v1.1.0
8c452f9

One home for each shared public type. Every old path still compiles, marked deprecated.

Added

  • media::length_prefixed_to_annexb, media::threads and mp4::AvcConfig::parameter_sets_annexb, which pcod now uses instead of its own copies.

Changed

  • Rgba, Rate and Bitstream each live once in media. filter::Rgba, webp::Rgba, h264::Rate, gpu::Rate, h264::Bitstream and gpu::Bitstream are deprecated aliases of them, so existing code keeps compiling and values are interchangeable.
  • media::Rate and media::Bitstream derive Hash, and media::Rgba has stride().

v1.0.5

Choose a tag to compare

@github-actions github-actions released this 12 Oct 13:26
v1.0.5
ed53d30

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_stream streams the mix of every audio track, with the same rules as audio_mix.

Changed

  • probe of an MKV without Cues reads its head and tail: milliseconds instead of a pass over the whole file. Probe.frames is None there too; frame_count gives the count.
  • keyframes and frame_count read 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

Choose a tag to compare

@github-actions github-actions released this 12 Oct 11:39
v1.0.4
fe98ea6

Exports of MKV recordings smart-cut, every join is exact, and probing a large MKV reads only its head.

Added

  • frame_count gives a file's exact frame count on demand.
  • Exported.reasons says 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.
  • probe of 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.frames is None there; frame_count gives 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.