Skip to content

Commit

Permalink
audio/hda: tweak timer adjust logic
Browse files Browse the repository at this point in the history
We have some jitter in the audio timer call frequency and buffer sizes.
So it is rather pointless trying to be very exact, effect is a constant
up+down adjustment.  So adjust only in case we are off too much.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Message-id: 20180622111200.30561-4-kraxel@redhat.com
  • Loading branch information
kraxel committed Jun 25, 2018
1 parent 0a373bb commit 8ced066
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 7 deletions.
20 changes: 13 additions & 7 deletions hw/audio/hda-codec.c
Expand Up @@ -129,7 +129,6 @@ static void hda_codec_parse_fmt(uint32_t format, struct audsettings *as)
#include "hda-codec-common.h"

#define HDA_TIMER_TICKS (SCALE_MS)
#define MAX_CORR (SCALE_US * 100)
#define B_SIZE sizeof(st->buf)
#define B_MASK (sizeof(st->buf) - 1)

Expand Down Expand Up @@ -196,13 +195,20 @@ static inline int64_t hda_bytes_per_second(HDAAudioStream *st)

static inline void hda_timer_sync_adjust(HDAAudioStream *st, int64_t target_pos)
{
int64_t corr =
NANOSECONDS_PER_SECOND * target_pos / hda_bytes_per_second(st);
if (corr > MAX_CORR) {
corr = MAX_CORR;
} else if (corr < -MAX_CORR) {
corr = -MAX_CORR;
int64_t limit = B_SIZE / 8;
int64_t corr = 0;

if (target_pos > limit) {
corr = HDA_TIMER_TICKS;
}
if (target_pos < -limit) {
corr = -HDA_TIMER_TICKS;
}
if (corr == 0) {
return;
}

trace_hda_audio_adjust(st->node->name, target_pos);
atomic_fetch_add(&st->buft_start, corr);
}

Expand Down
1 change: 1 addition & 0 deletions hw/audio/trace-events
Expand Up @@ -21,3 +21,4 @@ milkymist_ac97_out_cb_transferred(int transferred) "transferred %d"
# hw/audio/hda-codec.c
hda_audio_running(const char *stream, int nr, bool running) "st %s, nr %d, run %d"
hda_audio_format(const char *stream, int chan, const char *fmt, int freq) "st %s, %d x %s @ %d Hz"
hda_audio_adjust(const char *stream, int pos) "st %s, pos %d"

0 comments on commit 8ced066

Please sign in to comment.