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

Commit 10d86fd0 authored by jiabin's avatar jiabin
Browse files

Refactor audio device type in audio flinger.

As audio device type must not be used as a bit mask, there is a
requirement to refactor the code in audio flinger. This CL includes:
1. Use DeviceTypeSet for recording output devices in Threads. The input
and output device types in Threads will only be updated when creating
an audio patch.
2. Use helper functions in audio flinger for checking whether an audio
device type is a certain category.
3. Use DeviceDescriptorBaseVector as vector of DeviceDescriptorBase.
DeviceDescriptorBaseVector will be used in RecordThread to record output
devices, which will be used in audio effect.
4. Do not use set parameters when communicating output devices to
RecordThread. Instead, adding a new event in Thread to update output
devices directly.

Bug: 135621476
Test: atest AudioTrackTest AudioRecordTest AudioPlaybackCaptureTest
Test: atest AudioHostTest AudioServiceHostTest RoutingTest
Test: atest AudioEffectTest BassBoostTest DynamicsProcessingTest
Test: atest AAudioTests
Test: audio smoke test, run OboeTester
Change-Id: I87f3e59fd01b0b100232d61a9abbc471c61110c4
Merged-In: I87f3e59fd01b0b100232d61a9abbc471c61110c4
parent c010683e
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -50,6 +50,10 @@ const DeviceTypeSet& getAudioDeviceInAllSet() {
}

bool deviceTypesToString(const DeviceTypeSet &deviceTypes, std::string &str) {
    if (deviceTypes.empty()) {
        str = "Empty device types";
        return true;
    }
    bool ret = true;
    for (auto it = deviceTypes.begin(); it != deviceTypes.end();) {
        std::string deviceTypeStr;
@@ -83,4 +87,10 @@ std::string dumpDeviceTypes(const DeviceTypeSet &deviceTypes) {
    return ret;
}

std::string toString(const DeviceTypeSet& deviceTypes) {
    std::string ret;
    deviceTypesToString(deviceTypes, ret);
    return ret;
}

} // namespace android
+14 −0
Original line number Diff line number Diff line
@@ -26,6 +26,11 @@ bool AudioDeviceTypeAddr::equals(const AudioDeviceTypeAddr& other) const {
    return mType == other.mType && mAddress == other.mAddress;
}

void AudioDeviceTypeAddr::reset() {
    mType = AUDIO_DEVICE_NONE;
    mAddress = "";
}

status_t AudioDeviceTypeAddr::readFromParcel(const Parcel *parcel) {
    status_t status;
    if ((status = parcel->readUint32(&mType)) != NO_ERROR) return status;
@@ -40,4 +45,13 @@ status_t AudioDeviceTypeAddr::writeToParcel(Parcel *parcel) const {
    return status;
}


DeviceTypeSet getAudioDeviceTypes(const AudioDeviceTypeAddrVector& deviceTypeAddrs) {
    DeviceTypeSet deviceTypes;
    for (const auto& deviceTypeAddr : deviceTypeAddrs) {
        deviceTypes.insert(deviceTypeAddr.mType);
    }
    return deviceTypes;
}

}
 No newline at end of file
+21 −0
Original line number Diff line number Diff line
@@ -137,4 +137,25 @@ status_t DeviceDescriptorBase::readFromParcel(const Parcel *parcel)
    return status;
}

std::string toString(const DeviceDescriptorBaseVector& devices)
{
    std::string ret;
    for (const auto& device : devices) {
        if (device != *devices.begin()) {
            ret += ";";
        }
        ret += device->toString();
    }
    return ret;
}

AudioDeviceTypeAddrVector deviceTypeAddrsFromDescriptors(const DeviceDescriptorBaseVector& devices)
{
    AudioDeviceTypeAddrVector deviceTypeAddrs;
    for (const auto& device : devices) {
        deviceTypeAddrs.push_back(device->getDeviceTypeAddr());
    }
    return deviceTypeAddrs;
}

} // namespace android
+5 −0
Original line number Diff line number Diff line
@@ -123,5 +123,10 @@ bool deviceTypesToString(const DeviceTypeSet& deviceTypes, std::string &str);

std::string dumpDeviceTypes(const DeviceTypeSet& deviceTypes);

/**
 * Return human readable string for device types.
 */
std::string toString(const DeviceTypeSet& deviceTypes);


} // namespace android
 No newline at end of file
+11 −0
Original line number Diff line number Diff line
@@ -17,9 +17,11 @@
#pragma once

#include <string>
#include <vector>

#include <binder/Parcelable.h>
#include <binder/Parcel.h>
#include <media/AudioContainers.h>
#include <system/audio.h>
#include <utils/Errors.h>

@@ -35,6 +37,8 @@ struct AudioDeviceTypeAddr : public Parcelable {

    bool equals(const AudioDeviceTypeAddr& other) const;

    void reset();

    status_t readFromParcel(const Parcel *parcel) override;

    status_t writeToParcel(Parcel *parcel) const override;
@@ -43,4 +47,11 @@ struct AudioDeviceTypeAddr : public Parcelable {
    std::string mAddress;
};

using AudioDeviceTypeAddrVector = std::vector<AudioDeviceTypeAddr>;

/**
 * Return a collection of audio device types from a collection of AudioDeviceTypeAddr
 */
DeviceTypeSet getAudioDeviceTypes(const AudioDeviceTypeAddrVector& deviceTypeAddrs);

}
Loading