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

Commit f27ff142 authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

audio: Enable use of 'expected_utils' for ScopedAStatus

Add necessary helper functions and use
RETURN_STATUS_IF_ERROR where possible.

Bug: 282568751
Test: atest VtsHalAudioCoreTargetTest
Merged-In: If68c995da0e5e0cb2e9c142ba40af6503ff628b2
Change-Id: If68c995da0e5e0cb2e9c142ba40af6503ff628b2
(cherry picked from commit 26dc9add)
parent 45ab8f31
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -29,6 +29,21 @@
#include <aidl/android/media/audio/common/AudioMode.h>
#include <aidl/android/media/audio/common/AudioOutputFlags.h>
#include <aidl/android/media/audio/common/PcmType.h>
#include <android/binder_auto_utils.h>

namespace ndk {

// This enables use of 'error/expected_utils' for ScopedAStatus.

inline bool errorIsOk(const ScopedAStatus& s) {
    return s.isOk();
}

inline std::string errorToString(const ScopedAStatus& s) {
    return s.getDescription();
}

}  // namespace ndk

namespace aidl::android::hardware::audio::common {

+16 −38
Original line number Diff line number Diff line
@@ -18,12 +18,12 @@
#include <set>

#define LOG_TAG "AHAL_Module"
#include <android-base/logging.h>
#include <android/binder_ibinder_platform.h>

#include <Utils.h>
#include <aidl/android/media/audio/common/AudioInputFlags.h>
#include <aidl/android/media/audio/common/AudioOutputFlags.h>
#include <android-base/logging.h>
#include <android/binder_ibinder_platform.h>
#include <error/expected_utils.h>

#include "core-impl/Bluetooth.h"
#include "core-impl/Module.h"
@@ -470,10 +470,7 @@ ndk::ScopedAStatus Module::connectExternalDevice(const AudioPort& in_templateIdA
    }

    if (!mDebug.simulateDeviceConnections) {
        if (ndk::ScopedAStatus status = populateConnectedDevicePort(&connectedPort);
            !status.isOk()) {
            return status;
        }
        RETURN_STATUS_IF_ERROR(populateConnectedDevicePort(&connectedPort));
    } else {
        auto& connectedProfiles = getConfig().connectedProfiles;
        if (auto connectedProfilesIt = connectedProfiles.find(templateId);
@@ -648,27 +645,19 @@ ndk::ScopedAStatus Module::openInputStream(const OpenInputStreamArguments& in_ar
    LOG(DEBUG) << __func__ << ": port config id " << in_args.portConfigId << ", buffer size "
               << in_args.bufferSizeFrames << " frames";
    AudioPort* port = nullptr;
    if (auto status = findPortIdForNewStream(in_args.portConfigId, &port); !status.isOk()) {
        return status;
    }
    RETURN_STATUS_IF_ERROR(findPortIdForNewStream(in_args.portConfigId, &port));
    if (port->flags.getTag() != AudioIoFlags::Tag::input) {
        LOG(ERROR) << __func__ << ": port config id " << in_args.portConfigId
                   << " does not correspond to an input mix port";
        return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
    }
    StreamContext context;
    if (auto status = createStreamContext(in_args.portConfigId, in_args.bufferSizeFrames, nullptr,
                                          nullptr, &context);
        !status.isOk()) {
        return status;
    }
    RETURN_STATUS_IF_ERROR(createStreamContext(in_args.portConfigId, in_args.bufferSizeFrames,
                                               nullptr, nullptr, &context));
    context.fillDescriptor(&_aidl_return->desc);
    std::shared_ptr<StreamIn> stream;
    ndk::ScopedAStatus status = getStreamInCreator(mType)(in_args.sinkMetadata, std::move(context),
                                                          mConfig->microphones, &stream);
    if (!status.isOk()) {
        return status;
    }
    RETURN_STATUS_IF_ERROR(getStreamInCreator(mType)(in_args.sinkMetadata, std::move(context),
                                                     mConfig->microphones, &stream));
    StreamWrapper streamWrapper(stream);
    AIBinder_setMinSchedulerPolicy(streamWrapper.getBinder().get(), SCHED_NORMAL,
                                   ANDROID_PRIORITY_AUDIO);
@@ -687,9 +676,7 @@ ndk::ScopedAStatus Module::openOutputStream(const OpenOutputStreamArguments& in_
               << (in_args.offloadInfo.has_value()) << ", buffer size " << in_args.bufferSizeFrames
               << " frames";
    AudioPort* port = nullptr;
    if (auto status = findPortIdForNewStream(in_args.portConfigId, &port); !status.isOk()) {
        return status;
    }
    RETURN_STATUS_IF_ERROR(findPortIdForNewStream(in_args.portConfigId, &port));
    if (port->flags.getTag() != AudioIoFlags::Tag::output) {
        LOG(ERROR) << __func__ << ": port config id " << in_args.portConfigId
                   << " does not correspond to an output mix port";
@@ -710,19 +697,13 @@ ndk::ScopedAStatus Module::openOutputStream(const OpenOutputStreamArguments& in_
        return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
    }
    StreamContext context;
    if (auto status = createStreamContext(in_args.portConfigId, in_args.bufferSizeFrames,
    RETURN_STATUS_IF_ERROR(createStreamContext(in_args.portConfigId, in_args.bufferSizeFrames,
                                               isNonBlocking ? in_args.callback : nullptr,
                                          in_args.eventCallback, &context);
        !status.isOk()) {
        return status;
    }
                                               in_args.eventCallback, &context));
    context.fillDescriptor(&_aidl_return->desc);
    std::shared_ptr<StreamOut> stream;
    ndk::ScopedAStatus status = getStreamOutCreator(mType)(
            in_args.sourceMetadata, std::move(context), in_args.offloadInfo, &stream);
    if (!status.isOk()) {
        return status;
    }
    RETURN_STATUS_IF_ERROR(getStreamOutCreator(mType)(in_args.sourceMetadata, std::move(context),
                                                      in_args.offloadInfo, &stream));
    StreamWrapper streamWrapper(stream);
    AIBinder_setMinSchedulerPolicy(streamWrapper.getBinder().get(), SCHED_NORMAL,
                                   ANDROID_PRIORITY_AUDIO);
@@ -797,10 +778,7 @@ ndk::ScopedAStatus Module::setAudioPatch(const AudioPatch& in_requested, AudioPa
            return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
        }
    }

    if (auto status = checkAudioPatchEndpointsMatch(sources, sinks); !status.isOk()) {
        return status;
    }
    RETURN_STATUS_IF_ERROR(checkAudioPatchEndpointsMatch(sources, sinks));

    auto& patches = getConfig().patches;
    auto existing = patches.end();