Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE
alsa.6583
0028-pcm-file-Enable-file-writing-for-capture-p...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0028-pcm-file-Enable-file-writing-for-capture-path.patch of Package alsa.6583
From fe65b00f337dd08f8c14d54b0ce6b516424d78e8 Mon Sep 17 00:00:00 2001 From: Timo Wischer <twischer@de.adit-jv.com> Date: Fri, 17 Feb 2017 12:47:17 +0530 Subject: [PATCH 28/43] pcm: file: Enable file writing for capture path This commit reverts parts of commit 4081be0b87ab9fa53a8906e66bc240f18a7a9a54, because it is realy useful to use the file plugin in a capture path for debugging. Also it fixes the truncate issue mentioned in above commit. Additionally following MMAP access issue is considered: $ arecord -D teeraw -M -d5 arecord.wav Recording WAVE 'arecord.wav' : Unsigned 8 bit, Rate 8000 Hz, Mono ALSA lib pcm/pcm_file.c:358:(snd_pcm_file_write_bytes) write failed: Bad file descriptor ALSA lib pcm/pcm_file.c:358:(snd_pcm_file_write_bytes) write failed: Bad file descriptor arecord: pcm/pcm_file.c:397: snd_pcm_file_add_frames: Assertion `file->wbuf_used_bytes < file->wbuf_size_bytes' failed. Aborted by signal Aborted... Signed-off-by: Timo Wischer <twischer@de.adit-jv.com> Signed-off-by: Mounesh Sutar <sutar.mounesh@gmail.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> --- src/pcm/pcm_file.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) --- a/src/pcm/pcm_file.c +++ b/src/pcm/pcm_file.c @@ -544,6 +544,7 @@ static snd_pcm_sframes_t snd_pcm_file_wr static snd_pcm_sframes_t snd_pcm_file_readi(snd_pcm_t *pcm, void *buffer, snd_pcm_uframes_t size) { snd_pcm_file_t *file = pcm->private_data; + snd_pcm_channel_area_t areas[pcm->channels]; snd_pcm_sframes_t n; n = _snd_pcm_readi(file->gen.slave, buffer, size); @@ -555,8 +556,10 @@ static snd_pcm_sframes_t snd_pcm_file_re __snd_pcm_unlock(pcm); if (n < 0) return n; - return n * 8 / pcm->frame_bits; + n = n * 8 / pcm->frame_bits; } + snd_pcm_areas_from_buf(pcm, areas, buffer); + snd_pcm_file_add_frames(pcm, areas, 0, n); return n; } @@ -564,6 +567,7 @@ static snd_pcm_sframes_t snd_pcm_file_re static snd_pcm_sframes_t snd_pcm_file_readn(snd_pcm_t *pcm, void **bufs, snd_pcm_uframes_t size) { snd_pcm_file_t *file = pcm->private_data; + snd_pcm_channel_area_t areas[pcm->channels]; snd_pcm_sframes_t n; if (file->ifd >= 0) { @@ -572,6 +576,10 @@ static snd_pcm_sframes_t snd_pcm_file_re } n = _snd_pcm_readn(file->gen.slave, bufs, size); + if (n > 0) { + snd_pcm_areas_from_bufs(pcm, areas, bufs); + snd_pcm_file_add_frames(pcm, areas, 0, n); + } return n; } @@ -635,7 +643,7 @@ static int snd_pcm_file_hw_params(snd_pc a->first = slave->sample_bits * channel; a->step = slave->frame_bits; } - if ((file->fd < 0) && (pcm->stream == SND_PCM_STREAM_PLAYBACK)) { + if (file->fd < 0) { err = snd_pcm_file_open_output_file(file); if (err < 0) { SYSERR("failed opening output file %s", file->fname);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor