提交 4c28e32d 编写于 作者: C Charles Keepax 提交者: Takashi Iwai

ALSA: compress_core: Update calc_avail to use cumulative values

The app_pointer is managed locally by the compress core for memory
mapped DSPs but for DSPs that are not memory mapped this would have to
be manually updated from within the DSP driver itself, which is hardly
very idiomatic.

This patch switches to using the cumulative values to calculate the
available buffer space because these are already gracefully passed out
of the DSP driver to the compress core and otherwise should be
functionally equivalent.
Signed-off-by: NCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: NRichard Fitzgerald <rf@opensource.wolfsonmicro.com>
Acked-by: NVinod Koul <vinod.koul@intel.com>
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 8dd2b66d
...@@ -160,8 +160,6 @@ static int snd_compr_update_tstamp(struct snd_compr_stream *stream, ...@@ -160,8 +160,6 @@ static int snd_compr_update_tstamp(struct snd_compr_stream *stream,
static size_t snd_compr_calc_avail(struct snd_compr_stream *stream, static size_t snd_compr_calc_avail(struct snd_compr_stream *stream,
struct snd_compr_avail *avail) struct snd_compr_avail *avail)
{ {
long avail_calc; /*this needs to be signed variable */
memset(avail, 0, sizeof(*avail)); memset(avail, 0, sizeof(*avail));
snd_compr_update_tstamp(stream, &avail->tstamp); snd_compr_update_tstamp(stream, &avail->tstamp);
/* Still need to return avail even if tstamp can't be filled in */ /* Still need to return avail even if tstamp can't be filled in */
...@@ -184,22 +182,11 @@ static size_t snd_compr_calc_avail(struct snd_compr_stream *stream, ...@@ -184,22 +182,11 @@ static size_t snd_compr_calc_avail(struct snd_compr_stream *stream,
return stream->runtime->buffer_size; return stream->runtime->buffer_size;
} }
/* FIXME: this routine isn't consistent, in one test we use avail->avail = stream->runtime->buffer_size -
* cumulative values and in the other byte offsets. Do we (stream->runtime->total_bytes_available -
* really need the byte offsets if the cumulative values have stream->runtime->total_bytes_transferred);
* been updated? In the PCM interface app_ptr and hw_ptr are pr_debug("ret avail as %lld\n", avail->avail);
* already cumulative */ return avail->avail;
avail_calc = stream->runtime->buffer_size -
(stream->runtime->app_pointer - stream->runtime->hw_pointer);
pr_debug("calc avail as %ld, app_ptr %lld, hw+ptr %lld\n", avail_calc,
stream->runtime->app_pointer,
stream->runtime->hw_pointer);
if (avail_calc >= stream->runtime->buffer_size)
avail_calc -= stream->runtime->buffer_size;
pr_debug("ret avail as %ld\n", avail_calc);
avail->avail = avail_calc;
return avail_calc;
} }
static inline size_t snd_compr_get_avail(struct snd_compr_stream *stream) static inline size_t snd_compr_get_avail(struct snd_compr_stream *stream)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册