aboutsummaryrefslogtreecommitdiff
path: root/chre_api/legacy/v1_4/chre/audio.h
diff options
context:
space:
mode:
Diffstat (limited to 'chre_api/legacy/v1_4/chre/audio.h')
-rw-r--r--chre_api/legacy/v1_4/chre/audio.h407
1 files changed, 0 insertions, 407 deletions
diff --git a/chre_api/legacy/v1_4/chre/audio.h b/chre_api/legacy/v1_4/chre/audio.h
deleted file mode 100644
index 201ab0e7..00000000
--- a/chre_api/legacy/v1_4/chre/audio.h
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CHRE_AUDIO_H_
-#define _CHRE_AUDIO_H_
-
-/**
- * @file
- * The API for requesting audio in the Context Hub Runtime Environment.
- *
- * This includes the definition of audio data structures and the ability to
- * request audio streams.
- */
-
-#include <chre/event.h>
-
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * The current compatibility version of the chreAudioDataEvent structure.
- */
-#define CHRE_AUDIO_DATA_EVENT_VERSION UINT8_C(1)
-
-/**
- * Produce an event ID in the block of IDs reserved for audio
- * @param offset Index into audio event ID block; valid range [0,15]
- */
-#define CHRE_AUDIO_EVENT_ID(offset) (CHRE_EVENT_AUDIO_FIRST_EVENT + (offset))
-
-/**
- * nanoappHandleEvent argument: struct chreAudioSourceStatusEvent
- *
- * Indicates a change in the format and/or rate of audio data provided to a
- * nanoapp.
- */
-#define CHRE_EVENT_AUDIO_SAMPLING_CHANGE CHRE_AUDIO_EVENT_ID(0)
-
-/**
- * nanoappHandleEvent argument: struct chreAudioDataEvent
- *
- * Provides a buffer of audio data to a nanoapp.
- */
-#define CHRE_EVENT_AUDIO_DATA CHRE_AUDIO_EVENT_ID(1)
-
-/**
- * The maximum size of the name of an audio source including the
- * null-terminator.
- */
-#define CHRE_AUDIO_SOURCE_NAME_MAX_SIZE (40)
-
-/**
- * Helper values for sample rates.
- *
- * @defgroup CHRE_AUDIO_SAMPLE_RATES
- * @{
- */
-
-//! 16kHz Audio Sample Data
-#define CHRE_AUDIO_SAMPLE_RATE_16KHZ (16000)
-
-/** @} */
-
-/**
- * Formats for audio that can be provided to a nanoapp.
- */
-enum chreAudioDataFormat {
- /**
- * Unsigned, 8-bit u-Law encoded data as specified by ITU-T G.711.
- */
- CHRE_AUDIO_DATA_FORMAT_8_BIT_U_LAW = 0,
-
- /**
- * Signed, 16-bit linear PCM data. Endianness must be native to the local
- * processor.
- */
- CHRE_AUDIO_DATA_FORMAT_16_BIT_SIGNED_PCM = 1,
-};
-
-/**
- * A description of an audio source available to a nanoapp.
- *
- * This provides a description of an audio source with a name and a
- * description of the format of the provided audio data.
- */
-struct chreAudioSource {
- /**
- * A human readable name for this audio source. This is a C-style,
- * null-terminated string. The length must be less than or equal to
- * CHRE_AUDIO_SOURCE_NAME_MAX_SIZE bytes (including the null-terminator) and
- * is expected to describe the source of the audio in US English. All
- * characters must be printable (i.e.: isprint would return true for all
- * characters in the name for the EN-US locale). The typical use of this field
- * is for a nanoapp to log the name of the audio source that it is using.
- *
- * Example: "Camcorder Microphone"
- */
- const char *name;
-
- /**
- * The sampling rate in hertz of this mode. This value is rounded to the
- * nearest integer. Typical values might include 16000, 44100 and 44800.
- *
- * If the requested audio source is preempted by another feature of the system
- * (e.g. hotword), a gap may occur in received audio data. This is indicated
- * to the client by posting a CHRE_EVENT_AUDIO_SAMPLING_CHANGE event. The
- * nanoapp will then receive another CHRE_EVENT_AUDIO_SAMPLING_CHANGE event
- * once the audio source is available again.
- */
- uint32_t sampleRate;
-
- /**
- * The minimum amount of time that this audio source can be buffered, in
- * nanoseconds. Audio data is delivered to nanoapps in buffers. This specifies
- * the minimum amount of data that can be delivered to a nanoapp without
- * losing data. A request for a buffer that is smaller than this will fail.
- */
- uint64_t minBufferDuration;
-
- /**
- * The maximum amount of time that this audio source can be buffered, in
- * nanoseconds. Audio data is delivered to nanoapps in buffers. This specifies
- * the maximum amount of data that can be stored by the system in one event
- * without losing data. A request for a buffer that is larger than this will
- * fail.
- */
- uint64_t maxBufferDuration;
-
- /**
- * The format for data provided to the nanoapp. This will be assigned to one
- * of the enum chreAudioDataFormat values.
- */
- uint8_t format;
-};
-
-/**
- * The current status of an audio source.
- */
-struct chreAudioSourceStatus {
- /**
- * Set to true if the audio source is currently enabled by this nanoapp. If
- * this struct is provided by a CHRE_EVENT_AUDIO_SAMPLING_CHANGE event, it
- * must necessarily be set to true because sampling change events are only
- * sent for sources which this nanoapp has actively subscribed to. If this
- * struct is obtained from the chreAudioGetStatus API, it may be set to true
- * or false depending on if audio is currently enabled.
- */
- bool enabled;
-
- /**
- * Set to true if the audio source is currently suspended and no audio data
- * will be received from this source.
- */
- bool suspended;
-};
-
-/**
- * The nanoappHandleEvent argument for CHRE_EVENT_AUDIO_SAMPLING_CHANGE.
- */
-struct chreAudioSourceStatusEvent {
- /**
- * The audio source which has completed a status change.
- */
- uint32_t handle;
-
- /**
- * The status of this audio source.
- */
- struct chreAudioSourceStatus status;
-};
-
-/**
- * The nanoappHandleEvent argument for CHRE_EVENT_AUDIO_DATA.
- *
- * One example of the sequence of events for a nanoapp to receive audio data is:
- *
- * 1. CHRE_EVENT_AUDIO_SAMPLING_CHANGE - Indicates that audio data is not
- * suspended.
- * 2. CHRE_EVENT_AUDIO_DATA - One buffer of audio samples. Potentially repeated.
- * 3. CHRE_EVENT_AUDIO_SAMPLING_CHANGE - Indicates that audio data has suspended
- * which indicates a gap in the audio.
- * 4. CHRE_EVENT_AUDIO_SAMPLING_CHANGE - Indicates that audio data has resumed
- * and that audio data may be delivered
- * again if enough samples are buffered.
- * 5. CHRE_EVENT_AUDIO_DATA - One buffer of audio samples. Potentially repeated.
- * The nanoapp must tolerate a gap in the timestamps.
- *
- * This process repeats for as long as an active request is made for an audio
- * source. A CHRE_EVENT_AUDIO_SAMPLING_CHANGE does not guarantee that the next
- * event will be a CHRE_EVENT_AUDIO_DATA event when suspended is set to false.
- * It may happen that the audio source is suspended before a complete buffer can
- * be captured. This will cause another CHRE_EVENT_AUDIO_SAMPLING_CHANGE event
- * to be dispatched with suspended set to true before a buffer is delivered.
- *
- * Audio events must be delivered to a nanoapp in order.
- */
-struct chreAudioDataEvent {
- /**
- * Indicates the version of the structure, for compatibility purposes. Clients
- * do not normally need to worry about this field; the CHRE implementation
- * guarantees that the client only receives the structure version it expects.
- */
- uint8_t version;
-
- /**
- * Additional bytes reserved for future use; must be set to 0.
- */
- uint8_t reserved[3];
-
- /**
- * The handle for which this audio data originated from.
- */
- uint32_t handle;
-
- /**
- * The base timestamp for this buffer of audio data, from the same time base
- * as chreGetTime() (in nanoseconds). The audio API does not provide
- * timestamps for each audio sample. This timestamp corresponds to the first
- * sample of the buffer. Even though the value is expressed in nanoseconds,
- * there is an expectation that the sample clock may drift and nanosecond
- * level accuracy may not be possible. The goal is to be as accurate as
- * possible within reasonable limitations of a given system.
- */
- uint64_t timestamp;
-
- /**
- * The sample rate for this buffer of data in hertz, rounded to the nearest
- * integer. Fractional sampling rates are not supported. Typical values might
- * include 16000, 44100 and 48000.
- */
- uint32_t sampleRate;
-
- /**
- * The number of samples provided with this buffer.
- */
- uint32_t sampleCount;
-
- /**
- * The format of this audio data. This enumeration and union of pointers below
- * form a tagged struct. The consumer of this API must use this enum to
- * determine which samples pointer below to dereference. This will be assigned
- * to one of the enum chreAudioDataFormat values.
- */
- uint8_t format;
-
- /**
- * A union of pointers to various formats of sample data. These correspond to
- * the valid chreAudioDataFormat values.
- */
- union {
- const uint8_t *samplesULaw8;
- const int16_t *samplesS16;
- };
-};
-
-/**
- * Retrieves information about an audio source supported by the current CHRE
- * implementation. The source returned by the runtime must not change for the
- * entire lifecycle of the Nanoapp and hot-pluggable audio sources are not
- * supported.
- *
- * A simple example of iterating all available audio sources is provided here:
- *
- * struct chreAudioSource audioSource;
- * for (uint32_t i = 0; chreAudioGetSource(i, &audioSource); i++) {
- * chreLog(CHRE_LOG_INFO, "Found audio source: %s", audioSource.name);
- * }
- *
- * Handles provided to this API must be a stable value for the entire duration
- * of a nanoapp. Handles for all audio sources must be zero-indexed and
- * contiguous. The following are examples of handles that could be provided to
- * this API:
- *
- * Valid: 0
- * Valid: 0, 1, 2, 3
- * Invalid: 1, 2, 3
- * Invalid: 0, 2
- *
- * @param handle The handle for an audio source to obtain details for. The
- * range of acceptable handles must be zero-indexed and contiguous.
- * @param audioSource A struct to populate with details of the audio source.
- * @return true if the query was successful, false if the provided handle is
- * invalid or the supplied audioSource is NULL.
- *
- * @since v1.2
- */
-bool chreAudioGetSource(uint32_t handle, struct chreAudioSource *audioSource);
-
-/**
- * Configures delivery of audio data to the current nanoapp. Note that this may
- * not fully disable the audio source if it is used by other clients in the
- * system but it will halt data delivery to the nanoapp.
- *
- * The bufferDuration and deliveryInterval parameters as described below are
- * used together to determine both how much and how often to deliver data to a
- * nanoapp, respectively. A nanoapp will always be provided the requested
- * amount of data at the requested interval, even if another nanoapp in CHRE
- * requests larger/more frequent buffers or smaller/less frequent buffers.
- * These two buffering parameters allow describing the duty cycle of captured
- * audio data. If a nanoapp wishes to receive all available audio data, it will
- * specify a bufferDuration and deliveryInterval that are equal. A 50% duty
- * cycle would be achieved by specifying a deliveryInterval that is double the
- * value of the bufferDuration provided. These parameters allow the audio
- * subsystem to operate at less than 100% duty cycle and permits use of
- * incomplete audio data without periodic reconfiguration of the source.
- *
- * Two examples are illustrated below:
- *
- * Target duty cycle: 50%
- * bufferDuration: 2
- * deliveryInterval: 4
- *
- * Time 0 1 2 3 4 5 6 7
- * Batch A B
- * Sample -- -- a1 a2 -- -- b1 b2
- * Duration [ ] [ ]
- * Interval [ ] [ ]
- *
- *
- * Target duty cycle: 100%
- * bufferDuration: 4
- * deliveryInterval: 4
- *
- * Time 0 1 2 3 4 5 6 7
- * Batch A B
- * Sample a1 a2 a3 a4 b1 b2 b3 b4
- * Duration [ ] [ ]
- * Interval [ ] [ ]
- *
- *
- * This is expected to reduce power overall.
- *
- * The first audio buffer supplied to the nanoapp may contain data captured
- * prior to the request. This could happen if the microphone was already enabled
- * and reading into a buffer prior to the nanoapp requesting audio data for
- * itself. The nanoapp must tolerate this.
- *
- * It is important to note that multiple logical audio sources (e.g. different
- * sample rate, format, etc.) may map to one physical audio source. It is
- * possible for a nanoapp to request audio data from more than one logical
- * source at a time. Audio data may be suspended for either the current or other
- * requests. The CHRE_EVENT_AUDIO_SAMPLING_CHANGE will be posted to all clients
- * if such a change occurs. It is also possible for the request to succeed and
- * all audio sources are serviced simultaneously. This is implementation defined
- * but at least one audio source must function correctly if it is advertised,
- * under normal conditions (e.g. not required for some other system function,
- * such as hotword).
- *
- * @param handle The handle for this audio source. The handle for the desired
- * audio source can be determined using chreAudioGetSource().
- * @param enable true if enabling the source, false otherwise. When passed as
- * false, the bufferDuration and deliveryInterval parameters are ignored.
- * @param bufferDuration The amount of time to capture audio samples from this
- * audio source, in nanoseconds per delivery interval. This value must be
- * in the range of minBufferDuration/maxBufferDuration for this source or
- * the request will fail. The number of samples captured per buffer will be
- * derived from the sample rate of the source and the requested duration and
- * rounded down to the nearest sample boundary.
- * @param deliveryInterval Desired time between each CHRE_EVENT_AUDIO_DATA
- * event. This allows specifying the commplete duty cycle of a request
- * for audio data, in nanoseconds. This value must be greater than or equal
- * to bufferDuration or the request will fail due to an invalid
- * configuration.
- * @return true if the configuration was successful, false if invalid parameters
- * were provided (non-existent handle, invalid buffering configuration).
- *
- * @since v1.2
- */
-bool chreAudioConfigureSource(uint32_t handle, bool enable,
- uint64_t bufferDuration,
- uint64_t deliveryInterval);
-
-/**
- * Gets the current chreAudioSourceStatus struct for a given audio handle.
- *
- * @param handle The handle for the audio source to query. The provided handle
- * is obtained from a chreAudioSource which is requested from the
- * chreAudioGetSource API.
- * @param status The current status of the supplied audio source.
- * @return true if the provided handle is valid and the status was obtained
- * successfully, false if the handle was invalid or status is NULL.
- *
- * @since v1.2
- */
-bool chreAudioGetStatus(uint32_t handle, struct chreAudioSourceStatus *status);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CHRE_AUDIO_H_ */