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

Commit f9dd9246 authored by Ytai Ben-Tsvi's avatar Ytai Ben-Tsvi
Browse files

DeviceDescriptorBase parcels to media::AudioPort

It has been determined that all of the subclasses of AudioPort need to
be parceled into media::AudioPort rather than having their own type,
similar to how they correspond to the audio_port_v7 struct.

Test: Audio-related CTS tests from CtsMediaTestCases
Change-Id: I971d9dec990ae7d065a74952f63fa9cb7fed236c
parent 0cf92659
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -314,7 +314,6 @@ aidl_interface {
        "aidl/android/media/AudioUniqueIdUse.aidl",
        "aidl/android/media/AudioUsage.aidl",
        "aidl/android/media/AudioUuid.aidl",
        "aidl/android/media/DeviceDescriptorBase.aidl",
        "aidl/android/media/EffectDescriptor.aidl",
    ],
    imports: [
+0 −34
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.media;

import android.media.AudioPort;
import android.media.AudioPortConfig;
import android.media.AudioDevice;

/**
 * {@hide}
 */
parcelable DeviceDescriptorBase {
    AudioPort port;
    AudioPortConfig portConfig;
    AudioDevice device;
    /** Bitmask, indexed by AudioEncapsulationMode. */
    int encapsulationModes;
    /** Bitmask, indexed by AudioEncapsulationMetadataType. */
    int encapsulationMetadataTypes;
}
+3 −2
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
package android.media;

import android.media.AudioConfig;
import android.media.DeviceDescriptorBase;
import android.media.AudioPort;

/**
 * {@hide}
@@ -26,7 +26,8 @@ parcelable OpenOutputRequest {
    /** Interpreted as audio_module_handle_t. */
    int module;
    AudioConfig config;
    DeviceDescriptorBase device;
    /** Type must be DEVICE. */
    AudioPort device;
    /** Bitmask, indexed by AudioOutputFlag. */
    int flags;
}
+26 −18
Original line number Diff line number Diff line
@@ -159,41 +159,49 @@ bool DeviceDescriptorBase::equals(const sp<DeviceDescriptorBase> &other) const

status_t DeviceDescriptorBase::writeToParcel(Parcel *parcel) const
{
    media::DeviceDescriptorBase parcelable;
    media::AudioPort parcelable;
    return writeToParcelable(&parcelable)
        ?: parcelable.writeToParcel(parcel);
}

status_t DeviceDescriptorBase::writeToParcelable(media::DeviceDescriptorBase* parcelable) const {
    AudioPort::writeToParcelable(&parcelable->port);
    AudioPortConfig::writeToParcelable(&parcelable->portConfig);
    parcelable->device = VALUE_OR_RETURN_STATUS(
            legacy2aidl_AudioDeviceTypeAddress(mDeviceTypeAddr));
    parcelable->encapsulationModes = VALUE_OR_RETURN_STATUS(
status_t DeviceDescriptorBase::writeToParcelable(media::AudioPort* parcelable) const {
    AudioPort::writeToParcelable(parcelable);
    AudioPortConfig::writeToParcelable(&parcelable->activeConfig);
    parcelable->id = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_handle_t_int32_t(mId));

    media::AudioPortDeviceExt ext;
    ext.device = VALUE_OR_RETURN_STATUS(legacy2aidl_AudioDeviceTypeAddress(mDeviceTypeAddr));
    ext.encapsulationModes = VALUE_OR_RETURN_STATUS(
            legacy2aidl_AudioEncapsulationMode_mask(mEncapsulationModes));
    parcelable->encapsulationMetadataTypes = VALUE_OR_RETURN_STATUS(
    ext.encapsulationMetadataTypes = VALUE_OR_RETURN_STATUS(
            legacy2aidl_AudioEncapsulationMetadataType_mask(mEncapsulationMetadataTypes));
    UNION_SET(parcelable->ext, device, std::move(ext));
    return OK;
}

status_t DeviceDescriptorBase::readFromParcel(const Parcel *parcel) {
    media::DeviceDescriptorBase parcelable;
    media::AudioPort parcelable;
    return parcelable.readFromParcel(parcel)
        ?: readFromParcelable(parcelable);
}

status_t DeviceDescriptorBase::readFromParcelable(const media::DeviceDescriptorBase& parcelable) {
    status_t status = AudioPort::readFromParcelable(parcelable.port)
                      ?: AudioPortConfig::readFromParcelable(parcelable.portConfig);
status_t DeviceDescriptorBase::readFromParcelable(const media::AudioPort& parcelable) {
    if (parcelable.type != media::AudioPortType::DEVICE) {
        return BAD_VALUE;
    }
    status_t status = AudioPort::readFromParcelable(parcelable)
                      ?: AudioPortConfig::readFromParcelable(parcelable.activeConfig);
    if (status != OK) {
        return status;
    }

    media::AudioPortDeviceExt ext = VALUE_OR_RETURN_STATUS(UNION_GET(parcelable.ext, device));
    mDeviceTypeAddr = VALUE_OR_RETURN_STATUS(
            aidl2legacy_AudioDeviceTypeAddress(parcelable.device));
            aidl2legacy_AudioDeviceTypeAddress(ext.device));
    mEncapsulationModes = VALUE_OR_RETURN_STATUS(
            aidl2legacy_AudioEncapsulationMode_mask(parcelable.encapsulationModes));
            aidl2legacy_AudioEncapsulationMode_mask(ext.encapsulationModes));
    mEncapsulationMetadataTypes = VALUE_OR_RETURN_STATUS(
            aidl2legacy_AudioEncapsulationMetadataType_mask(parcelable.encapsulationMetadataTypes));
            aidl2legacy_AudioEncapsulationMetadataType_mask(ext.encapsulationMetadataTypes));
    return OK;
}

@@ -219,7 +227,7 @@ AudioDeviceTypeAddrVector deviceTypeAddrsFromDescriptors(const DeviceDescriptorB
}

ConversionResult<sp<DeviceDescriptorBase>>
aidl2legacy_DeviceDescriptorBase(const media::DeviceDescriptorBase& aidl) {
aidl2legacy_DeviceDescriptorBase(const media::AudioPort& aidl) {
    sp<DeviceDescriptorBase> result = new DeviceDescriptorBase(AUDIO_DEVICE_NONE);
    status_t status = result->readFromParcelable(aidl);
    if (status != OK) {
@@ -228,9 +236,9 @@ aidl2legacy_DeviceDescriptorBase(const media::DeviceDescriptorBase& aidl) {
    return result;
}

ConversionResult<media::DeviceDescriptorBase>
ConversionResult<media::AudioPort>
legacy2aidl_DeviceDescriptorBase(const sp<DeviceDescriptorBase>& legacy) {
    media::DeviceDescriptorBase aidl;
    media::AudioPort aidl;
    status_t status = legacy->writeToParcelable(&aidl);
    if (status != OK) {
        return base::unexpected(status);
+5 −5
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@

#include <vector>

#include <android/media/DeviceDescriptorBase.h>
#include <android/media/AudioPort.h>
#include <binder/Parcel.h>
#include <binder/Parcelable.h>
#include <media/AudioContainers.h>
@@ -77,8 +77,8 @@ public:
    status_t writeToParcel(Parcel* parcel) const override;
    status_t readFromParcel(const Parcel* parcel) override;

    status_t writeToParcelable(media::DeviceDescriptorBase* parcelable) const;
    status_t readFromParcelable(const media::DeviceDescriptorBase& parcelable);
    status_t writeToParcelable(media::AudioPort* parcelable) const;
    status_t readFromParcelable(const media::AudioPort& parcelable);

protected:
    AudioDeviceTypeAddr mDeviceTypeAddr;
@@ -113,8 +113,8 @@ AudioDeviceTypeAddrVector deviceTypeAddrsFromDescriptors(const DeviceDescriptorB

// Conversion routines, according to AidlConversion.h conventions.
ConversionResult<sp<DeviceDescriptorBase>>
aidl2legacy_DeviceDescriptorBase(const media::DeviceDescriptorBase& aidl);
ConversionResult<media::DeviceDescriptorBase>
aidl2legacy_DeviceDescriptorBase(const media::AudioPort& aidl);
ConversionResult<media::AudioPort>
legacy2aidl_DeviceDescriptorBase(const sp<DeviceDescriptorBase>& legacy);

} // namespace android