Encoder testing

This commit is contained in:
2026-06-08 12:14:32 +02:00
parent 444d62edac
commit d6aa880104
6 changed files with 261 additions and 61 deletions
+9 -9
View File
@@ -119,17 +119,17 @@
(ensure-open! fmt)
(set! frames-written (+ frames-written ((audio-encoder-write encoder) backend-handle fmt buffer buf-len))))
(define (ensure-flac-converter! input-format)
;; FLAC encoding may be used as a sample-rate conversion target, for example
;; 96 kHz -> 48 kHz. That conversion is not a property of libFLAC itself;
;; it must happen on the decoded PCM stream before process_interleaved.
(when (and (eq? kind 'flac)
(eq? converter #f)
(pcm-conversion-needed? input-format settings))
(set! converter (make-pcm-converter input-format settings))))
(define (ensure-converter! input-format)
;; FLAC may need conversion because the caller requested a target sample
;; rate or bit depth. Opus is deliberately not routed through this
;; converter by default: libopusenc accepts the source input rate and has
;; its own resampler, and opus-encoder.rkt feeds it float PCM directly.
(when (and (eq? kind 'flac) (eq? converter #f))
(when (pcm-conversion-needed? input-format settings)
(set! converter (make-pcm-converter input-format settings)))))
(define (write-converted! input-format buffer buf-len)
(ensure-flac-converter! input-format)
(ensure-converter! input-format)
(cond [converter
(let-values (((out out-samples) (pcm-converter-convert converter buffer buf-len input-format)))
(when (> out-samples 0)