Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e01472a3 authored by Andy Hung's avatar Andy Hung Committed by Android (Google) Code Review
Browse files

Merge "audio hal: Update offload configuration"

parents 6f3fdba6 c91b679a
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -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;
};

/**
+33 −4
Original line number Diff line number Diff line
@@ -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,7 +107,7 @@ audio_usage_t HidlUtils::audioUsageToHal(const AudioUsage usage) {
    return static_cast<audio_usage_t>(usage);
}

void HidlUtils::audioOffloadInfoFromHal(const audio_offload_info_t& halOffload,
status_t HidlUtils::audioOffloadInfoFromHal(const audio_offload_info_t& halOffload,
                                            AudioOffloadInfo* offload) {
    offload->sampleRateHz = halOffload.sample_rate;
    offload->channelMask = EnumBitfield<AudioChannelMask>(halOffload.channel_mask);
@@ -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,
+10 −5
Original line number Diff line number Diff line
@@ -36,7 +36,10 @@ using namespace ::android::hardware::audio::common::CPP_VERSION;

class HidlUtils {
  public:
    static void audioConfigFromHal(const audio_config_t& halConfig, AudioConfig* config);
    // 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,7 +49,9 @@ 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,
    // 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);
+4 −2
Original line number Diff line number Diff line
@@ -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};
}

+1 −1
Original line number Diff line number Diff line
@@ -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