From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vinod Koul Subject: Re: [TINYCOMPRESS][PATCH 1/1] compress: Add support for capture streams Date: Fri, 26 Apr 2013 22:18:59 +0530 Message-ID: <20130426164859.GG24632@intel.com> References: <20130426151422.GA29257@opensource.wolfsonmicro.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by alsa0.perex.cz (Postfix) with ESMTP id 699DE260319 for ; Fri, 26 Apr 2013 19:21:30 +0200 (CEST) Content-Disposition: inline In-Reply-To: <20130426151422.GA29257@opensource.wolfsonmicro.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Richard Fitzgerald Cc: alsa-devel@alsa-project.org, pierre-louis.bossart@linux.jf.intel.com, vinod.koul@linux.jf.intel.com List-Id: alsa-devel@alsa-project.org On Fri, Apr 26, 2013 at 04:14:22PM +0100, Richard Fitzgerald wrote: > > Signed-off-by: Charles Keepax > Signed-off-by: Richard Fitzgerald > --- > compress.c | 64 +++++++++++++++++++++++++++++++--- > include/tinycompress/tinycompress.h | 2 +- > 2 files changed, 59 insertions(+), 7 deletions(-) Applied thanks, now where is crecord :-) -- ~Vinod > > diff --git a/compress.c b/compress.c > index 86cca88..e80e598 100644 > --- a/compress.c > +++ b/compress.c > @@ -240,13 +240,12 @@ struct compress *compress_open(unsigned int card, unsigned int device, > oops(&bad_compress, -EINVAL, "can't deduce device direction from given flags"); > goto config_fail; > } > + > if (flags & COMPRESS_OUT) { > - /* this should be removed once we have capture tested */ > - oops(&bad_compress, -EINVAL, "this version doesnt support capture"); > - goto config_fail; > + compress->fd = open(fn, O_RDONLY); > + } else { > + compress->fd = open(fn, O_WRONLY); > } > - > - compress->fd = open(fn, O_WRONLY); > if (compress->fd < 0) { > oops(&bad_compress, errno, "cannot open device '%s'", fn); > goto config_fail; > @@ -403,7 +402,60 @@ int compress_write(struct compress *compress, const void *buf, unsigned int size > > int compress_read(struct compress *compress, void *buf, unsigned int size) > { > - return oops(compress, -ENOTTY, "Not supported yet in lib"); > + struct snd_compr_avail avail; > + struct pollfd fds; > + int to_read = 0; > + int num_read, total = 0, ret; > + char* cbuf = buf; > + const unsigned int frag_size = compress->config->fragment_size; > + > + if (!(compress->flags & COMPRESS_OUT)) > + return oops(compress, -EINVAL, "Invalid flag set"); > + if (!is_compress_ready(compress)) > + return oops(compress, -ENODEV, "device not ready"); > + fds.fd = compress->fd; > + fds.events = POLLIN; > + > + while (size) { > + if (ioctl(compress->fd, SNDRV_COMPRESS_AVAIL, &avail)) > + return oops(compress, errno, "cannot get avail"); > + > + if ( (avail.avail < frag_size) && (avail.avail < size) ) { > + /* Less than one fragment available and not at the > + * end of the read, so poll > + */ > + ret = poll(&fds, 1, compress->max_poll_wait_ms); > + /* A pause will cause -EBADFD or zero. > + * This is not an error, just stop reading */ > + if ((ret == 0) || (ret == -EBADFD)) > + break; > + if (ret < 0) > + return oops(compress, errno, "poll error"); > + if (fds.revents & POLLIN) { > + continue; > + } > + if (fds.revents & POLLERR) { > + return oops(compress, -EIO, "poll returned error!"); > + } > + } > + /* read avail bytes */ > + if (size > avail.avail) > + to_read = avail.avail; > + else > + to_read = size; > + num_read = read(compress->fd, cbuf, to_read); > + /* If play was paused the read returns -EBADFD */ > + if (num_read == -EBADFD) > + break; > + if (num_read < 0) > + return oops(compress, errno, "read failed!"); > + > + size -= num_read; > + cbuf += num_read; > + total += num_read; > + } > + > + return total; > } > > int compress_start(struct compress *compress) > diff --git a/include/tinycompress/tinycompress.h b/include/tinycompress/tinycompress.h > index ba9f3b6..9867afc 100644 > --- a/include/tinycompress/tinycompress.h > +++ b/include/tinycompress/tinycompress.h > @@ -76,7 +76,7 @@ struct compr_gapless_mdata { > __u32 encoder_padding; > }; > > -#define COMPRESS_OUT 0x00000000 > +#define COMPRESS_OUT 0x20000000 > #define COMPRESS_IN 0x10000000 > > struct compress; > -- > 1.7.2.5 > > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@alsa-project.org > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel