diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-06-03 20:35:07 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-06-03 20:35:07 +0000 |
commit | 86965bebad785f6071968f42eacc92f285b8459b (patch) | |
tree | 90a3169e2b7b3a444e327c6fe51cf16d7ad7f94f /libao2/ao_jack.c | |
parent | d9d19d0c8bdc8e8106642c302d988512d5901a33 (diff) | |
download | mpv-86965bebad785f6071968f42eacc92f285b8459b.tar.bz2 mpv-86965bebad785f6071968f42eacc92f285b8459b.tar.xz |
Fix latency calculation and buffersize setting.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@15631 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2/ao_jack.c')
-rw-r--r-- | libao2/ao_jack.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/libao2/ao_jack.c b/libao2/ao_jack.c index b0e07413e0..5e86c290e7 100644 --- a/libao2/ao_jack.c +++ b/libao2/ao_jack.c @@ -41,6 +41,7 @@ LIBAO_EXTERN(jack) static jack_port_t *ports[MAX_CHANS]; static int num_ports; ///< Number of used ports == number of channels static jack_client_t *client; +static float jack_latency; static volatile int paused = 0; ///< set if paused static volatile int underrun = 0; ///< signals if an underrun occured @@ -261,13 +262,16 @@ static int init(int rate, int channels, int format, int flags) { goto err_out; } } + rate = jack_get_sample_rate(client); + jack_latency = (float)(jack_port_get_total_latency(client, ports[0]) + + jack_get_buffer_size(client)) / (float)rate; buffer = (unsigned char *) malloc(BUFFSIZE); ao_data.channels = channels; - ao_data.samplerate = rate = jack_get_sample_rate(client); + ao_data.samplerate = rate; ao_data.format = AF_FORMAT_FLOAT_NE; ao_data.bps = channels * rate * sizeof(float); - ao_data.buffersize = jack_port_get_total_latency(client, ports[0]) * channels; + ao_data.buffersize = CHUNK_SIZE * NUM_CHUNKS; ao_data.outburst = CHUNK_SIZE; free(matching_ports); free(port_name); @@ -334,7 +338,7 @@ static int play(void *data, int len, int flags) { static float get_delay() { int buffered = BUFFSIZE - CHUNK_SIZE - buf_free(); // could be less - float in_jack = (float)ao_data.buffersize / (float)ao_data.bps; + float in_jack = jack_latency; #ifdef JACK_ESTIMATE_DELAY unsigned int elapsed = GetTimer() - callback_time; in_jack += (float)callback_samples / (float)ao_data.samplerate - (float)elapsed / 1000.0 / 1000.0; |