Fix progress computation

Cannot use stream progress individually as their sizes are different.
This commit is contained in:
Rodrigo Arias 2023-02-17 17:34:11 +01:00 committed by Rodrigo Arias Mallo
parent c709938206
commit b9cc81fc52
3 changed files with 13 additions and 17 deletions

View File

@ -219,21 +219,21 @@ player_stream(struct player *player)
double
player_progress(struct player *player)
{
int64_t n = 0;
double done = 0.0;
struct trace *trace = player->trace;
struct stream *stream;
int64_t sum_done = 0;
int64_t sum_total = 0;
DL_FOREACH(trace->streams, stream) {
done += stream_progress(stream);
n++;
int64_t done, total;
stream_progress(stream, &done, &total);
sum_done += done;
sum_total += total;
}
if (n == 0)
if (sum_total == 0)
return 1.0;
done /= (double) n;
return done;
return (double) sum_done / (double) sum_total;
}
int64_t

View File

@ -236,15 +236,11 @@ stream_step(struct stream *stream)
return 0;
}
double
stream_progress(struct stream *stream)
void
stream_progress(struct stream *stream, int64_t *done, int64_t *total)
{
if (stream->usize == 0)
return 1.0;
int64_t uoffset = stream->offset - sizeof(struct ovni_stream_header);
double prog = (double) uoffset / (double) stream->usize;
return prog;
*done = stream->offset - sizeof(struct ovni_stream_header);
*total = stream->usize;
}
void

View File

@ -41,7 +41,7 @@ int stream_load(struct stream *stream,
int stream_clkoff_set(struct stream *stream, int64_t clock_offset);
double stream_progress(struct stream *stream);
void stream_progress(struct stream *stream, int64_t *done, int64_t *total);
int stream_step(struct stream *stream);
struct ovni_ev *stream_ev(struct stream *stream);
int64_t stream_evclock(struct stream *stream, struct ovni_ev *ev);