• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Eyevinn / mp4ff
82%
master: 83%

Build:
Build:
LAST BUILD BRANCH: fix/segmenter-last-sample
DEFAULT BRANCH: master
Repo Added 01 Nov 2024 09:40PM UTC
Files 221
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH perf/decode-allocs
branch: perf/decode-allocs
CHANGE BRANCH
x
Reset
  • perf/decode-allocs
  • aac-asc-header
  • av1-crypto-rap
  • av1-update
  • avcc-encode-trailing-info
  • avcc-preserve-trailing-bytes
  • avs3
  • chore-bump-min-go-1.18
  • chore-bump-min-go-1.19
  • chore/changelog-union-merge
  • chore/codespell
  • chore/go-1.24-build-version
  • chore/prepare-v0.53.0
  • chore/prepare-v0.56.0
  • chore/prepare-v0.57.0
  • chore/prepare-v0.58.0
  • chore/remove-goreportcard-badge
  • ci/checkout-v7
  • codespell
  • colr-icc-decode
  • compressorname-length-clamp
  • dac4
  • decode-box-body-sr
  • defragment-core
  • defragment-hybrid
  • defragment-overlaps
  • docs/benchmarks
  • docs/changelog-dec3-joc
  • docs/claude-md-history
  • docs/defragment-wording
  • docs/encoding-and-changelog
  • docs/fix-doc-comment-drift
  • docs/fix-misleading-doc-comments
  • docs/install-instructions
  • docs/osc-badge-utm-2026-10-09
  • docs/trim-claude-md
  • elst-media-rate
  • esds-vocabulary
  • feat-coll-box
  • feat-create-sei-nalu
  • feat-hevc-encrypt
  • feat-ivf
  • feat-lbli-sample-group
  • feat-lhvc-box
  • feat-linf-oinf-sample-groups
  • feat-mvhevc-builders
  • feat-mvhevc-cli
  • feat-trgr-track-group
  • feat-vexu-spatial-video
  • feat-vp-codec-sample-box
  • feat-vps-multilayer-extension
  • feat/av1-metadata-obu-cea608
  • feat/brands-check
  • feat/brands-defragmenter
  • feat/brands-general-type-box
  • feat/brands-generate
  • feat/caller-provided-memory
  • feat/clone-box
  • feat/dolby-vision-dvh1-dvhe
  • feat/dref-resolver
  • feat/fragment-reset
  • feat/hevc-hdr-boxes
  • feat/mdat-payload
  • feat/motion-jpeg
  • feat/mov-decoder
  • feat/paint-model-subtitle-boxes
  • feat/piff
  • feat/rsot-box
  • feat/saiz-v1-v2
  • feat/stream-read-mdat-data
  • feat/ttma-box
  • feature-encryption-boxes
  • feature/exporttfhd
  • fix-611-dataparts
  • fix-avcdecoderconfig
  • fix-bound-more-bitstream-counts
  • fix-co64-size-overflow
  • fix-container-children-bounds
  • fix-ftyp-styp-short-payload
  • fix-goreleaser-brew
  • fix-hevc-ps-dos
  • fix-interleaved-sidx-boxes
  • fix-mime-box
  • fix-senc-panic
  • fix-senc-robustness
  • fix-short-esds-issue-393
  • fix-sliceheader-spsid
  • fix-sps-num-ref-frames-overflow
  • fix-ssix-box
  • fix-stsc
  • fix-subs-box
  • fix-trailing-avc1-bytes
  • fix-typos
  • fix-vps-ols0-necessary-layers
  • fix/annexb-trailing-zeros
  • fix/avc-deblock-offsets
  • fix/avc-hrd-cpb-cnt
  • fix/avc-param-set-ranges
  • fix/avc-pps-scaling-lists
  • fix/box-versions-above-1
  • fix/cenc-encrypt-conformance
  • fix/cenc-increment
  • fix/container-error-bounded
  • fix/container-size-underflow
  • fix/decoders-exact-box-size
  • fix/empty-trak-subtitle-header
  • fix/external-data-references
  • fix/get-sample-data-indexing
  • fix/hevc-multilayer-ext-sps
  • fix/hevc-slice-deblocking-inference
  • fix/issyncsampleflags
  • fix/leva-grouping-type
  • fix/mdat-mixed-data
  • fix/moov-decode-linear
  • fix/nalu-length-size-checks
  • fix/oob-panics
  • fix/prft-decode
  • fix/sample-data-inverted-interval
  • fix/sdtp-entry-depends-on
  • fix/segmenter-last-sample
  • fix/sei-nalu-short-panic
  • fix/sgpd-description-length-bound
  • fix/stsc-containing-chunks
  • fix/stsc-sample-description-id
  • fix/stts-decode-time-bounds
  • fix/top-level-box-attribution
  • fix/trun-mdat-bounds
  • flac
  • fuzz-box
  • go-releaser
  • golangci-lint-v2
  • handle-trailing-avc1-bytes
  • hevc-ref-idx-255
  • hevc-vps
  • iMro0t-feature-encryption-boxes
  • iMro0t-fix-avcdecoderconfig
  • improve-av1
  • improved-crypt-tools
  • issue-492
  • labl-box
  • lpcm-format-flags
  • master
  • mdat-header-size
  • mdhd-dur-info
  • minimal-ac4
  • more-robust-decode
  • mp4-blackbox-test
  • mpeg-h
  • nalu-length-size
  • nalu-length-size-helpers
  • new-pssh-func
  • normalize-quicktime
  • opus
  • parse-joc-dolby-atmos
  • patch-1
  • perf/add-full-samples
  • perf/addfullsamples-always-parts
  • perf/bits-av1-allocs
  • perf/buffer-cmd-writers
  • perf/buffer-writetofile
  • perf/built-fragment-offsets
  • perf/bulk-table-decode
  • perf/cipher-hoist
  • perf/ebsp-allocs
  • perf/encode-allocs
  • perf/encrypt-allocs
  • perf/fragment-decoder
  • qt-legacy-audio-entries
  • qt-sound-descriptions
  • refactor/styp-delegate
  • release-v0.59.0
  • release/v0.51.0
  • release/v0.52.0
  • release/v0.54.0
  • release/v0.55.0
  • remove-homebrew-cask
  • return-partial-files
  • sampleflags-test
  • sei-recovery-point
  • spherical-v1-no-xml
  • sphericalv1
  • stream-process
  • test-header-parsing
  • test-visualsampleentry
  • tkhd-preserve-matrix
  • update-changelog
  • update-coverage-job
  • update-docs
  • update-make
  • v0.48.0
  • v0.49.0
  • v0.50.0
  • vtpl1-master
  • vvc
  • vvc-nal-headers
  • wave-box
  • wave-box-followups
  • weird-dac3

