oke
This commit is contained in:
+48
-1
@@ -7,7 +7,7 @@
|
|||||||
"private/utils.rkt"
|
"private/utils.rkt"
|
||||||
"private/cstruct-helper.rkt"
|
"private/cstruct-helper.rkt"
|
||||||
let-assert
|
let-assert
|
||||||
define-return
|
early-return
|
||||||
)
|
)
|
||||||
|
|
||||||
(provide fmpg-init
|
(provide fmpg-init
|
||||||
@@ -1178,6 +1178,52 @@
|
|||||||
[else
|
[else
|
||||||
(av_packet_unref pkt)
|
(av_packet_unref pkt)
|
||||||
(loop)])))))
|
(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
|
(define/return (drain-resampler! self) return
|
||||||
(let* ((dec (fmpg-instance-decoder self))
|
(let* ((dec (fmpg-instance-decoder self))
|
||||||
@@ -1225,6 +1271,7 @@
|
|||||||
|
|
||||||
(loop 1)))))))))
|
(loop 1)))))))))
|
||||||
|
|
||||||
|
|
||||||
(define/return (fmpg-decode-next! instance) return
|
(define/return (fmpg-decode-next! instance) return
|
||||||
|
|
||||||
(define (receive-or-return! self dec)
|
(define (receive-or-return! self dec)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
racket/system
|
racket/system
|
||||||
racket/string
|
racket/string
|
||||||
file/unzip
|
file/unzip
|
||||||
define-return
|
early-return
|
||||||
)
|
)
|
||||||
|
|
||||||
(provide download-soundlibs
|
(provide download-soundlibs
|
||||||
|
|||||||
Reference in New Issue
Block a user