• Home
  • Raw
  • Download

Lines Matching full:compress

4  * tinycompress library for compress audio offload in alsa
36 * tinycompress library for compress audio offload in alsa
86 struct compress { struct
105 static int oops(struct compress *compress, int e, const char *fmt, ...) in oops() argument
111 vsnprintf(compress->error, COMPR_ERR_MAX, fmt, ap); in oops()
113 sz = strlen(compress->error); in oops()
115 snprintf(compress->error + sz, COMPR_ERR_MAX - sz, in oops()
122 const char *compress_get_error(struct compress *compress) in compress_get_error() argument
124 return compress->error; in compress_get_error()
126 static struct compress bad_compress = {
130 int is_compress_running(struct compress *compress) in is_compress_running() argument
132 return ((compress->fd >= 0) && compress->running) ? 1 : 0; in is_compress_running()
135 int is_compress_ready(struct compress *compress) in is_compress_ready() argument
137 return (compress->fd >= 0) ? 1 : 0; in is_compress_ready()
140 static int get_compress_version(struct compress *compress) in get_compress_version() argument
144 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_IOCTL_VERSION, &version)) { in get_compress_version()
145 oops(compress, errno, "cant read version"); in get_compress_version()
182 struct compress *compress_open(unsigned int card, unsigned int device, in compress_open()
185 struct compress *compress; in compress_open() local
195 compress = calloc(1, sizeof(struct compress)); in compress_open()
196 if (!compress) { in compress_open()
197 oops(&bad_compress, errno, "cannot allocate compress object"); in compress_open()
201 compress->next_track = 0; in compress_open()
202 compress->gapless_metadata = 0; in compress_open()
203 compress->config = calloc(1, sizeof(*config)); in compress_open()
204 if (!compress->config) in compress_open()
207 compress->max_poll_wait_ms = DEFAULT_MAX_POLL_WAIT_MS; in compress_open()
209 compress->flags = flags; in compress_open()
215 compress->snd_node = snd_utils_get_dev_node(card, device, NODE_COMPRESS); in compress_open()
216 compress_type = snd_utils_get_node_type(compress->snd_node); in compress_open()
218 compress->ops = &compr_plug_ops; in compress_open()
220 compress->ops = &compr_hw_ops; in compress_open()
222 compress->fd = compress->ops->open(card, device, flags, in compress_open()
223 &compress->data, compress->snd_node); in compress_open()
224 if (compress->fd < 0) { in compress_open()
230 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_GET_CAPS, &caps)) { in compress_open()
231 oops(compress, errno, "cannot get device caps"); in compress_open()
245 if (_is_codec_supported(compress, config, &caps) == false) { in compress_open()
246 oops(compress, errno, "codec not supported\n"); in compress_open()
251 memcpy(compress->config, config, sizeof(*compress->config)); in compress_open()
254 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_SET_PARAMS, &params)) { in compress_open()
259 return compress; in compress_open()
262 snd_utils_put_dev_node(compress->snd_node); in compress_open()
263 compress->ops->close(compress->data); in compress_open()
264 compress->fd = -1; in compress_open()
266 free(compress->config); in compress_open()
268 free(compress); in compress_open()
272 void compress_close(struct compress *compress) in compress_close() argument
274 if (compress == &bad_compress) in compress_close()
277 snd_utils_put_dev_node(compress->snd_node); in compress_close()
278 compress->ops->close(compress->data); in compress_close()
279 compress->running = 0; in compress_close()
280 compress->fd = -1; in compress_close()
281 free(compress->config); in compress_close()
282 free(compress); in compress_close()
285 int compress_get_hpointer(struct compress *compress, in compress_get_hpointer() argument
291 if (!is_compress_ready(compress)) in compress_get_hpointer()
292 return oops(compress, ENODEV, "device not ready"); in compress_get_hpointer()
294 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_AVAIL, &kavail)) in compress_get_hpointer()
295 return oops(compress, errno, "cannot get avail"); in compress_get_hpointer()
297 return oops(compress, ENODATA, "sample rate unknown"); in compress_get_hpointer()
306 int compress_get_tstamp(struct compress *compress, in compress_get_tstamp() argument
311 if (!is_compress_ready(compress)) in compress_get_tstamp()
312 return oops(compress, ENODEV, "device not ready"); in compress_get_tstamp()
314 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_TSTAMP, &ktstamp)) in compress_get_tstamp()
315 return oops(compress, errno, "cannot get tstamp"); in compress_get_tstamp()
322 int compress_write(struct compress *compress, const void *buf, unsigned int size) in compress_write() argument
329 const unsigned int frag_size = compress->config->fragment_size; in compress_write()
331 if (!(compress->flags & COMPRESS_IN)) in compress_write()
332 return oops(compress, EINVAL, "Invalid flag set"); in compress_write()
333 if (!is_compress_ready(compress)) in compress_write()
334 return oops(compress, ENODEV, "device not ready"); in compress_write()
339 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_AVAIL, &avail)) in compress_write()
340 return oops(compress, errno, "cannot get avail"); in compress_write()
347 if (compress->nonblocking) in compress_write()
350 ret = compress->ops->poll(compress->data, &fds, 1, in compress_write()
351 compress->max_poll_wait_ms); in compress_write()
353 return oops(compress, EIO, "poll returned error!"); in compress_write()
360 return oops(compress, errno, "poll error"); in compress_write()
370 written = compress->ops->write(compress->data, cbuf, to_write); in compress_write()
375 return oops(compress, errno, "write failed!"); in compress_write()
385 int compress_read(struct compress *compress, void *buf, unsigned int size) in compress_read() argument
392 const unsigned int frag_size = compress->config->fragment_size; in compress_read()
394 if (!(compress->flags & COMPRESS_OUT)) in compress_read()
395 return oops(compress, EINVAL, "Invalid flag set"); in compress_read()
396 if (!is_compress_ready(compress)) in compress_read()
397 return oops(compress, ENODEV, "device not ready"); in compress_read()
401 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_AVAIL, &avail)) in compress_read()
402 return oops(compress, errno, "cannot get avail"); in compress_read()
408 if (compress->nonblocking) in compress_read()
411 ret = compress->ops->poll(compress->data, &fds, 1, in compress_read()
412 compress->max_poll_wait_ms); in compress_read()
414 return oops(compress, EIO, "poll returned error!"); in compress_read()
421 return oops(compress, errno, "poll error"); in compress_read()
431 num_read = compress->ops->read(compress->data, cbuf, to_read); in compress_read()
436 return oops(compress, errno, "read failed!"); in compress_read()
447 int compress_start(struct compress *compress) in compress_start() argument
449 if (!is_compress_ready(compress)) in compress_start()
450 return oops(compress, ENODEV, "device not ready"); in compress_start()
451 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_START)) in compress_start()
452 return oops(compress, errno, "cannot start the stream"); in compress_start()
453 compress->running = 1; in compress_start()
458 int compress_stop(struct compress *compress) in compress_stop() argument
460 if (!is_compress_running(compress)) in compress_stop()
461 return oops(compress, ENODEV, "device not ready"); in compress_stop()
462 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_STOP)) in compress_stop()
463 return oops(compress, errno, "cannot stop the stream"); in compress_stop()
467 int compress_pause(struct compress *compress) in compress_pause() argument
469 if (!is_compress_running(compress)) in compress_pause()
470 return oops(compress, ENODEV, "device not ready"); in compress_pause()
471 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_PAUSE)) in compress_pause()
472 return oops(compress, errno, "cannot pause the stream"); in compress_pause()
476 int compress_resume(struct compress *compress) in compress_resume() argument
478 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_RESUME)) in compress_resume()
479 return oops(compress, errno, "cannot resume the stream"); in compress_resume()
483 int compress_drain(struct compress *compress) in compress_drain() argument
485 if (!is_compress_running(compress)) in compress_drain()
486 return oops(compress, ENODEV, "device not ready"); in compress_drain()
487 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_DRAIN)) in compress_drain()
488 return oops(compress, errno, "cannot drain the stream"); in compress_drain()
492 int compress_partial_drain(struct compress *compress) in compress_partial_drain() argument
494 if (!is_compress_running(compress)) in compress_partial_drain()
495 return oops(compress, ENODEV, "device not ready"); in compress_partial_drain()
497 if (!compress->next_track) in compress_partial_drain()
498 return oops(compress, EPERM, "next track not signalled"); in compress_partial_drain()
499 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_PARTIAL_DRAIN)) in compress_partial_drain()
500 return oops(compress, errno, "cannot drain the stream\n"); in compress_partial_drain()
501 compress->next_track = 0; in compress_partial_drain()
505 int compress_next_track(struct compress *compress) in compress_next_track() argument
507 if (!is_compress_running(compress)) in compress_next_track()
508 return oops(compress, ENODEV, "device not ready"); in compress_next_track()
510 if (!compress->gapless_metadata) in compress_next_track()
511 return oops(compress, EPERM, "metadata not set"); in compress_next_track()
512 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_NEXT_TRACK)) in compress_next_track()
513 return oops(compress, errno, "cannot set next track\n"); in compress_next_track()
514 compress->next_track = 1; in compress_next_track()
515 compress->gapless_metadata = 0; in compress_next_track()
519 int compress_set_gapless_metadata(struct compress *compress, in compress_set_gapless_metadata() argument
525 if (!is_compress_ready(compress)) in compress_set_gapless_metadata()
526 return oops(compress, ENODEV, "device not ready"); in compress_set_gapless_metadata()
528 version = get_compress_version(compress); in compress_set_gapless_metadata()
533 return oops(compress, ENXIO, "gapless apis not supported in kernel"); in compress_set_gapless_metadata()
537 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_SET_METADATA, &metadata)) in compress_set_gapless_metadata()
538 return oops(compress, errno, "can't set metadata for stream\n"); in compress_set_gapless_metadata()
542 if (compress->ops->ioctl(compress->data, SNDRV_COMPRESS_SET_METADATA, &metadata)) in compress_set_gapless_metadata()
543 return oops(compress, errno, "can't set metadata for stream\n"); in compress_set_gapless_metadata()
544 compress->gapless_metadata = 1; in compress_set_gapless_metadata()
549 int compress_set_next_track_param(struct compress *compress, in compress_set_next_track_param() argument
552 if (!is_compress_running(compress)) in compress_set_next_track_param()
553 return oops(compress, ENODEV, "device not ready"); in compress_set_next_track_param()
555 if (ioctl(compress->fd, SNDRV_COMPRESS_SET_NEXT_TRACK_PARAM, codec_options)) in compress_set_next_track_param()
556 return oops(compress, errno, "cannot set next track params\n"); in compress_set_next_track_param()
590 void compress_set_max_poll_wait(struct compress *compress, int milliseconds) in compress_set_max_poll_wait() argument
592 compress->max_poll_wait_ms = milliseconds; in compress_set_max_poll_wait()
595 void compress_nonblock(struct compress *compress, int nonblock) in compress_nonblock() argument
597 compress->nonblocking = !!nonblock; in compress_nonblock()
600 int compress_wait(struct compress *compress, int timeout_ms) in compress_wait() argument
607 ret = compress->ops->poll(compress->data, &fds, 1, timeout_ms); in compress_wait()
610 return oops(compress, EIO, "poll returned error!"); in compress_wait()
615 return oops(compress, ETIME, "poll timed out"); in compress_wait()
617 return oops(compress, errno, "poll error"); in compress_wait()
619 return oops(compress, EIO, "poll signalled unhandled event"); in compress_wait()
623 int compress_get_metadata(struct compress *compress, in compress_get_metadata() argument
626 if (!is_compress_ready(compress)) in compress_get_metadata()
627 return oops(compress, ENODEV, "device not ready"); in compress_get_metadata()
629 version = get_compress_version(compress); in compress_get_metadata()
633 if (ioctl(compress->fd, SNDRV_COMPRESS_GET_METADATA, mdata)) { in compress_get_metadata()
634 return oops(compress, errno, "can't get metadata for stream\n"); in compress_get_metadata()
639 int compress_set_metadata(struct compress *compress, in compress_set_metadata() argument
643 if (!is_compress_ready(compress)) in compress_set_metadata()
644 return oops(compress, ENODEV, "device not ready"); in compress_set_metadata()
646 version = get_compress_version(compress); in compress_set_metadata()
650 if (ioctl(compress->fd, SNDRV_COMPRESS_SET_METADATA, mdata)) { in compress_set_metadata()
651 return oops(compress, errno, "can't set metadata for stream\n"); in compress_set_metadata()