02 Oct 2026 09:15AM UTC coverage: 82.493% (-0.003%) from 82.496%
36988755743

Pull #605

github

tobbee
perf(mp4): decode fragments with fewer allocations

Every box header made a string of its four-byte type, and decoding then
looked the string up in the decoder map. A table keyed by the type bytes as a
big-endian uint32 now returns both the type string and the decoder in one
lookup, so a box type with a decoder costs no allocation and one cheaper hash.
The table is built from decodersSR and kept in step by SetBoxDecoder and
RemoveBoxDecoder. DecodeHeader, DecodeHeaderSR and BoxSeekReader.PeekBoxHeader
all use it, and PeekBoxHeader reads headers into scratch arrays instead of new
slices.

moof and traf decoding copied their decoded children into a second slice;
AddChild appends each child once, in order, so the first slice is refilled in
place. A fragment's children slice is sized for moof and mdat up front.

On testdata/1.m4s cut into 60 one-sample fragments, decoding a fragment makes
14 instead of 24 allocations with DecodeFileSR and 16 instead of 28 when
streaming, and is 13-24% faster.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Pull Request #605: perf(mp4): decode fragments with fewer allocations

41 of 46 new or added lines in 6 files covered. (89.13%)

22962 of 27835 relevant lines covered (82.49%)

0.83 hits per line

Relevant lines Covered
Build:
Build:
27835 RELEVANT LINES 22962 COVERED LINES
0.83 HITS PER LINE
Source Files on perf/decode-allocs
  • Tree
  • List 217
  • Changed 3
  • Source Changed 0
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
36988755743 perf/decode-allocs perf(mp4): decode fragments with fewer allocations Every box header made a string of its four-byte type, and decoding then looked the string up in the decoder map. A table keyed by the type bytes as a big-endian uint32 now returns both the type s... Pull #605 02 Oct 2026 09:16AM UTC tobbee github
82.49
36586590858 perf/decode-allocs perf(mp4): decode fragments with fewer allocations Every box header made a string of its four-byte type, and decoding then looked the string up in the decoder map. A table keyed by the type bytes as a big-endian uint32 now returns both the type s... Pull #605 29 Sep 2026 02:58PM UTC tobbee github
82.46
See All Builds (624)
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc