From: Andre Noll Date: Tue, 12 Jan 2010 00:10:36 +0000 (+0100) Subject: vss: Fix offset handling. X-Git-Tag: v0.4.2~155 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=c7c5c2559f86a05b9b721488a6a1af17ef79c959;ds=sidebyside 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. --- 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