From c7c5c2559f86a05b9b721488a6a1af17ef79c959 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Tue, 12 Jan 2010 01:10:36 +0100 Subject: [PATCH] vss: Fix offset handling. Commit fb6d93240 (vss: Update offset directly when setting the REPOS flag.) was buggy. On pause/restart we miss to update mmd->offset, hence the status items which are sent to the stat clients like audiod did not contain the correct offset value either which messes up the time string that audiod sends to its clients (para_gui). We need to set the new offset both on repos requests and on restart, do introduce a small helper function for this purpose. --- vss.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/vss.c b/vss.c index fef61cbe..1a038f06 100644 --- a/vss.c +++ b/vss.c @@ -677,6 +677,13 @@ static int need_to_request_new_audio_file(struct vss_task *vsst) return 1; } +static void set_mmd_offset(void) +{ + struct timeval offset; + tv_scale(mmd->current_chunk, &mmd->afd.afhi.chunk_tv, &offset); + mmd->offset = tv2ms(&offset); +} + /** * Compute the timeout for the main select-loop of the scheduler. * @@ -716,14 +723,12 @@ static void vss_pre_select(struct sched *s, struct task *t) set_eof_barrier(vsst); mmd->chunks_sent = 0; } else if (vss_repos()) { - struct timeval offset; tv_add(now, &vsst->announce_tv, &vsst->data_send_barrier); set_eof_barrier(vsst); mmd->chunks_sent = 0; mmd->current_chunk = mmd->repos_request; mmd->new_vss_status_flags &= ~VSS_REPOS; - tv_scale(mmd->current_chunk, &mmd->afd.afhi.chunk_tv, &offset); - mmd->offset = tv2ms(&offset); + set_mmd_offset(); } if (need_to_request_new_audio_file(vsst)) { PARA_DEBUG_LOG("ready and playing, but no audio file\n"); @@ -880,6 +885,7 @@ static void vss_send(struct vss_task *vsst) if (!mmd->chunks_sent) { mmd->stream_start = *now; mmd->events++; + set_mmd_offset(); } /* * We call the send function also in case of empty chunks as -- 2.39.5