diff --git a/libflac/flac-decoder.rkt b/libflac/flac-decoder.rkt index 18ff7f8..f0022c8 100644 --- a/libflac/flac-decoder.rkt +++ b/libflac/flac-decoder.rkt @@ -84,34 +84,36 @@ (set-flac-handle-stop-reading! handle #f) (set-flac-handle-reading! handle #t) (letrec ((reader (lambda (frame-nr) - (let* ((st (ffi-handler 'state))) - (ffi-handler 'process-single) - (unless (eq? state st) - (set! state st) - (displayln - (format "Now in state ~a (frame-nr = ~a) (int-state = ~a)" - st frame-nr (ffi-handler 'int-state))) - ) - (when (flac-handle-stop-reading handle) - (set! st 'stopped-reading)) - (when (ffi-handler 'has-errno?) - (displayln - (format "Error in stream: ~a" (ffi-handler 'errno))) - ) - (when (ffi-handler 'has-meta-data?) - (ffi-handler 'process-meta-data - (lambda (meta) (process-meta handle meta))) - ) - (when (ffi-handler 'has-write-data?) - (ffi-handler 'process-write-data - (lambda (frame buffer) - (process-frame handle frame buffer))) - ) - (if (or (eq? st 'end-of-stream) (eq? st 'stopped-reading)) - (begin - (set-flac-handle-reading! handle #f) - st) - (reader (+ frame-nr 1))))) + (if (flac-handle-stop-reading handle) + (begin + (set-flac-handle-reading! handle #f) + 'stopped-reading) + (let* ((st (ffi-handler 'state))) + (ffi-handler 'process-single) + (unless (eq? state st) + (set! state st) + (displayln + (format "Now in state ~a (frame-nr = ~a) (int-state = ~a)" + st frame-nr (ffi-handler 'int-state))) + ) + (when (ffi-handler 'has-errno?) + (displayln + (format "Error in stream: ~a" (ffi-handler 'errno))) + ) + (when (ffi-handler 'has-meta-data?) + (ffi-handler 'process-meta-data + (lambda (meta) (process-meta handle meta))) + ) + (when (ffi-handler 'has-write-data?) + (ffi-handler 'process-write-data + (lambda (frame buffer) + (process-frame handle frame buffer))) + ) + (if (eq? st 'end-of-stream) + (begin + (set-flac-handle-reading! handle #f) + st) + (reader (+ frame-nr 1)))))) )) (reader 0))))