Skip to content

Optimize CELT decode hot paths#122

Merged
zshang-oai merged 1 commit into
mainfrom
codex/optimize-celt-decode-hot-paths
Jun 8, 2026
Merged

Optimize CELT decode hot paths#122
zshang-oai merged 1 commit into
mainfrom
codex/optimize-celt-decode-hot-paths

Conversation

@zshang-oai

Copy link
Copy Markdown
Contributor

Summary

Optimize CELT decode hot paths after the iterative FFT rewrite by:

  • reusing decoder-owned scratch buffers for CELT band decoding
  • caching CWRS recurrence rows and specializing low-dimensional CWRS decoding
  • decoding the final four CWRS dimensions with the analytic tail decoder
  • reading common 1..8 bit range-coder chunks directly
  • tightening PVQ rotation, pulse energy extraction, anti-collapse, comb-filter, log-amplitude, and inverse-MDCT staging loops
  • extracting shared scratch-slice resize helpers for CELT and SILK

This remains a pure-Go implementation. It does not change the public API or Opus bitstream behavior.

Algorithm

CELT PVQ shape decoding maps a range-coded codeword index into a signed pulse vector:

range-coded index
  -> CWRS codebook row
  -> signed pulse magnitudes
  -> residual normalization and collapse mask
  -> spreading rotation
  -> synthesis through inverse MDCT and postfilter

CWRS decoding

The generic CWRS decoder walks a recurrence row while recovering one signed pulse-vector coordinate at a time. That row depends only on the vector dimension and pulse count, so this change caches immutable rows across frames.

For dimensions 2, 3, and 4, the recurrence has closed-form counts:

  • 2D derives the remaining pulse count directly
  • 3D derives it with an integer square root
  • 4D locates it with a binary search over the closed-form polynomial

The generic decoder now handles the leading coordinates and delegates the last four dimensions to the specialized path. Exhaustive tests compare the specialized decoder and the four-dimensional tail against the generic algorithm across small codebooks.

Scratch reuse

CELT band decoding previously allocated normalized bands, low-band folding storage, pulse vectors, temporary float storage, and collapse masks repeatedly. These buffers now live in decoder scratch storage and are reused across frames.

The new internal/slicetools package centralizes the existing scratch-slice pattern:

  • Resize reuses capacity for buffers that callers fully overwrite
  • ResizeZero reuses capacity and clears buffers that must start zeroed

SILK and CELT both use the shared helpers.

Range-coder bits

getBits previously called getBit once per bit. The common 1..8 bit case now loads at most two adjacent bytes, shifts and masks the requested field, and advances bitsRead once. The original bit-by-bit loop remains as the fallback.

Tests cover a byte-boundary crossing and exhaustively compare the fast path against repeated getBit calls for all valid offsets and widths from 1 through 8.

Remaining loop cleanup

The smaller hot-loop changes:

  • fuse PVQ pulse-energy and collapse-mask extraction into one pass
  • use aligned slices for spreading rotation bounds-check elimination
  • replace math.Pow(2, x) with math.Exp2(x)
  • pre-slice comb-filter tap windows outside the inner loops
  • combine inverse-MDCT post-rotation and deshuffling into one pass
  • use fixed channel storage in anti-collapse handling

Performance

Measured before the final shared-helper cleanup using the production-shaped 48 kHz stereo RFC conformance corpus and DecodeToInt16, with alternating full-corpus runs:

Variant Median throughput Full-corpus allocations
main after iterative FFT PR 26,170 packets/s approximately 1.03M allocs/op
this optimization stack 32,856 packets/s 8,101 allocs/op
libopus through hraban/opus.v2 58,327 packets/s 0 allocs/op

The stack adds approximately 25.5% throughput over the iterative-FFT baseline and removes most per-frame allocation pressure.

The final shared-helper extraction was also checked with go test -gcflags=-m=1: the compiler inlines slicetools.Resize and slicetools.ResizeZero at the CELT and SILK call sites.

Validation

go test ./...
golangci-lint run
OPUS_RFC6716_REFERENCE=/Users/zshang/code/archieve/opus-rfc6716 \
OPUS_RFC6716_TESTVECTORS=/Users/zshang/code/archieve/opus-rfc6716/testvectors \
go test -tags conformance -run '^TestRFC6716Conformance$' -count=1

The complete RFC conformance matrix passes.

@codecov

codecov Bot commented Jun 4, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.23077% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 83.28%. Comparing base (71d5847) to head (fcde574).

Files with missing lines Patch % Lines
internal/celt/cwrs.go 92.42% 5 Missing and 5 partials ⚠️
internal/celt/pvq.go 88.88% 2 Missing and 2 partials ⚠️
internal/celt/encode_bands.go 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #122      +/-   ##
==========================================
+ Coverage   82.98%   83.28%   +0.29%     
==========================================
  Files          26       27       +1     
  Lines        5825     5969     +144     
