diff --git a/src/emu/player.c b/src/emu/player.c index ea70752..6aa3435 100644 --- a/src/emu/player.c +++ b/src/emu/player.c @@ -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 diff --git a/src/emu/stream.c b/src/emu/stream.c index 2d6e3dc..3af3fbb 100644 --- a/src/emu/stream.c +++ b/src/emu/stream.c @@ -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 diff --git a/src/emu/stream.h b/src/emu/stream.h index f079855..ea66a08 100644 --- a/src/emu/stream.h +++ b/src/emu/stream.h @@ -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);