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

Commit ec085451 authored by Mikhail Naganov's avatar Mikhail Naganov Committed by Gerrit Code Review
Browse files

Merge "audio: add calculateBufferSizeFrames for vendor implementation." into main

parents 00035204 10a768a0
Loading
Loading
Loading
Loading
+26 −4
Original line number Diff line number Diff line
@@ -184,8 +184,12 @@ ndk::ScopedAStatus Module::createStreamContext(
    const int32_t nominalLatencyMs = getNominalLatencyMs(*portConfigIt);
    // Since this is a private method, it is assumed that
    // validity of the portConfigId has already been checked.
    const int32_t minimumStreamBufferSizeFrames =
            calculateBufferSizeFrames(nominalLatencyMs, portConfigIt->sampleRate.value().value);
    int32_t minimumStreamBufferSizeFrames = 0;
    if (!calculateBufferSizeFrames(
                portConfigIt->format.value(), nominalLatencyMs,
                portConfigIt->sampleRate.value().value, &minimumStreamBufferSizeFrames).isOk()) {
        return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
    }
    if (in_bufferSizeFrames < minimumStreamBufferSizeFrames) {
        LOG(ERROR) << __func__ << ": " << mType << ": insufficient buffer size "
                   << in_bufferSizeFrames << ", must be at least " << minimumStreamBufferSizeFrames;
@@ -378,6 +382,18 @@ int32_t Module::getNominalLatencyMs(const AudioPortConfig&) {
    return kLatencyMs;
}

ndk::ScopedAStatus Module::calculateBufferSizeFrames(
        const ::aidl::android::media::audio::common::AudioFormatDescription &format,
        int32_t latencyMs, int32_t sampleRateHz, int32_t *bufferSizeFrames) {
    if (format.type == AudioFormatType::PCM) {
        *bufferSizeFrames = calculateBufferSizeFramesForPcm(latencyMs, sampleRateHz);
        return ndk::ScopedAStatus::ok();
    }
    LOG(ERROR) << __func__ << ": " << mType << ": format " << format.toString()
        << " is not supported";
    return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
}

ndk::ScopedAStatus Module::createMmapBuffer(
        const ::aidl::android::hardware::audio::core::StreamContext& context __unused,
        ::aidl::android::hardware::audio::core::StreamDescriptor* desc __unused) {
@@ -1123,8 +1139,14 @@ ndk::ScopedAStatus Module::setAudioPatch(const AudioPatch& in_requested, AudioPa
    *_aidl_return = in_requested;
    auto maxSampleRateIt = std::max_element(sampleRates.begin(), sampleRates.end());
    const int32_t latencyMs = getNominalLatencyMs(*(maxSampleRateIt->second));
    _aidl_return->minimumStreamBufferSizeFrames =
            calculateBufferSizeFrames(latencyMs, maxSampleRateIt->first);
    if (!calculateBufferSizeFrames(
                maxSampleRateIt->second->format.value(), latencyMs, maxSampleRateIt->first,
                &_aidl_return->minimumStreamBufferSizeFrames).isOk()) {
        if (patchesBackup.has_value()) {
            mPatches = std::move(*patchesBackup);
        }
        return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
    }
    _aidl_return->latenciesMs.clear();
    _aidl_return->latenciesMs.insert(_aidl_return->latenciesMs.end(),
                                     _aidl_return->sinkPortConfigIds.size(), latencyMs);
+4 −1
Original line number Diff line number Diff line
@@ -207,12 +207,15 @@ class Module : public BnModule {
    virtual std::unique_ptr<Configuration> initializeConfig();
    virtual int32_t getNominalLatencyMs(
            const ::aidl::android::media::audio::common::AudioPortConfig& portConfig);
    virtual ndk::ScopedAStatus calculateBufferSizeFrames(
            const ::aidl::android::media::audio::common::AudioFormatDescription &format,
            int32_t latencyMs, int32_t sampleRateHz, int32_t *bufferSizeFrames);
    virtual ndk::ScopedAStatus createMmapBuffer(
            const ::aidl::android::hardware::audio::core::StreamContext& context,
            ::aidl::android::hardware::audio::core::StreamDescriptor* desc);

    // Utility and helper functions accessible to subclasses.
    static int32_t calculateBufferSizeFrames(int32_t latencyMs, int32_t sampleRateHz) {
    static int32_t calculateBufferSizeFramesForPcm(int32_t latencyMs, int32_t sampleRateHz) {
        const int32_t rawSizeFrames =
                aidl::android::hardware::audio::common::frameCountFromDurationMs(latencyMs,
                                                                                 sampleRateHz);