make sure we don't hit an assert when we issue two rewind requests in a

single iteration

Closes rhbz 472757.
This commit is contained in:
Lennart Poettering 2008-12-21 17:55:29 +01:00
parent 606c9caa0b
commit 03aa91dea7

View file

@ -1194,7 +1194,8 @@ void pa_sink_input_request_rewind(pa_sink_input *i, size_t nbytes /* in our sam
* implementor. This implies 'flush' is TRUE. */
pa_sink_input_assert_ref(i);
pa_assert(i->thread_info.rewrite_nbytes == 0);
nbytes = PA_MAX(i->thread_info.rewrite_nbytes, nbytes);
/* pa_log_debug("request rewrite %lu", (unsigned long) nbytes); */
@ -1222,6 +1223,7 @@ void pa_sink_input_request_rewind(pa_sink_input *i, size_t nbytes /* in our sam
nbytes = pa_resampler_request(i->thread_info.resampler, nbytes);
}
if (i->thread_info.rewrite_nbytes != (size_t) -1) {
if (rewrite) {
/* Make sure to not overwrite over underruns */
if (nbytes > i->thread_info.playing_for)
@ -1230,8 +1232,13 @@ void pa_sink_input_request_rewind(pa_sink_input *i, size_t nbytes /* in our sam
i->thread_info.rewrite_nbytes = nbytes;
} else
i->thread_info.rewrite_nbytes = (size_t) -1;
}
i->thread_info.rewrite_flush = flush && i->thread_info.rewrite_nbytes != 0;
i->thread_info.rewrite_flush =
i->thread_info.rewrite_flush ||
(flush && i->thread_info.rewrite_nbytes != 0);
if (nbytes != (size_t) -1) {
/* Transform to sink domain */
if (i->thread_info.resampler)
@ -1243,6 +1250,7 @@ void pa_sink_input_request_rewind(pa_sink_input *i, size_t nbytes /* in our sam
/* This call will make sure process_rewind() is called later */
pa_sink_request_rewind(i->sink, 0);
}
}
/* Called from main context */
pa_memchunk* pa_sink_input_get_silence(pa_sink_input *i, pa_memchunk *ret) {