g->num = 0;
g->start = *now;
} else {
+ struct timeval tmp;
+ if (g->first_chunk + g->num_chunks >= mmd->afd.afhi.chunks_total)
+ return 0;
/*
* Start and duration of this group depend only on the previous
* group. Compute the new group start as g->start += g->duration.
*/
- struct timeval tmp = g->start;
+ tmp = g->start;
tv_add(&tmp, &g->duration, &g->start);
k = fc->fcp->data_slices_per_group + fc->num_extra_slices;
set_group_timing(fc, g);
g->first_chunk += g->num_chunks;
g->num++;
}
- if (g->first_chunk >= mmd->afd.afhi.chunks_total)
- return 0;
if (need_audio_header(fc, vsst)) {
ret = num_slices(vsst->header_len, fc, &g->num_header_slices);
if (ret < 0)
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.
*
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");
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