ALSA: compress_core: Calculate avail correctly for capture streams
Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
4c28e32d6c
commit
5b1f79f70b
|
@ -153,7 +153,10 @@ static int snd_compr_update_tstamp(struct snd_compr_stream *stream,
|
|||
pr_debug("dsp consumed till %d total %d bytes\n",
|
||||
tstamp->byte_offset, tstamp->copied_total);
|
||||
stream->runtime->hw_pointer = tstamp->byte_offset;
|
||||
stream->runtime->total_bytes_transferred = tstamp->copied_total;
|
||||
if (stream->direction == SND_COMPRESS_PLAYBACK)
|
||||
stream->runtime->total_bytes_transferred = tstamp->copied_total;
|
||||
else
|
||||
stream->runtime->total_bytes_available = tstamp->copied_total;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -164,12 +167,9 @@ static size_t snd_compr_calc_avail(struct snd_compr_stream *stream,
|
|||
snd_compr_update_tstamp(stream, &avail->tstamp);
|
||||
/* Still need to return avail even if tstamp can't be filled in */
|
||||
|
||||
/* FIXME: This needs to be different for capture stream,
|
||||
available is # of compressed data, for playback it's
|
||||
remainder of buffer */
|
||||
|
||||
if (stream->runtime->total_bytes_available == 0 &&
|
||||
stream->runtime->state == SNDRV_PCM_STATE_SETUP) {
|
||||
stream->runtime->state == SNDRV_PCM_STATE_SETUP &&
|
||||
stream->direction == SND_COMPRESS_PLAYBACK) {
|
||||
pr_debug("detected init and someone forgot to do a write\n");
|
||||
return stream->runtime->buffer_size;
|
||||
}
|
||||
|
@ -178,13 +178,20 @@ static size_t snd_compr_calc_avail(struct snd_compr_stream *stream,
|
|||
stream->runtime->total_bytes_transferred);
|
||||
if (stream->runtime->total_bytes_available ==
|
||||
stream->runtime->total_bytes_transferred) {
|
||||
pr_debug("both pointers are same, returning full avail\n");
|
||||
return stream->runtime->buffer_size;
|
||||
if (stream->direction == SND_COMPRESS_PLAYBACK) {
|
||||
pr_debug("both pointers are same, returning full avail\n");
|
||||
return stream->runtime->buffer_size;
|
||||
} else {
|
||||
pr_debug("both pointers are same, returning no avail\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
avail->avail = stream->runtime->buffer_size -
|
||||
(stream->runtime->total_bytes_available -
|
||||
stream->runtime->total_bytes_transferred);
|
||||
avail->avail = stream->runtime->total_bytes_available -
|
||||
stream->runtime->total_bytes_transferred;
|
||||
if (stream->direction == SND_COMPRESS_PLAYBACK)
|
||||
avail->avail = stream->runtime->buffer_size - avail->avail;
|
||||
|
||||
pr_debug("ret avail as %lld\n", avail->avail);
|
||||
return avail->avail;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue