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

Commit 77a428b5 authored by Eric Laurent's avatar Eric Laurent Committed by Android (Google) Code Review
Browse files

Merge changes from topic "more_in_recording_config"

* changes:
  audo policy: more info in onRecordingConfigurationUpdate
  audo policy: add effects to record clients
parents 3c3c97ae a9f86651
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -1388,9 +1388,14 @@ void AudioSystem::AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate(
}

void AudioSystem::AudioPolicyServiceClient::onRecordingConfigurationUpdate(
        int event, const record_client_info_t *clientInfo,
        const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
        audio_patch_handle_t patchHandle) {
                                                int event,
                                                const record_client_info_t *clientInfo,
                                                const audio_config_base_t *clientConfig,
                                                std::vector<effect_descriptor_t> clientEffects,
                                                const audio_config_base_t *deviceConfig,
                                                std::vector<effect_descriptor_t> effects,
                                                audio_patch_handle_t patchHandle,
                                                audio_source_t source) {
    record_config_callback cb = NULL;
    {
        Mutex::Autolock _l(AudioSystem::gLock);
@@ -1398,7 +1403,8 @@ void AudioSystem::AudioPolicyServiceClient::onRecordingConfigurationUpdate(
    }

    if (cb != NULL) {
        cb(event, clientInfo, clientConfig, deviceConfig, patchHandle);
        cb(event, clientInfo, clientConfig, clientEffects,
           deviceConfig, effects, patchHandle, source);
    }
}

+45 −7
Original line number Diff line number Diff line
@@ -52,12 +52,37 @@ inline void readRecordClientInfoFromParcel(const Parcel& data, record_client_inf
    clientInfo->uid = (uid_t) data.readUint32();
    clientInfo->session = (audio_session_t) data.readInt32();
    clientInfo->source = (audio_source_t) data.readInt32();
    data.read(&clientInfo->port_id, sizeof(audio_port_handle_t));
    clientInfo->silenced = data.readBool();
}

inline void writeRecordClientInfoFromParcel(Parcel& data, const record_client_info_t *clientInfo) {
inline void writeRecordClientInfoToParcel(Parcel& data, const record_client_info_t *clientInfo) {
    data.writeUint32((uint32_t) clientInfo->uid);
    data.writeInt32((int32_t) clientInfo->session);
    data.writeInt32((int32_t) clientInfo->source);
    data.write(&clientInfo->port_id, sizeof(audio_port_handle_t));
    data.writeBool(clientInfo->silenced);
}

inline void readEffectVectorFromParcel(const Parcel& data,
                                       std::vector<effect_descriptor_t> *effects) {
    int32_t numEffects = data.readInt32();
    for (int32_t i = 0; i < numEffects; i++) {
        effect_descriptor_t effect;
        if (data.read(&effect, sizeof(effect_descriptor_t)) != NO_ERROR) {
            break;
        }
        (*effects).push_back(effect);
    }
}

inline void writeEffectVectorToParcel(Parcel& data, std::vector<effect_descriptor_t> effects) {
    data.writeUint32((uint32_t) effects.size());
    for (const auto& effect : effects) {
        if (data.write(&effect, sizeof(effect_descriptor_t)) != NO_ERROR) {
            break;
        }
    }
}

// ----------------------------------------------------------------------
@@ -92,16 +117,24 @@ public:
        remote()->transact(MIX_STATE_UPDATE, data, &reply, IBinder::FLAG_ONEWAY);
    }

    void onRecordingConfigurationUpdate(int event, const record_client_info_t *clientInfo,
    void onRecordingConfigurationUpdate(int event,
                                        const record_client_info_t *clientInfo,
                                        const audio_config_base_t *clientConfig,
            const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle) {
                                        std::vector<effect_descriptor_t> clientEffects,
                                        const audio_config_base_t *deviceConfig,
                                        std::vector<effect_descriptor_t> effects,
                                        audio_patch_handle_t patchHandle,
                                        audio_source_t source) {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyServiceClient::getInterfaceDescriptor());
        data.writeInt32(event);
        writeRecordClientInfoFromParcel(data, clientInfo);
        writeRecordClientInfoToParcel(data, clientInfo);
        writeAudioConfigBaseToParcel(data, clientConfig);
        writeEffectVectorToParcel(data, clientEffects);
        writeAudioConfigBaseToParcel(data, deviceConfig);
        writeEffectVectorToParcel(data, effects);
        data.writeInt32(patchHandle);
        data.writeInt32((int32_t) source);
        remote()->transact(RECORDING_CONFIGURATION_UPDATE, data, &reply, IBinder::FLAG_ONEWAY);
    }
};
@@ -139,10 +172,15 @@ status_t BnAudioPolicyServiceClient::onTransact(
            audio_config_base_t deviceConfig;
            readRecordClientInfoFromParcel(data, &clientInfo);
            readAudioConfigBaseFromParcel(data, &clientConfig);
            std::vector<effect_descriptor_t> clientEffects;
            readEffectVectorFromParcel(data, &clientEffects);
            readAudioConfigBaseFromParcel(data, &deviceConfig);
            std::vector<effect_descriptor_t> effects;
            readEffectVectorFromParcel(data, &effects);
            audio_patch_handle_t patchHandle = (audio_patch_handle_t) data.readInt32();
            onRecordingConfigurationUpdate(event, &clientInfo, &clientConfig, &deviceConfig,
                    patchHandle);
            audio_source_t source = (audio_source_t) data.readInt32();
            onRecordingConfigurationUpdate(event, &clientInfo, &clientConfig, clientEffects,
                                           &deviceConfig, effects, patchHandle, source);
            return NO_ERROR;
        } break;
    default:
+15 −6
Original line number Diff line number Diff line
@@ -35,9 +35,14 @@ namespace android {

typedef void (*audio_error_callback)(status_t err);
typedef void (*dynamic_policy_callback)(int event, String8 regId, int val);
typedef void (*record_config_callback)(int event, const record_client_info_t *clientInfo,
                const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
                audio_patch_handle_t patchHandle);
typedef void (*record_config_callback)(int event,
                                       const record_client_info_t *clientInfo,
                                       const audio_config_base_t *clientConfig,
                                       std::vector<effect_descriptor_t> clientEffects,
                                       const audio_config_base_t *deviceConfig,
                                       std::vector<effect_descriptor_t> effects,
                                       audio_patch_handle_t patchHandle,
                                       audio_source_t source);

class IAudioFlinger;
class IAudioPolicyService;
@@ -450,7 +455,11 @@ private:
        virtual void onRecordingConfigurationUpdate(int event,
                                                    const record_client_info_t *clientInfo,
                                                    const audio_config_base_t *clientConfig,
                        const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle);
                                                    std::vector<effect_descriptor_t> clientEffects,
                                                    const audio_config_base_t *deviceConfig,
                                                    std::vector<effect_descriptor_t> effects,
                                                    audio_patch_handle_t patchHandle,
                                                    audio_source_t source);

    private:
        Mutex                               mLock;
+8 −1
Original line number Diff line number Diff line
@@ -17,10 +17,12 @@
#ifndef ANDROID_IAUDIOPOLICYSERVICECLIENT_H
#define ANDROID_IAUDIOPOLICYSERVICECLIENT_H

#include <vector>

#include <utils/RefBase.h>
#include <binder/IInterface.h>
#include <system/audio.h>
#include <system/audio_effect.h>

namespace android {

@@ -30,6 +32,8 @@ struct record_client_info {
    uid_t uid;
    audio_session_t session;
    audio_source_t source;
    audio_port_handle_t port_id;
    bool silenced;
};

typedef struct record_client_info record_client_info_t;
@@ -51,8 +55,11 @@ public:
    virtual void onRecordingConfigurationUpdate(int event,
            const record_client_info_t *clientInfo,
            const audio_config_base_t *clientConfig,
            std::vector<effect_descriptor_t> clientEffects,
            const audio_config_base_t *deviceConfig,
            audio_patch_handle_t patchHandle) = 0;
            std::vector<effect_descriptor_t> effects,
            audio_patch_handle_t patchHandle,
            audio_source_t source) = 0;
};


+7 −4
Original line number Diff line number Diff line
@@ -333,9 +333,12 @@ public:

    virtual void onRecordingConfigurationUpdate(int event,
                                                const record_client_info_t *clientInfo,
                    const struct audio_config_base *clientConfig,
                    const struct audio_config_base *deviceConfig,
                    audio_patch_handle_t patchHandle) = 0;
                                                const audio_config_base_t *clientConfig,
                                                std::vector<effect_descriptor_t> clientEffects,
                                                const audio_config_base_t *deviceConfig,
                                                std::vector<effect_descriptor_t> effects,
                                                audio_patch_handle_t patchHandle,
                                                audio_source_t source) = 0;
};

extern "C" AudioPolicyInterface* createAudioPolicyManager(AudioPolicyClientInterface *clientInterface);
Loading