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

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

Prepare openInput() signature to AIDL conversion

The purpose is to avoid having more than one primitive output argument
and to avoid in/out arguments.

Test: Audio-related CTS tests from CtsMediaTestCases
Change-Id: I6bb5dde7956dcca30ed874397f78658d79433202
parent ce182940
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -298,6 +298,8 @@ aidl_interface {
        "aidl/android/media/CreateRecordResponse.aidl",
        "aidl/android/media/CreateTrackRequest.aidl",
        "aidl/android/media/CreateTrackResponse.aidl",
        "aidl/android/media/OpenInputRequest.aidl",
        "aidl/android/media/OpenInputResponse.aidl",

        "aidl/android/media/IAudioFlingerClient.aidl",
        "aidl/android/media/IAudioRecord.aidl",
+16 −52
Original line number Diff line number Diff line
@@ -601,40 +601,17 @@ public:
        return reply.readInt32();
    }

    virtual status_t openInput(audio_module_handle_t module,
                               audio_io_handle_t *input,
                               audio_config_t *config,
                               audio_devices_t *device,
                               const String8& address,
                               audio_source_t source,
                               audio_input_flags_t flags)
    virtual status_t openInput(const media::OpenInputRequest& request,
                               media::OpenInputResponse* response)
    {
        if (input == NULL || config == NULL || device == NULL) {
            return BAD_VALUE;
        }
        Parcel data, reply;
        data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
        data.writeInt32(module);
        data.writeInt32(*input);
        data.write(config, sizeof(audio_config_t));
        data.writeInt32(*device);
        data.writeString8(address);
        data.writeInt32(source);
        data.writeInt32(flags);
        status_t status = remote()->transact(OPEN_INPUT, data, &reply);
        if (status != NO_ERROR) {
            *input = AUDIO_IO_HANDLE_NONE;
            return status;
        }
        status = (status_t)reply.readInt32();
        if (status != NO_ERROR) {
            *input = AUDIO_IO_HANDLE_NONE;
            return status;
        }
        *input = (audio_io_handle_t)reply.readInt32();
        reply.read(config, sizeof(audio_config_t));
        *device = (audio_devices_t)reply.readInt32();
        return NO_ERROR;
        status_t status;
        return data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor())
            ?: data.writeParcelable(request)
            ?: remote()->transact(OPEN_INPUT, data, &reply)
            ?: reply.readInt32(&status)
            ?: status
            ?: reply.readParcelable(response);
    }

    virtual status_t closeInput(int input)
@@ -1366,26 +1343,13 @@ status_t BnAudioFlinger::onTransact(
        } break;
        case OPEN_INPUT: {
            CHECK_INTERFACE(IAudioFlinger, data, reply);
            audio_module_handle_t module = (audio_module_handle_t)data.readInt32();
            audio_io_handle_t input = (audio_io_handle_t)data.readInt32();
            audio_config_t config = {};
            if (data.read(&config, sizeof(audio_config_t)) != NO_ERROR) {
                ALOGE("b/23905951");
            }
            audio_devices_t device = (audio_devices_t)data.readInt32();
            String8 address(data.readString8());
            audio_source_t source = (audio_source_t)data.readInt32();
            audio_input_flags_t flags = (audio_input_flags_t) data.readInt32();

            status_t status = openInput(module, &input, &config,
                                        &device, address, source, flags);
            reply->writeInt32((int32_t) status);
            if (status == NO_ERROR) {
                reply->writeInt32((int32_t) input);
                reply->write(&config, sizeof(audio_config_t));
                reply->writeInt32(device);
            }
            return NO_ERROR;
            media::OpenInputRequest request;
            media::OpenInputResponse response;
            status_t status;
            return data.readParcelable(&request)
                ?: (status = openInput(request, &response), OK)
                ?: reply->writeInt32(status)
                ?: reply->writeParcelable(response);
        } break;
        case CLOSE_INPUT: {
            CHECK_INTERFACE(IAudioFlinger, data, reply);
+36 −0
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.AudioConfig;
import android.media.AudioDevice;
import android.media.AudioSourceType;

/**
 * {@hide}
 */
parcelable OpenInputRequest {
    /** Interpreted as audio_module_handle_t. */
    int module;
    /** Interpreted as audio_io_handle_t. */
    int input;
    AudioConfig config;
    AudioDevice device;
    AudioSourceType source;
    /** Bitmask, indexed by AudioInputFlag. */
    int flags;
}
+30 −0
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.AudioConfig;
import android.media.AudioDevice;

/**
 * {@hide}
 */
parcelable OpenInputResponse {
    /** Interpreted as audio_io_handle_t. */
    int input;
    AudioConfig config;
    AudioDevice device;
}
+5 −7
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@
#include "android/media/IAudioTrackCallback.h"
#include "android/media/IEffect.h"
#include "android/media/IEffectClient.h"
#include "android/media/OpenInputRequest.h"
#include "android/media/OpenInputResponse.h"

namespace android {

@@ -248,13 +250,9 @@ public:
    virtual status_t suspendOutput(audio_io_handle_t output) = 0;
    virtual status_t restoreOutput(audio_io_handle_t output) = 0;

    virtual status_t openInput(audio_module_handle_t module,
                               audio_io_handle_t *input,
                               audio_config_t *config,
                               audio_devices_t *device,
                               const String8& address,
                               audio_source_t source,
                               audio_input_flags_t flags) = 0;
    virtual status_t openInput(const media::OpenInputRequest& request,
                               media::OpenInputResponse* response) = 0;

    virtual status_t closeInput(audio_io_handle_t input) = 0;

    virtual status_t invalidateStream(audio_stream_type_t stream) = 0;
Loading