Documentation/sound/designs/compress-accel.rst

Source file repositories/reference/linux-study-clean/Documentation/sound/designs/compress-accel.rst

File Facts

System
Linux kernel
Corpus path
Documentation/sound/designs/compress-accel.rst
Extension
.rst
Size
4654 bytes
Lines
135
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

==================================
ALSA Co-processor Acceleration API
==================================

Jaroslav Kysela <perex@perex.cz>


Overview
========

There is a requirement to expose the audio hardware that accelerates various
tasks for user space such as sample rate converters, compressed
stream decoders, etc.

This is description for the API extension for the compress ALSA API which
is able to handle "tasks" that are not bound to real-time operations
and allows for the serialization of operations.

Requirements
============

The main requirements are:

- serialization of multiple tasks for user space to allow multiple
  operations without user space intervention

- separate buffers (input + output) for each operation

- expose buffers using mmap to user space

- signal user space when the task is finished (standard poll mechanism)

Design
======

A new direction SND_COMPRESS_ACCEL is introduced to identify
the passthrough API.

The API extension shares device enumeration and parameters handling from
the main compressed API. All other realtime streaming ioctls are deactivated
and a new set of task related ioctls are introduced. The standard
read/write/mmap I/O operations are not supported in the passthrough device.

Device ("stream") state handling is reduced to OPEN/SETUP. All other
states are not available for the passthrough mode.

Data I/O mechanism is using standard dma-buf interface with all advantages
like mmap, standard I/O, buffer sharing etc. One buffer is used for the
input data and second (separate) buffer is used for the output data. Each task
have separate I/O buffers.

For the buffering parameters, the fragments means a limit of allocated tasks
for given device. The fragment_size limits the input buffer size for the given
device. The output buffer size is determined by the driver (may be different
from the input buffer size).

State Machine
=============

The passthrough audio stream state machine is described below::

                                       +----------+
                                       |          |
                                       |   OPEN   |
                                       |          |
                                       +----------+
                                             |
                                             |
                                             | compr_set_params()
                                             |

Annotation

Implementation Notes