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

Eyevinn / mp4ff
83%
master: 83%

Build:
Build:
LAST BUILD BRANCH: fix/extract-protect-avc3-hev1
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/ebsp-allocs
branch: perf/ebsp-allocs
CHANGE BRANCH
x
Reset
  • perf/ebsp-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-aac-channel-config
  • 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/slice-header-into
  • feat/stream-read-mdat-data
  • feat/ttma-box
  • feature-encryption-boxes
  • feature/exporttfhd
  • fix-611-dataparts
  • fix-adts-frame-length
  • fix-avcdecoderconfig
  • fix-bound-more-bitstream-counts
  • fix-co64-size-overflow
  • fix-container-children-bounds
  • fix-ftyp-styp-short-payload
  • fix-goreleaser-brew
  • fix-hdlr-reserved
  • 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/extract-protect-avc3-hev1
  • 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/slice-header-seq-param-id
  • 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/decode-allocs
  • perf/encode-allocs
  • perf/encrypt-allocs
  • perf/fragment-decoder
  • prepare-v0.60.0
  • 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 11:40AM UTC coverage: 82.565% (+0.03%) from 82.533%
37002615480

Pull #614

github

tobbee
perf(bits,avc): read EBSP without allocating per byte

EBSPReader.Read fetched every byte with binary.Read, which allocates since the byte escapes through an interface: 13 allocations to parse an AVC slice header and 28 for an SPS. Read now uses ReadByte when the reader is an io.ByteReader, as the bytes.Reader and bytes.Buffer of all AVC and HEVC parameter set and slice header parsers are, and io.ReadFull into a local array otherwise.

NewEBSPReaderFromSlice reads directly from a slice and goes back in it for MoreRbspData without seeking. ParseSliceHeader uses it, and the new avc.SliceHeaderSize returns only the header size without allocating a SliceHeader, which is all that cbcs subsample encryption needs.

BenchmarkParseNALUnits (Apple M4 Pro, n=10):
- ParseSliceHeader: 341 ns -> 263 ns, 13 -> 1 allocations
- ParseSPSNALUnit: 568 ns -> 359 ns, 28 -> 3 allocations
- SliceHeaderSize: 244 ns, 0 allocations

TestEBSPReaderKinds runs the same reads, Exp-Golomb codes, MoreRbspData and trailing bits, across emulation prevention bytes and the end of data, through a slice, an io.ReadSeeker and a plain io.Reader, and requires identical values, positions and errors. TestEBSPReaderAllocations fails on master with 101 allocations for 100 bytes. TestSliceHeaderSize checks that SliceHeaderSize returns ParseSliceHeader's size and error for the test streams and for truncated, weighted-prediction and unknown-PPS slices.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pull Request #614: perf(bits,avc): read EBSP without allocating per byte

44 of 48 new or added lines in 2 files covered. (91.67%)

23058 of 27927 relevant lines covered (82.57%)

0.83 hits per line

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

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
37002615480 perf/ebsp-allocs perf(bits,avc): read EBSP without allocating per byte EBSPReader.Read fetched every byte with binary.Read, which allocates since the byte escapes through an interface: 13 allocations to parse an AVC slice header and 28 for an SPS. Read now uses R... Pull #614 02 Oct 2026 11:44AM UTC tobbee github
82.57
See All Builds (638)
  • 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