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

Commit 93174e56 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 11005173 from d431fc66 to 24Q1-release

Change-Id: I79c78b40c62210fc63ec0d0e8dd5370ee0bb5953
parents 521e1b57 d431fc66
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -21,6 +21,15 @@ Enable configurable pre-scale absolute volume."
    bug: "302553525"
}

flag {
    name: "bluetooth_mac_address_anonymization"
    namespace: "media_audio"
    description: "\
Enable Bluetooth MAC address anonymization when reporting \
audio device descriptors to non privileged apps."
    bug: "285588444"
}

flag {
    name: "mutex_priority_inheritance"
    namespace: "media_audio"
+18 −2
Original line number Diff line number Diff line
@@ -1069,6 +1069,13 @@ AudioDeviceAddress::Tag suggestDeviceAddressTag(const AudioDeviceDescription& de
            if (mac.size() != 6) return BAD_VALUE;
            snprintf(addressBuffer, AUDIO_DEVICE_MAX_ADDRESS_LEN, "%02X:%02X:%02X:%02X:%02X:%02X",
                    mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
            // special case for anonymized mac address:
            // change anonymized bytes back from FD:FF:FF:FF to XX:XX:XX:XX
            std::string address(addressBuffer);
            if (address.compare(0, strlen("FD:FF:FF:FF"), "FD:FF:FF:FF") == 0) {
                address.replace(0, strlen("FD:FF:FF:FF"), "XX:XX:XX:XX");
            }
            strcpy(addressBuffer, address.c_str());
        } break;
        case Tag::ipv4: {
            const std::vector<uint8_t>& ipv4 = aidl.address.get<AudioDeviceAddress::ipv4>();
@@ -1125,11 +1132,20 @@ legacy2aidl_audio_device_AudioDevice(
    if (!legacyAddress.empty()) {
        switch (suggestDeviceAddressTag(aidl.type)) {
            case Tag::mac: {
                // special case for anonymized mac address:
                // change anonymized bytes so that they can be scanned as HEX bytes
                // Use '01' for LSB bits 0 and 1 as Bluetooth MAC addresses are never multicast
                // and universaly administered
                std::string address = legacyAddress;
                if (address.compare(0, strlen("XX:XX:XX:XX"), "XX:XX:XX:XX") == 0) {
                    address.replace(0, strlen("XX:XX:XX:XX"), "FD:FF:FF:FF");
                }

                std::vector<uint8_t> mac(6);
                int status = sscanf(legacyAddress.c_str(), "%hhX:%hhX:%hhX:%hhX:%hhX:%hhX",
                int status = sscanf(address.c_str(), "%hhX:%hhX:%hhX:%hhX:%hhX:%hhX",
                        &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]);
                if (status != mac.size()) {
                    ALOGE("%s: malformed MAC address: \"%s\"", __func__, legacyAddress.c_str());
                    ALOGE("%s: malformed MAC address: \"%s\"", __func__, address.c_str());
                    return unexpected(BAD_VALUE);
                }
                aidl.address = AudioDeviceAddress::make<AudioDeviceAddress::mac>(std::move(mac));
+1 −1
Original line number Diff line number Diff line
@@ -378,7 +378,7 @@ private:
        struct timespec ts;
        if (timeoutNs >= 0) {
            ts.tv_sec = int(timeoutNs / 1000000000);
            ts.tv_nsec = timeoutNs;
            ts.tv_nsec = timeoutNs % 1000000000;
        } else {
            ALOGD("polling for indefinite duration requested, but changed to wait for %d sec",
                  kPipeFenceWaitLimitSecs);
+20 −0
Original line number Diff line number Diff line
@@ -481,8 +481,28 @@ INSTANTIATE_TEST_SUITE_P(
                                 AudioDeviceAddress::make<AudioDeviceAddress::Tag::alsa>(
                                         std::vector<int32_t>{1, 2}))));

TEST(AnonymizedBluetoothAddressRoundTripTest, Legacy2Aidl2Legacy) {
    const std::vector<uint8_t> sAnonymizedAidlAddress =
            std::vector<uint8_t>{0xFD, 0xFF, 0xFF, 0xFF, 0xAB, 0xCD};
    const std::string sAnonymizedLegacyAddress = std::string("XX:XX:XX:XX:AB:CD");
    auto device = legacy2aidl_audio_device_AudioDevice(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP,
                                                       sAnonymizedLegacyAddress);
    ASSERT_TRUE(device.ok());
    ASSERT_EQ(AudioDeviceAddress::Tag::mac, device.value().address.getTag());
    ASSERT_EQ(sAnonymizedAidlAddress, device.value().address.get<AudioDeviceAddress::mac>());

    audio_devices_t legacyType;
    std::string legacyAddress;
    status_t status =
            aidl2legacy_AudioDevice_audio_device(device.value(), &legacyType, &legacyAddress);
    ASSERT_EQ(OK, status);
    EXPECT_EQ(legacyType, AUDIO_DEVICE_OUT_BLUETOOTH_A2DP);
    EXPECT_EQ(sAnonymizedLegacyAddress, legacyAddress);
}

class AudioFormatDescriptionRoundTripTest : public testing::TestWithParam<AudioFormatDescription> {
};

TEST_P(AudioFormatDescriptionRoundTripTest, Aidl2Legacy2Aidl) {
    const auto initial = GetParam();
    auto conv = aidl2legacy_AudioFormatDescription_audio_format_t(initial);
+4 −4
Original line number Diff line number Diff line
@@ -672,7 +672,7 @@ uint8_t* AMediaCodec_getInputBuffer(AMediaCodec *mData, size_t idx, size_t *out_
        if (out_size != NULL) {
            *out_size = abuf->capacity();
        }
        return abuf->base();
        return abuf->data();
    }

    android::Vector<android::sp<android::MediaCodecBuffer> > abufs;
@@ -689,7 +689,7 @@ uint8_t* AMediaCodec_getInputBuffer(AMediaCodec *mData, size_t idx, size_t *out_
        if (out_size != NULL) {
            *out_size = abufs[idx]->capacity();
        }
        return abufs[idx]->base();
        return abufs[idx]->data();
    }
    ALOGE("couldn't get input buffers");
    return NULL;
@@ -707,7 +707,7 @@ uint8_t* AMediaCodec_getOutputBuffer(AMediaCodec *mData, size_t idx, size_t *out
        if (out_size != NULL) {
            *out_size = abuf->capacity();
        }
        return abuf->base();
        return abuf->data();
    }

    android::Vector<android::sp<android::MediaCodecBuffer> > abufs;
@@ -720,7 +720,7 @@ uint8_t* AMediaCodec_getOutputBuffer(AMediaCodec *mData, size_t idx, size_t *out
        if (out_size != NULL) {
            *out_size = abufs[idx]->capacity();
        }
        return abufs[idx]->base();
        return abufs[idx]->data();
    }
    ALOGE("couldn't get output buffers");
    return NULL;
Loading