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

Commit ac4e4298 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

Monitoring of recording: uid of recording session

Pass uid of recording session along with other existing information
  in the recording monitoring callback.
Define new structure, record_client_info, to group uid (new),
  session id (existing) and source (existing) and simplify
  method signatures and marshalling code.

Test: run cts -m CtsMediaTestCases -t android.media.cts.AudioRecordingConfigurationTest#testAudioManagerGetActiveRecordConfigurations
Bug 62579636

Change-Id: I18f66d7e55640a21f31021416a12a3e8094c3690
parent c407bd4b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1297,7 +1297,7 @@ void AudioSystem::AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate(
}

void AudioSystem::AudioPolicyServiceClient::onRecordingConfigurationUpdate(
        int event, audio_session_t session, audio_source_t source,
        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) {
    record_config_callback cb = NULL;
@@ -1307,7 +1307,7 @@ void AudioSystem::AudioPolicyServiceClient::onRecordingConfigurationUpdate(
    }

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

+18 −7
Original line number Diff line number Diff line
@@ -48,6 +48,18 @@ inline void writeAudioConfigBaseToParcel(Parcel& data, const audio_config_base_t
    data.writeInt32((int32_t) config->format);
}

inline void readRecordClientInfoFromParcel(const Parcel& data, record_client_info_t *clientInfo) {
    clientInfo->uid = (uid_t) data.readUint32();
    clientInfo->session = (audio_session_t) data.readInt32();
    clientInfo->source = (audio_source_t) data.readInt32();
}

inline void writeRecordClientInfoFromParcel(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);
}

// ----------------------------------------------------------------------
class BpAudioPolicyServiceClient : public BpInterface<IAudioPolicyServiceClient>
{
@@ -80,14 +92,13 @@ public:
        remote()->transact(MIX_STATE_UPDATE, data, &reply, IBinder::FLAG_ONEWAY);
    }

    void onRecordingConfigurationUpdate(int event, audio_session_t session,
            audio_source_t source, const audio_config_base_t *clientConfig,
    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) {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyServiceClient::getInterfaceDescriptor());
        data.writeInt32(event);
        data.writeInt32(session);
        data.writeInt32(source);
        writeRecordClientInfoFromParcel(data, clientInfo);
        writeAudioConfigBaseToParcel(data, clientConfig);
        writeAudioConfigBaseToParcel(data, deviceConfig);
        data.writeInt32(patchHandle);
@@ -123,14 +134,14 @@ status_t BnAudioPolicyServiceClient::onTransact(
    case RECORDING_CONFIGURATION_UPDATE: {
            CHECK_INTERFACE(IAudioPolicyServiceClient, data, reply);
            int event = (int) data.readInt32();
            audio_session_t session = (audio_session_t) data.readInt32();
            audio_source_t source = (audio_source_t) data.readInt32();
            record_client_info_t clientInfo;
            audio_config_base_t clientConfig;
            audio_config_base_t deviceConfig;
            readRecordClientInfoFromParcel(data, &clientInfo);
            readAudioConfigBaseFromParcel(data, &clientConfig);
            readAudioConfigBaseFromParcel(data, &deviceConfig);
            audio_patch_handle_t patchHandle = (audio_patch_handle_t) data.readInt32();
            onRecordingConfigurationUpdate(event, session, source, &clientConfig, &deviceConfig,
            onRecordingConfigurationUpdate(event, &clientInfo, &clientConfig, &deviceConfig,
                    patchHandle);
            return NO_ERROR;
        } break;
+4 −3
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ 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, audio_session_t session, int source,
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);

@@ -440,8 +440,9 @@ private:
        virtual void onAudioPortListUpdate();
        virtual void onAudioPatchListUpdate();
        virtual void onDynamicPolicyMixStateUpdate(String8 regId, int32_t state);
        virtual void onRecordingConfigurationUpdate(int event, audio_session_t session,
                        audio_source_t source, const audio_config_base_t *clientConfig,
        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);

    private:
+12 −2
Original line number Diff line number Diff line
@@ -26,6 +26,16 @@ namespace android {

// ----------------------------------------------------------------------------

struct record_client_info {
    uid_t uid;
    audio_session_t session;
    audio_source_t source;
};

typedef struct record_client_info record_client_info_t;

// ----------------------------------------------------------------------------

class IAudioPolicyServiceClient : public IInterface
{
public:
@@ -38,8 +48,8 @@ public:
    // Notifies a change in the mixing state of a specific mix in a dynamic audio policy
    virtual void onDynamicPolicyMixStateUpdate(String8 regId, int32_t state) = 0;
    // Notifies a change of audio recording configuration
    virtual void onRecordingConfigurationUpdate(int event, audio_session_t session,
            audio_source_t source,
    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) = 0;
+2 −2
Original line number Diff line number Diff line
@@ -349,8 +349,8 @@ public:

    virtual void onDynamicPolicyMixStateUpdate(String8 regId, int32_t state) = 0;

    virtual void onRecordingConfigurationUpdate(int event, audio_session_t session,
                    audio_source_t source,
    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;
Loading