oke
This commit is contained in:
+48
-1
@@ -7,7 +7,7 @@
|
||||
"private/utils.rkt"
|
||||
"private/cstruct-helper.rkt"
|
||||
let-assert
|
||||
define-return
|
||||
early-return
|
||||
)
|
||||
|
||||
(provide fmpg-init
|
||||
@@ -1178,6 +1178,52 @@
|
||||
[else
|
||||
(av_packet_unref pkt)
|
||||
(loop)])))))
|
||||
#|
|
||||
(define (drain-resampler! self)
|
||||
(let* ((dec (fmpg-instance-decoder self))
|
||||
(info (fmpg-instance-audio-info self))
|
||||
(channels (ais-channels info))
|
||||
(sample-rate (ais-rate info))
|
||||
(sample-rate* (exact->inexact sample-rate))
|
||||
(swr-ctx (ds-swr-ctx dec)))
|
||||
|
||||
(let loop ((produced 0))
|
||||
(early-return
|
||||
((delay (swr_get_delay swr-ctx sample-rate)
|
||||
? (<= delay 0) -> produced)
|
||||
(max-bytes (av_samples_get_buffer_size #f channels delay FMPG_OUTPUT_FMT 1)
|
||||
? (<= max-bytes 0) -> produced)
|
||||
(tmp (malloc max-bytes 'raw) ? (eq? tmp #f) -> -1)
|
||||
(out-planes (malloc _pointer 1 'raw)
|
||||
? (eq? out-planes #f) -> -1 ~ (free tmp))
|
||||
|
||||
(do (ptr-set! out-planes _pointer 0 tmp))
|
||||
|
||||
(out-samples (swr_convert swr-ctx out-planes delay #f 0)
|
||||
? (<= out-samples 0) -> produced
|
||||
~ (begin (free out-planes) (free tmp)))
|
||||
|
||||
(used-bytes (av_samples_get_buffer_size #f channels out-samples FMPG_OUTPUT_FMT 1)
|
||||
? (< used-bytes 0) -> produced
|
||||
~ (begin (free out-planes) (free tmp)))
|
||||
|
||||
(do (when (pcm-empty? dec)
|
||||
(let ((start (ds-next-sample-pos dec)))
|
||||
(ds-start-sample! dec start)
|
||||
(ds-timecode! dec (/ (exact->inexact start) sample-rate*)))))
|
||||
|
||||
(appended? (append-bytes! dec tmp used-bytes)
|
||||
? (not appended?) -> -1
|
||||
~ (begin (free out-planes) (free tmp))))
|
||||
|
||||
(ds-last-samples! dec (+ (ds-last-samples dec) out-samples))
|
||||
(ds-next-sample-pos! dec (+ (ds-next-sample-pos dec) out-samples))
|
||||
(free out-planes)
|
||||
(free tmp))
|
||||
|
||||
(loop 1)))
|
||||
)
|
||||
|#
|
||||
|
||||
(define/return (drain-resampler! self) return
|
||||
(let* ((dec (fmpg-instance-decoder self))
|
||||
@@ -1225,6 +1271,7 @@
|
||||
|
||||
(loop 1)))))))))
|
||||
|
||||
|
||||
(define/return (fmpg-decode-next! instance) return
|
||||
|
||||
(define (receive-or-return! self dec)
|
||||
|
||||
Reference in New Issue
Block a user