mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Merge "audio hal: Update offload configuration" into rvc-dev
This commit is contained in:
@@ -903,6 +903,25 @@ enum AudioContentType : uint32_t {
|
||||
SONIFICATION = 4,
|
||||
};
|
||||
|
||||
/** Encapsulation mode used for sending audio compressed data. */
|
||||
@export(name="audio_encapsulation_mode_t", value_prefix="AUDIO_ENCAPSULATION_MODE_")
|
||||
enum AudioEncapsulationMode : int32_t {
|
||||
// Do not change these values without updating their counterparts
|
||||
// in frameworks/base/media/java/android/media/AudioTrack.java
|
||||
/**
|
||||
* No encapsulation mode for metadata.
|
||||
*/
|
||||
NONE = 0,
|
||||
/**
|
||||
* Elementary stream payload with metadata
|
||||
*/
|
||||
ELEMENTARY_STREAM = 1,
|
||||
/**
|
||||
* Handle-based payload with metadata
|
||||
*/
|
||||
HANDLE = 2,
|
||||
};
|
||||
|
||||
/**
|
||||
* Additional information about the stream passed to hardware decoders.
|
||||
*/
|
||||
@@ -918,6 +937,9 @@ struct AudioOffloadInfo {
|
||||
uint32_t bitWidth;
|
||||
uint32_t bufferSize;
|
||||
AudioUsage usage;
|
||||
AudioEncapsulationMode encapsulationMode;
|
||||
int32_t contentId;
|
||||
int32_t syncId;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,12 +28,13 @@ namespace common {
|
||||
namespace CPP_VERSION {
|
||||
namespace implementation {
|
||||
|
||||
void HidlUtils::audioConfigFromHal(const audio_config_t& halConfig, AudioConfig* config) {
|
||||
status_t HidlUtils::audioConfigFromHal(const audio_config_t& halConfig, AudioConfig* config) {
|
||||
config->sampleRateHz = halConfig.sample_rate;
|
||||
config->channelMask = EnumBitfield<AudioChannelMask>(halConfig.channel_mask);
|
||||
config->format = AudioFormat(halConfig.format);
|
||||
audioOffloadInfoFromHal(halConfig.offload_info, &config->offloadInfo);
|
||||
status_t status = audioOffloadInfoFromHal(halConfig.offload_info, &config->offloadInfo);
|
||||
config->frameCount = halConfig.frame_count;
|
||||
return status;
|
||||
}
|
||||
|
||||
void HidlUtils::audioConfigToHal(const AudioConfig& config, audio_config_t* halConfig) {
|
||||
@@ -106,8 +107,8 @@ audio_usage_t HidlUtils::audioUsageToHal(const AudioUsage usage) {
|
||||
return static_cast<audio_usage_t>(usage);
|
||||
}
|
||||
|
||||
void HidlUtils::audioOffloadInfoFromHal(const audio_offload_info_t& halOffload,
|
||||
AudioOffloadInfo* offload) {
|
||||
status_t HidlUtils::audioOffloadInfoFromHal(const audio_offload_info_t& halOffload,
|
||||
AudioOffloadInfo* offload) {
|
||||
offload->sampleRateHz = halOffload.sample_rate;
|
||||
offload->channelMask = EnumBitfield<AudioChannelMask>(halOffload.channel_mask);
|
||||
offload->format = AudioFormat(halOffload.format);
|
||||
@@ -119,6 +120,26 @@ void HidlUtils::audioOffloadInfoFromHal(const audio_offload_info_t& halOffload,
|
||||
offload->bitWidth = halOffload.bit_width;
|
||||
offload->bufferSize = halOffload.offload_buffer_size;
|
||||
offload->usage = audioUsageFromHal(halOffload.usage);
|
||||
#if MAJOR_VERSION >= 6
|
||||
if (halOffload.version >= AUDIO_OFFLOAD_INFO_VERSION_0_2) {
|
||||
offload->encapsulationMode =
|
||||
static_cast<AudioEncapsulationMode>(halOffload.encapsulation_mode);
|
||||
offload->contentId = halOffload.content_id;
|
||||
offload->syncId = halOffload.sync_id;
|
||||
} else {
|
||||
offload->encapsulationMode = AudioEncapsulationMode::NONE;
|
||||
offload->contentId = 0;
|
||||
offload->syncId = 0;
|
||||
}
|
||||
#else
|
||||
// nonzero values here are not compatible with HAL versions below 6.
|
||||
if (halOffload.version >= AUDIO_OFFLOAD_INFO_VERSION_0_2 &&
|
||||
(halOffload.encapsulation_mode != AUDIO_ENCAPSULATION_MODE_NONE ||
|
||||
halOffload.content_id != 0 || halOffload.sync_id != 0)) {
|
||||
return BAD_VALUE;
|
||||
}
|
||||
#endif
|
||||
return OK;
|
||||
}
|
||||
|
||||
void HidlUtils::audioOffloadInfoToHal(const AudioOffloadInfo& offload,
|
||||
@@ -135,6 +156,14 @@ void HidlUtils::audioOffloadInfoToHal(const AudioOffloadInfo& offload,
|
||||
halOffload->bit_width = offload.bitWidth;
|
||||
halOffload->offload_buffer_size = offload.bufferSize;
|
||||
halOffload->usage = audioUsageToHal(offload.usage);
|
||||
#if MAJOR_VERSION >= 6
|
||||
halOffload->encapsulation_mode =
|
||||
static_cast<audio_encapsulation_mode_t>(offload.encapsulationMode);
|
||||
halOffload->content_id = offload.contentId;
|
||||
halOffload->sync_id = offload.syncId;
|
||||
#else
|
||||
// offload doesn't contain encapsulationMode, contentId, syncId, so this is OK.
|
||||
#endif
|
||||
}
|
||||
|
||||
void HidlUtils::audioPortConfigFromHal(const struct audio_port_config& halConfig,
|
||||
|
||||
@@ -35,8 +35,11 @@ namespace implementation {
|
||||
using namespace ::android::hardware::audio::common::CPP_VERSION;
|
||||
|
||||
class HidlUtils {
|
||||
public:
|
||||
static void audioConfigFromHal(const audio_config_t& halConfig, AudioConfig* config);
|
||||
public:
|
||||
// A failure here indicates a platform config that is incompatible with
|
||||
// the compiled HIDL interface version.
|
||||
static status_t audioConfigFromHal(const audio_config_t& halConfig, AudioConfig* config);
|
||||
|
||||
static void audioConfigToHal(const AudioConfig& config, audio_config_t* halConfig);
|
||||
static void audioGainConfigFromHal(const struct audio_gain_config& halConfig,
|
||||
AudioGainConfig* config);
|
||||
@@ -46,8 +49,10 @@ class HidlUtils {
|
||||
static void audioGainToHal(const AudioGain& gain, struct audio_gain* halGain);
|
||||
static AudioUsage audioUsageFromHal(const audio_usage_t halUsage);
|
||||
static audio_usage_t audioUsageToHal(const AudioUsage usage);
|
||||
static void audioOffloadInfoFromHal(const audio_offload_info_t& halOffload,
|
||||
AudioOffloadInfo* offload);
|
||||
// A failure here indicates a platform offload info that is incompatible with
|
||||
// the compiled HIDL interface version.
|
||||
static status_t audioOffloadInfoFromHal(const audio_offload_info_t& halOffload,
|
||||
AudioOffloadInfo* offload);
|
||||
static void audioOffloadInfoToHal(const AudioOffloadInfo& offload,
|
||||
audio_offload_info_t* halOffload);
|
||||
static void audioPortConfigFromHal(const struct audio_port_config& halConfig,
|
||||
@@ -58,7 +63,7 @@ class HidlUtils {
|
||||
const struct audio_port_config* halConfigs,
|
||||
hidl_vec<AudioPortConfig>* configs);
|
||||
static std::unique_ptr<audio_port_config[]> audioPortConfigsToHal(
|
||||
const hidl_vec<AudioPortConfig>& configs);
|
||||
const hidl_vec<AudioPortConfig>& configs);
|
||||
static void audioPortFromHal(const struct audio_port& halPort, AudioPort* port);
|
||||
static void audioPortToHal(const AudioPort& port, struct audio_port* halPort);
|
||||
static void uuidFromHal(const audio_uuid_t& halUuid, Uuid* uuid);
|
||||
|
||||
@@ -171,7 +171,8 @@ std::tuple<Result, sp<IStreamOut>> Device::openOutputStreamImpl(int32_t ioHandle
|
||||
streamOut = new StreamOut(this, halStream);
|
||||
++mOpenedStreamsCount;
|
||||
}
|
||||
HidlUtils::audioConfigFromHal(halConfig, suggestedConfig);
|
||||
status_t convertStatus = HidlUtils::audioConfigFromHal(halConfig, suggestedConfig);
|
||||
ALOGW_IF(convertStatus != OK, "%s: suggested config with incompatible fields", __func__);
|
||||
return {analyzeStatus("open_output_stream", status, {EINVAL} /*ignore*/), streamOut};
|
||||
}
|
||||
|
||||
@@ -198,7 +199,8 @@ std::tuple<Result, sp<IStreamIn>> Device::openInputStreamImpl(
|
||||
streamIn = new StreamIn(this, halStream);
|
||||
++mOpenedStreamsCount;
|
||||
}
|
||||
HidlUtils::audioConfigFromHal(halConfig, suggestedConfig);
|
||||
status_t convertStatus = HidlUtils::audioConfigFromHal(halConfig, suggestedConfig);
|
||||
ALOGW_IF(convertStatus != OK, "%s: suggested config with incompatible fields", __func__);
|
||||
return {analyzeStatus("open_input_stream", status, {EINVAL} /*ignore*/), streamIn};
|
||||
}
|
||||
|
||||
|
||||
@@ -613,7 +613,7 @@ fd1f1b29f26b42e886220f04a08086c00e5ade9d7b53f095438e578ab9d42a93 android.hardwar
|
||||
2df5d5866b37776f25079c0e54b54350a2abe4e025a59c9e02a7d3abe8ca00e8 android.hardware.audio@6.0::IStreamIn
|
||||
e6cd2b7c1a86b6ca683c0224ffde3b73aa14f6487de9f46833e539d26d1b3b5c android.hardware.audio@6.0::IStreamOut
|
||||
997fdaad7a9d17ee7e01feb7031a753e2365e72ad30b11d950e9183fabdf3844 android.hardware.audio@6.0::IStreamOutCallback
|
||||
167ed5cfb7d91db2e2bf20f1320c1a9004eeb768e26f535e0f7db94a21867d21 android.hardware.audio.common@6.0::types
|
||||
bee662c62d997d8065e2bcb5c1e7a9578931f22ce28fd02c219fdb4d0630abf7 android.hardware.audio.common@6.0::types
|
||||
817930d58412d662cb45e641c50cb62c727e4a3e3ffe7029a53cad9677b97d58 android.hardware.audio.effect@6.0::types
|
||||
525bec6b44f1103869c269a128d51b8dccd73af5340ba863c8886c68357c7faf android.hardware.audio.effect@6.0::IAcousticEchoCancelerEffect
|
||||
8d76bbe3719d051a8e9a1dcf9244f37f5b0a491feb249fa48391edf7cb4f3131 android.hardware.audio.effect@6.0::IAutomaticGainControlEffect
|
||||
|
||||
Reference in New Issue
Block a user