added: frame timing

This commit is contained in:
Bob 2012-11-17 01:12:47 +01:00
parent 501b3ddabc
commit 10c55c8db4
3 changed files with 21 additions and 5 deletions

View file

@ -181,11 +181,12 @@ void CBitVis::ProcessSignalfd()
void CBitVis::ProcessAudio()
{
const int bins = 1024;
const int lines = 46;
const int lines = 40;
const float decay = 0.5;
int samplerate;
int samples;
if ((samples = m_jackclient.GetAudio(m_buf, m_bufsize, samplerate)) > 0)
int64_t audiotime;
if ((samples = m_jackclient.GetAudio(m_buf, m_bufsize, samplerate, audiotime)) > 0)
{
m_fft.Allocate(bins * 2);
if (!m_fftbuf)
@ -248,7 +249,14 @@ void CBitVis::ProcessAudio()
start = next;
add += increase;
}
printf("start\n%send\n", out.c_str());
int64_t sleeptime = audiotime + Round64(1000000.0 / (double)samplerate * (double)i) - GetTimeUs();
USleep(sleeptime);
static int64_t prev;
int64_t now = GetTimeUs();
int64_t interval = now - prev;
prev = now;
printf("samples:%i\nsleeptime:%" PRIi64"\ninterval:%" PRIi64 "\nstart\n%send\n", samples, sleeptime, interval, out.c_str());
fflush(stdout);
memset(m_fftbuf, 0, bins * sizeof(float));

View file

@ -50,6 +50,7 @@ CJackClient::CJackClient()
m_bufsize = 0;
m_srcstate = NULL;
m_outsamples = 0;
m_audiotime = 0;
if (pipe2(m_pipe, O_NONBLOCK) == -1)
{
@ -249,6 +250,9 @@ void CJackClient::PJackProcessCallback(jack_nframes_t nframes)
CLock lock(m_condition);
if (m_outsamples == 0)
m_audiotime = GetTimeUs();
float* jackptr = (float*)jack_port_get_buffer(m_jackport, nframes);
SRC_DATA srcdata = {};
@ -265,7 +269,7 @@ void CJackClient::PJackProcessCallback(jack_nframes_t nframes)
m_condition.Signal();
}
int CJackClient::GetAudio(float*& buf, int& bufsize, int& samplerate)
int CJackClient::GetAudio(float*& buf, int& bufsize, int& samplerate, int64_t& audiotime)
{
CLock lock(m_condition);
m_condition.Wait(1000000, m_outsamples, 0);
@ -286,6 +290,8 @@ int CJackClient::GetAudio(float*& buf, int& bufsize, int& samplerate)
int outsamples = m_outsamples;
m_outsamples = 0;
audiotime = m_audiotime;
return outsamples;
}

View file

@ -27,6 +27,7 @@
#include "fft.h"
#include "clientmessage.h"
#include "util/condition.h"
#include "util/inclstdint.h"
class CJackClient
{
@ -44,7 +45,7 @@ class CJackClient
const std::string& ExitReason() { return m_exitreason; }
int Samplerate() { return m_samplerate; }
int GetAudio(float*& buf, int& bufsize, int& samplerate);
int GetAudio(float*& buf, int& bufsize, int& samplerate, int64_t& audiotime);
private:
bool m_connected;
@ -63,6 +64,7 @@ class CJackClient
unsigned int m_bufsize;
SRC_STATE* m_srcstate;
int m_outsamples;
int64_t m_audiotime;
bool ConnectInternal();
void CheckMessages();