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

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

Send audio patch in recording callback

Remove direct access to patch handle in AudioInputDescriptor, replace with
  set / get functions.
Add interface for AudioSession to query configuration from enclosing
  input descriptor.
When input descriptor's patch handle changes during a recording, propagate
  the change through the recording notification callback.

Bug 26798796

Change-Id: Ia1395d44da7ccfe69ca46877638d1eb49b3935ad
parent 809aeb1f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ public:

// definitions for audio recording configuration updates
// which update type is reported
#define RECORD_CONFIG_EVENT_NONE -1
#define RECORD_CONFIG_EVENT_START 1
#define RECORD_CONFIG_EVENT_STOP  0

+3 −3
Original line number Diff line number Diff line
@@ -32,8 +32,8 @@ 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, int session, int source,
                const audio_config_base_t *clientConfig,
                const audio_config_base_t *deviceConfig);
                const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
                audio_patch_handle_t patchHandle);

class IAudioFlinger;
class IAudioPolicyService;
@@ -427,7 +427,7 @@ private:
        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,
                        const audio_config_base_t *deviceConfig);
                        const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle);

    private:
        Mutex                               mLock;
+2 −1
Original line number Diff line number Diff line
@@ -41,7 +41,8 @@ public:
    virtual void onRecordingConfigurationUpdate(int event, audio_session_t session,
            audio_source_t source,
            const audio_config_base_t *clientConfig,
            const audio_config_base_t *deviceConfig) = 0;
            const audio_config_base_t *deviceConfig,
            audio_patch_handle_t patchHandle) = 0;
};


+3 −2
Original line number Diff line number Diff line
@@ -1246,7 +1246,8 @@ void AudioSystem::AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate(

void AudioSystem::AudioPolicyServiceClient::onRecordingConfigurationUpdate(
        int event, audio_session_t session, audio_source_t source,
        const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig) {
        const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
        audio_patch_handle_t patchHandle) {
    record_config_callback cb = NULL;
    {
        Mutex::Autolock _l(AudioSystem::gLock);
@@ -1254,7 +1255,7 @@ void AudioSystem::AudioPolicyServiceClient::onRecordingConfigurationUpdate(
    }

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

+5 −2
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ public:

    void onRecordingConfigurationUpdate(int event, audio_session_t session,
            audio_source_t source, const audio_config_base_t *clientConfig,
            const audio_config_base_t *deviceConfig) {
            const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle) {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyServiceClient::getInterfaceDescriptor());
        data.writeInt32(event);
@@ -90,6 +90,7 @@ public:
        data.writeInt32(source);
        writeAudioConfigBaseToParcel(data, clientConfig);
        writeAudioConfigBaseToParcel(data, deviceConfig);
        data.writeInt32(patchHandle);
        remote()->transact(RECORDING_CONFIGURATION_UPDATE, data, &reply, IBinder::FLAG_ONEWAY);
    }
};
@@ -128,7 +129,9 @@ status_t BnAudioPolicyServiceClient::onTransact(
            audio_config_base_t deviceConfig;
            readAudioConfigBaseFromParcel(data, &clientConfig);
            readAudioConfigBaseFromParcel(data, &deviceConfig);
            onRecordingConfigurationUpdate(event, session, source, &clientConfig, &deviceConfig);
            audio_patch_handle_t patchHandle = (audio_patch_handle_t) data.readInt32();
            onRecordingConfigurationUpdate(event, session, source, &clientConfig, &deviceConfig,
                    patchHandle);
            return NO_ERROR;
        } break;
    default:
Loading