==========================================
+ Hits         4834     4971     +137     
- Misses        765      766       +1     
- Partials      226      232       +6     
Flag Coverage Δ
go 83.28% <94.23%> (+0.29%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@zshang-oai zshang-oai marked this pull request as ready for review June 4, 2026 23:18
@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown

RFC 6716 / 8251 conformation

Status: pass

The action extracts the RFC 6716 reference implementation, applies the RFC 8251 decoder update patch, and then builds the patched reference tools.

Legend: numeric cells are opus_compare quality percentages; FAIL means the vector did not pass.

Inputs use the shared RFC 6716 / RFC 8251 bitstream corpus; accepted references follow RFC 8251 Section 11.

rate ch 01 02 03 04 05 06 07 08 09 10 11 12
8000 1 91.4 59.7 66.3 75.1 75.0 67.8 76.0 70.0 75.5 85.9 91.0 43.4
8000 2 93.3 57.6 66.1 75.3 75.2 67.9 76.0 70.4 76.2 86.0 93.0 43.7
12000 1 95.6 83.4 71.8 79.1 77.0 69.0 85.1 81.6 84.8 88.1 94.9 66.0
12000 2 96.0 83.3 71.3 79.2 77.3 69.1 85.1 81.8 85.2 87.0 95.8 66.1
16000 1 95.3 91.4 88.1 81.6 77.2 68.9 89.9 86.2 78.8 89.5 96.3 56.5
16000 2 94.7 90.7 88.1 80.6 77.6 69.1 89.8 87.6 78.9 87.5 96.4 56.7
24000 1 96.7 92.0 83.2 85.9 77.5 68.4 93.9 92.4 89.2 95.4 97.9 68.5
24000 2 96.8 90.6 82.8 86.1 77.8 68.8 93.9 93.5 92.1 87.7 98.1 68.6
48000 1 98.4 92.1 87.7 85.9 77.4 68.3 98.1 96.2 95.9 96.0 98.4 88.8
48000 2 99.8 90.6 87.8 86.1 77.7 68.6 99.6 93.7 94.4 87.7 99.7 88.9
Run output
=== CONT  TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector05
TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector08: Opus quality metric: 81.6 %
=== CONT  TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector04
TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector07: Opus quality metric: 85.1 %
=== CONT  TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector03
TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector06: Opus quality metric: 69.0 %
=== CONT  TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector02
TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector05: Opus quality metric: 77.0 %
=== CONT  TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector01
TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector04: Opus quality metric: 79.1 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector12
TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector03: Opus quality metric: 71.8 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector11
TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector02: Opus quality metric: 83.4 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector10
TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector01: Opus quality metric: 95.6 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector09
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector12: Opus quality metric: 43.7 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector08
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector11: Opus quality metric: 93.0 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector07
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector10: Opus quality metric: 86.0 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector06
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector09: Opus quality metric: 76.2 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector05
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector08: Opus quality metric: 70.4 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector04
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector07: Opus quality metric: 76.0 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector03
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector06: Opus quality metric: 67.9 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector02
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector05: Opus quality metric: 75.2 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector01
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector04: Opus quality metric: 75.3 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector12
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector03: Opus quality metric: 66.1 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector11
TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector12: Opus quality metric: 43.4 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector10
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector02: Opus quality metric: 57.6 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector09
TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector11: Opus quality metric: 91.0 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector08
TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector01: Opus quality metric: 93.3 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector07
TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector09: Opus quality metric: 75.5 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector06
TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector10: Opus quality metric: 85.9 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector05
TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector08: Opus quality metric: 70.0 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector04
TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector07: Opus quality metric: 76.0 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector03
TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector06: Opus quality metric: 67.8 %
=== CONT  TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector02
TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector04: Opus quality metric: 75.1 %
TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector05: Opus quality metric: 75.0 %
TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector03: Opus quality metric: 66.3 %
TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector02: Opus quality metric: 59.7 %
Opus conformance matrix
Legend: numeric cells are opus_compare quality percentages; FAIL means the vector did not pass.
Inputs use the shared RFC 6716 / RFC 8251 bitstream corpus; accepted references follow RFC 8251 Section 11.
+----------+----+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| rate     | ch | 01    | 02    | 03    | 04    | 05    | 06    | 07    | 08    | 09    | 10    | 11    | 12    |
+----------+----+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| 8000     | 1  | 91.4  | 59.7  | 66.3  | 75.1  | 75.0  | 67.8  | 76.0  | 70.0  | 75.5  | 85.9  | 91.0  | 43.4  |
| 8000     | 2  | 93.3  | 57.6  | 66.1  | 75.3  | 75.2  | 67.9  | 76.0  | 70.4  | 76.2  | 86.0  | 93.0  | 43.7  |
| 12000    | 1  | 95.6  | 83.4  | 71.8  | 79.1  | 77.0  | 69.0  | 85.1  | 81.6  | 84.8  | 88.1  | 94.9  | 66.0  |
| 12000    | 2  | 96.0  | 83.3  | 71.3  | 79.2  | 77.3  | 69.1  | 85.1  | 81.8  | 85.2  | 87.0  | 95.8  | 66.1  |
| 16000    | 1  | 95.3  | 91.4  | 88.1  | 81.6  | 77.2  | 68.9  | 89.9  | 86.2  | 78.8  | 89.5  | 96.3  | 56.5  |
| 16000    | 2  | 94.7  | 90.7  | 88.1  | 80.6  | 77.6  | 69.1  | 89.8  | 87.6  | 78.9  | 87.5  | 96.4  | 56.7  |
| 24000    | 1  | 96.7  | 92.0  | 83.2  | 85.9  | 77.5  | 68.4  | 93.9  | 92.4  | 89.2  | 95.4  | 97.9  | 68.5  |
| 24000    | 2  | 96.8  | 90.6  | 82.8  | 86.1  | 77.8  | 68.8  | 93.9  | 93.5  | 92.1  | 87.7  | 98.1  | 68.6  |
| 48000    | 1  | 98.4  | 92.1  | 87.7  | 85.9  | 77.4  | 68.3  | 98.1  | 96.2  | 95.9  | 96.0  | 98.4  | 88.8  |
| 48000    | 2  | 99.8  | 90.6  | 87.8  | 86.1  | 77.7  | 68.6  | 99.6  | 93.7  | 94.4  | 87.7  | 99.7  | 88.9  |
+----------+----+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
--- PASS: TestRFC6716Conformance (160.73s)
    --- PASS: TestRFC6716Conformance/vectors (0.00s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector01 (3.03s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector12 (4.96s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector07 (8.48s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector04 (9.85s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector01 (11.06s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector11 (5.70s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector10 (6.11s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector09 (5.21s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector08 (5.16s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector07 (4.23s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector06 (4.77s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector05 (5.18s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector04 (4.98s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector03 (3.95s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector02 (4.62s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_1/testvector01 (5.67s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector12 (6.38s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector11 (7.31s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector10 (7.91s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector09 (6.79s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector08 (6.61s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector07 (5.59s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector06 (6.19s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector05 (6.65s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector03 (5.08s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector04 (6.42s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector12 (3.24s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector02 (5.96s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector11 (3.75s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_2/testvector01 (7.28s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector10 (4.05s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector09 (3.53s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector08 (3.38s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector07 (2.76s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector06 (3.18s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector05 (3.42s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector04 (3.26s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector03 (2.56s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector02 (3.03s)
        --- PASS: TestRFC6716Conformance/vectors/rate_24000/channels_1/testvector01 (3.74s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector12 (5.56s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector11 (6.40s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector10 (6.90s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector09 (5.94s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector08 (5.78s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector07 (4.83s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector06 (5.35s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector05 (5.82s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector03 (4.42s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector04 (5.57s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector12 (2.82s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector02 (5.21s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector11 (3.26s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_2/testvector01 (6.35s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector09 (3.05s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector10 (3.57s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector08 (2.96s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector07 (2.45s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector06 (2.74s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector05 (2.96s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector03 (7.78s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector02 (9.19s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector12 (9.87s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector11 (11.05s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector10 (12.01s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector09 (10.29s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector08 (10.06s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector06 (9.43s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector04 (2.83s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector03 (2.23s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector02 (2.63s)
        --- PASS: TestRFC6716Conformance/vectors/rate_16000/channels_1/testvector01 (3.30s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector12 (5.23s)
        --- PASS: TestRFC6716Conformance/vectors/rate_48000/channels_2/testvector05 (10.13s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector11 (6.02s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector10 (6.50s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector08 (5.49s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector09 (5.62s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector07 (4.54s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector06 (5.11s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector03 (4.15s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector04 (5.28s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector05 (5.50s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector02 (4.90s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector12 (2.67s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector11 (3.09s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector09 (2.92s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_2/testvector01 (5.99s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector10 (3.38s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector08 (2.79s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector07 (2.35s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector06 (2.58s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector05 (2.82s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector04 (2.70s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector03 (2.14s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector02 (2.47s)
        --- PASS: TestRFC6716Conformance/vectors/rate_12000/channels_1/testvector01 (3.13s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector12 (5.03s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector11 (5.84s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector10 (6.28s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector09 (5.40s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector08 (5.26s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector07 (4.37s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector06 (4.92s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector05 (5.39s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector04 (5.07s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector03 (4.01s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector12 (2.58s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector02 (4.83s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector11 (3.00s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_2/testvector01 (5.88s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector09 (2.82s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector10 (3.27s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector08 (2.70s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector07 (2.33s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector06 (2.57s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector04 (2.59s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector05 (2.69s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector03 (1.94s)
        --- PASS: TestRFC6716Conformance/vectors/rate_8000/channels_1/testvector02 (1.44s)
PASS
ok  	github.com/pion/opus	160.730s

@zshang-oai zshang-oai requested review from JoTurk and Sean-Der June 4, 2026 23:18
@zshang-oai zshang-oai merged commit eb60bfd into main Jun 8, 2026
20 checks passed
@zshang-oai zshang-oai deleted the codex/optimize-celt-decode-hot-paths branch June 8, 2026 16:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants