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

Commit 8c5bb45d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Refactor opening output interface between AF and AP."

parents 200d15a9 4381040f
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
cc_library_headers {
    name: "libaudioclient_headers",
    vendor_available: true,
    export_include_dirs: ["include"],
    header_libs: [
        "libaudiofoundation_headers",
    ],
    export_include_dirs: [
        "include",
    ],
    export_header_lib_headers: [
        "libaudiofoundation_headers",
    ],
}

cc_library_shared {
@@ -63,6 +71,7 @@ cc_library_shared {
        "TrackPlayerBase.cpp",
    ],
    shared_libs: [
        "libaudiofoundation",
        "libaudioutils",
        "libaudiopolicy",
        "libaudiomanager",
+10 −11
Original line number Diff line number Diff line
@@ -392,20 +392,18 @@ public:
    virtual status_t openOutput(audio_module_handle_t module,
                                audio_io_handle_t *output,
                                audio_config_t *config,
                                audio_devices_t *devices,
                                const String8& address,
                                const sp<DeviceDescriptorBase>& device,
                                uint32_t *latencyMs,
                                audio_output_flags_t flags)
    {
        if (output == NULL || config == NULL || devices == NULL || latencyMs == NULL) {
        if (output == nullptr || config == nullptr || device == nullptr || latencyMs == nullptr) {
            return BAD_VALUE;
        }
        Parcel data, reply;
        data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
        data.writeInt32(module);
        data.write(config, sizeof(audio_config_t));
        data.writeInt32(*devices);
        data.writeString8(address);
        data.writeParcelable(*device);
        data.writeInt32((int32_t) flags);
        status_t status = remote()->transact(OPEN_OUTPUT, data, &reply);
        if (status != NO_ERROR) {
@@ -420,7 +418,6 @@ public:
        *output = (audio_io_handle_t)reply.readInt32();
        ALOGV("openOutput() returned output, %d", *output);
        reply.read(config, sizeof(audio_config_t));
        *devices = (audio_devices_t)reply.readInt32();
        *latencyMs = reply.readInt32();
        return NO_ERROR;
    }
@@ -1198,19 +1195,21 @@ status_t BnAudioFlinger::onTransact(
            if (data.read(&config, sizeof(audio_config_t)) != NO_ERROR) {
                ALOGE("b/23905951");
            }
            audio_devices_t devices = (audio_devices_t)data.readInt32();
            String8 address(data.readString8());
            sp<DeviceDescriptorBase> device = new DeviceDescriptorBase(AUDIO_DEVICE_NONE);
            status_t status = NO_ERROR;
            if ((status = data.readParcelable(device.get())) != NO_ERROR) {
                reply->writeInt32((int32_t)status);
                return NO_ERROR;
            }
            audio_output_flags_t flags = (audio_output_flags_t) data.readInt32();
            uint32_t latencyMs = 0;
            audio_io_handle_t output = AUDIO_IO_HANDLE_NONE;
            status_t status = openOutput(module, &output, &config,
                                         &devices, address, &latencyMs, flags);
            status = openOutput(module, &output, &config, device, &latencyMs, flags);
            ALOGV("OPEN_OUTPUT output, %d", output);
            reply->writeInt32((int32_t)status);
            if (status == NO_ERROR) {
                reply->writeInt32((int32_t)output);
                reply->write(&config, sizeof(audio_config_t));
                reply->writeInt32(devices);
                reply->writeInt32(latencyMs);
            }
            return NO_ERROR;
+2 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <binder/Parcel.h>
#include <binder/Parcelable.h>
#include <media/AudioClient.h>
#include <media/DeviceDescriptorBase.h>
#include <media/IAudioTrack.h>
#include <media/IAudioFlingerClient.h>
#include <system/audio.h>
@@ -416,8 +417,7 @@ public:
    virtual status_t openOutput(audio_module_handle_t module,
                                audio_io_handle_t *output,
                                audio_config_t *config,
                                audio_devices_t *devices,
                                const String8& address,
                                const sp<DeviceDescriptorBase>& device,
                                uint32_t *latencyMs,
                                audio_output_flags_t flags) = 0;
    virtual audio_io_handle_t openDuplicateOutput(audio_io_handle_t output1,
+1 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ cc_library_headers {
cc_library {
    name: "libaudiofoundation",
    vendor_available: true,
    double_loadable: true,

    srcs: [
        "AudioContainers.cpp",
+6 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#pragma once

#include <algorithm>
#include <functional>
#include <iterator>
#include <set>
#include <vector>
@@ -78,6 +79,11 @@ static inline bool isSingleDeviceType(const DeviceTypeSet& deviceTypes,
    return deviceTypes.size() == 1 && p(*(deviceTypes.begin()));
}

static inline bool areAllOfSameDeviceType(const DeviceTypeSet& deviceTypes,
                                          std::function<bool(audio_devices_t)> p) {
    return std::all_of(deviceTypes.begin(), deviceTypes.end(), p);
}

static inline void resetDeviceTypes(DeviceTypeSet& deviceTypes, audio_devices_t typeToAdd) {
    deviceTypes.clear();
    deviceTypes.insert(typeToAdd);
Loading