From c5e356c49e9643e91fbf8fceb902b0a3f7969ee5 Mon Sep 17 00:00:00 2001 From: Bob van Loosen Date: Thu, 27 Dec 2012 18:29:06 +0100 Subject: [PATCH] fixed: jack buffer usage --- src/jackclient.cpp | 10 +++++++--- src/jackclient.h | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/jackclient.cpp b/src/jackclient.cpp index 912aa30..9b46b0d 100644 --- a/src/jackclient.cpp +++ b/src/jackclient.cpp @@ -235,8 +235,9 @@ int CJackClient::SJackProcessCallback(jack_nframes_t nframes, void *arg) void CJackClient::PJackProcessCallback(jack_nframes_t nframes) { - unsigned int neededsize = m_outsamples + nframes; - if (neededsize > (unsigned int)m_samplerate / 10 + nframes * 2) + int outsamples = Round32((double)nframes / m_samplerate * m_outsamplerate + 2.0); + int neededsize = m_outsamples + outsamples; + if (neededsize > m_outsamplerate) { return; } @@ -257,7 +258,7 @@ void CJackClient::PJackProcessCallback(jack_nframes_t nframes) srcdata.data_in = jackptr; srcdata.data_out = m_buf + m_outsamples; srcdata.input_frames = nframes; - srcdata.output_frames = nframes; + srcdata.output_frames = outsamples; srcdata.src_ratio = (double)m_outsamplerate / m_samplerate; src_process(m_srcstate, &srcdata); @@ -265,6 +266,9 @@ void CJackClient::PJackProcessCallback(jack_nframes_t nframes) lock.Leave(); m_condition.Signal(); + + if (srcdata.input_frames_used < (int)nframes) + Log("WARNING: %i out of %i frames used", (int)srcdata.input_frames_used, (int)nframes); } int CJackClient::GetAudio(float*& buf, int& bufsize, int& samplerate, int64_t& audiotime) diff --git a/src/jackclient.h b/src/jackclient.h index 1ca7c46..f4edee2 100644 --- a/src/jackclient.h +++ b/src/jackclient.h @@ -61,7 +61,7 @@ class CJackClient int m_pipe[2]; CCondition m_condition; float* m_buf; - unsigned int m_bufsize; + int m_bufsize; SRC_STATE* m_srcstate; int m_outsamples; int64_t m_audiotime;