The old code updated the group start via set_group_timing() even if the
end of the file was reached. This could confuse the logic in vss_send()
as it uses the goup start timestamp to find out whether all FEC clients
have sent all remaining slices.
Fix this by moving the check for the eof condition before the call to
set_group_timing() that updates the group start.
g->num = 0;
g->start = *now;
} else {
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.
*/
/*
* 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;
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++;
}
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)
if (need_audio_header(fc, vsst)) {
ret = num_slices(vsst->header_len, fc, &g->num_header_slices);
if (ret < 0)