Audio HAL: Add latency mode APIs

Add APis for controlling the latency mode on an output stream.
Latency mode control is optional but mandated if spatial audio with
head tracking is supported over Bluetooth classic audio link.

Bug: 187446271
Test: make
Change-Id: I30a7f34a265ddac69b283c803b5729770426ebf1
This commit is contained in:
Eric Laurent 2022-01-27 15:55:40 +01:00
parent f4e1d6a272
commit e689139808

View file

@ -247,6 +247,10 @@ typedef struct sink_metadata_v7 {
struct record_track_metadata_v7* tracks;
} sink_metadata_v7_t;
/** output stream callback method to indicate changes in supported latency modes */
typedef void (*stream_latency_mode_callback_t)(
audio_latency_mode_t *modes, size_t num_modes, void *cookie);
/**
* audio_stream_out is the abstraction interface for the audio output hardware.
*
@ -533,7 +537,68 @@ struct audio_stream_out {
*/
int (*set_playback_rate_parameters)(struct audio_stream_out *stream,
const audio_playback_rate_t *playbackRate);
/**
* Indicates the requested latency mode for this output stream.
*
* The requested mode can be one of the modes returned by
* get_recommended_latency_modes().
*
* Support for this method is optional but mandated on specific spatial audio
* streams indicated by AUDIO_OUTPUT_FLAG_SPATIALIZER flag if they can be routed
* to a BT classic sink.
*
* \param[in] stream the stream object.
* \param[in] mode the requested latency mode.
* \return 0 in case of success.
* -EINVAL if the arguments are invalid
* -ENOSYS if the function is not available
*/
int (*set_latency_mode)(struct audio_stream_out *stream, audio_latency_mode_t mode);
/**
* Indicates which latency modes are currently supported on this output stream.
* If the transport protocol (e.g Bluetooth A2DP) used by this output stream to reach
* the output device supports variable latency modes, the HAL indicates which
* modes are currently supported.
* The framework can then call setLatencyMode() with one of the supported modes to select
* the desired operation mode.
*
* Support for this method is optional but mandated on specific spatial audio
* streams indicated by AUDIO_OUTPUT_FLAG_SPATIALIZER flag if they can be routed
* to a BT classic sink.
*
* \return 0 in case of success.
* -EINVAL if the arguments are invalid
* -ENOSYS if the function is not available
* \param[in] stream the stream object.
* \param[out] modes the supported latency modes.
* \param[in/out] num_modes as input the maximum number of modes to return,
* as output the actual number of modes returned.
*/
int (*get_recommended_latency_modes)(struct audio_stream_out *stream,
audio_latency_mode_t *modes, size_t *num_modes);
/**
* Set the callback interface for notifying changes in supported latency modes.
*
* Calling this method with a null pointer will result in clearing a previously set callback.
*
* Support for this method is optional but mandated on specific spatial audio
* streams indicated by AUDIO_OUTPUT_FLAG_SPATIALIZER flag if they can be routed
* to a BT classic sink.
*
* \param[in] stream the stream object.
* \param[in] callback the registered callback or null to unregister.
* \param[in] cookie the context to pass when calling the callback.
* \return 0 in case of success.
* -EINVAL if the arguments are invalid
* -ENOSYS if the function is not available
*/
int (*set_latency_mode_callback)(struct audio_stream_out *stream,
stream_latency_mode_callback_t callback, void *cookie);
};
typedef struct audio_stream_out audio_stream_out_t;
struct audio_stream_in {