time-smoother-2: Fix integer type problem

The byte_count argument of pa_smoother_2_get_delay() was defined as size_t
which lead to overflow problems on 32-bit architectures. Changed type
to uint_64.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/700>
This commit is contained in:
Georg Chini 2022-05-13 15:05:36 +02:00 committed by PulseAudio Marge Bot
parent 9811c84a54
commit 325108e532
3 changed files with 4 additions and 4 deletions

View file

@ -1816,8 +1816,8 @@ static pa_usec_t calc_time(const pa_stream *s, bool ignore_transport) {
} }
#ifdef USE_SMOOTHER_2 #ifdef USE_SMOOTHER_2
static inline size_t calc_bytes(pa_stream *s, bool ignore_transport) { static inline uint64_t calc_bytes(pa_stream *s, bool ignore_transport) {
return pa_usec_to_bytes(calc_time(s, ignore_transport), &s->sample_spec); return (uint64_t)(calc_time(s, ignore_transport) * s->sample_spec.rate / PA_USEC_PER_SEC * pa_frame_size(&s->sample_spec));
} }
#endif #endif

View file

@ -258,7 +258,7 @@ void pa_smoother_2_put(pa_smoother_2 *s, pa_usec_t time_stamp, int64_t byte_coun
} }
/* Calculate the current latency. For a source, the sign must be inverted */ /* Calculate the current latency. For a source, the sign must be inverted */
int64_t pa_smoother_2_get_delay(pa_smoother_2 *s, pa_usec_t time_stamp, size_t byte_count) { int64_t pa_smoother_2_get_delay(pa_smoother_2 *s, pa_usec_t time_stamp, uint64_t byte_count) {
int64_t now, delay; int64_t now, delay;
pa_assert(s); pa_assert(s);

View file

@ -37,7 +37,7 @@ void pa_smoother_2_resume(pa_smoother_2 *s, pa_usec_t time_stamp);
void pa_smoother_2_put(pa_smoother_2 *s, pa_usec_t time_stamp, int64_t byte_count); void pa_smoother_2_put(pa_smoother_2 *s, pa_usec_t time_stamp, int64_t byte_count);
/* Calculate the current latency. For a source, the sign of the result must be inverted */ /* Calculate the current latency. For a source, the sign of the result must be inverted */
int64_t pa_smoother_2_get_delay(pa_smoother_2 *s, pa_usec_t time_stamp, size_t byte_count); int64_t pa_smoother_2_get_delay(pa_smoother_2 *s, pa_usec_t time_stamp, uint64_t byte_count);
/* Convert system time since start to sound card time */ /* Convert system time since start to sound card time */
pa_usec_t pa_smoother_2_get(pa_smoother_2 *s, pa_usec_t time_stamp); pa_usec_t pa_smoother_2_get(pa_smoother_2 *s, pa_usec_t time_stamp);
/* Convert a time interval from sound card time to system time */ /* Convert a time interval from sound card time to system time */