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

Commit 5d482c1a authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

DO NOT MERGE: audiopolicy: Remove raw pointer references to AudioMix

AudioInputDescriptor, AudioOutputDescriptor, and AudioSession used
to reference AudioMix instances using a raw pointer. This isn't
safe as AudioMix was owned by AudioPolicyMix, which is not
referenced by descriptors.

Change AudioMix* pointers in Audio{Input|Output}Descriptor and
AudioSession to wp<AudioPolicyMix> which reflects their
relationship correctly.

To ensure that code does not operate on AudioMix instances
independently from AudioPolicyMix, and to avoid introducing
a lot of getter / setter methods into AudioPolicyMix, make
the latter to inherit AudioMix. This makes sense because
AudioPolicyMix is essentially a ref-counted version of AudioMix.

Bug: 124899895
Test: build and sanity check on angler,
      build angler with USE_CONFIGURABLE_AUDIO_POLICY := 1
Merged-In: Ic508caedefe721ed7e7ba6ee3e9175ba9e8dc23a
Change-Id: Ic508caedefe721ed7e7ba6ee3e9175ba9e8dc23a
parent 8b5a2218
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -27,7 +27,7 @@
namespace android {
namespace android {


class IOProfile;
class IOProfile;
class AudioMix;
class AudioPolicyMix;


// descriptor for audio inputs. Used to maintain current configuration of each opened audio input
// descriptor for audio inputs. Used to maintain current configuration of each opened audio input
// and keep track of the usage of this input.
// and keep track of the usage of this input.
@@ -44,7 +44,7 @@ public:


    audio_io_handle_t             mIoHandle;       // input handle
    audio_io_handle_t             mIoHandle;       // input handle
    audio_devices_t               mDevice;         // current device this input is routed to
    audio_devices_t               mDevice;         // current device this input is routed to
    AudioMix                      *mPolicyMix;     // non NULL when used by a dynamic policy
    wp<AudioPolicyMix>            mPolicyMix;      // non NULL when used by a dynamic policy
    const sp<IOProfile>           mProfile;        // I/O profile this output derives from
    const sp<IOProfile>           mProfile;        // I/O profile this output derives from


    virtual void toAudioPortConfig(struct audio_port_config *dstConfig,
    virtual void toAudioPortConfig(struct audio_port_config *dstConfig,
+2 −2
Original line number Original line Diff line number Diff line
@@ -29,7 +29,7 @@
namespace android {
namespace android {


class IOProfile;
class IOProfile;
class AudioMix;
class AudioPolicyMix;
class AudioPolicyClientInterface;
class AudioPolicyClientInterface;
class DeviceDescriptor;
class DeviceDescriptor;


@@ -126,7 +126,7 @@ public:
    audio_io_handle_t mIoHandle;           // output handle
    audio_io_handle_t mIoHandle;           // output handle
    uint32_t mLatency;                  //
    uint32_t mLatency;                  //
    audio_output_flags_t mFlags;   //
    audio_output_flags_t mFlags;   //
    AudioMix *mPolicyMix;             // non NULL when used by a dynamic policy
    wp<AudioPolicyMix> mPolicyMix;           // non NULL when used by a dynamic policy
    sp<SwAudioOutputDescriptor> mOutput1;    // used by duplicated outputs: first output
    sp<SwAudioOutputDescriptor> mOutput1;    // used by duplicated outputs: first output
    sp<SwAudioOutputDescriptor> mOutput2;    // used by duplicated outputs: second output
    sp<SwAudioOutputDescriptor> mOutput2;    // used by duplicated outputs: second output
    uint32_t mDirectOpenCount; // number of clients using this output (direct outputs only)
    uint32_t mDirectOpenCount; // number of clients using this output (direct outputs only)
+6 −9
Original line number Original line Diff line number Diff line
@@ -29,9 +29,11 @@ class SwAudioOutputDescriptor;
/**
/**
 * custom mix entry in mPolicyMixes
 * custom mix entry in mPolicyMixes
 */
 */
class AudioPolicyMix : public RefBase {
class AudioPolicyMix : public AudioMix, public RefBase {
public:
public:
    AudioPolicyMix() {}
    AudioPolicyMix(const AudioMix &mix);
    AudioPolicyMix(const AudioPolicyMix&) = delete;
    AudioPolicyMix& operator=(const AudioPolicyMix&) = delete;


    const sp<SwAudioOutputDescriptor> &getOutput() const;
    const sp<SwAudioOutputDescriptor> &getOutput() const;


@@ -39,14 +41,9 @@ public:


    void clearOutput();
    void clearOutput();


    android::AudioMix *getMix();

    void setMix(AudioMix &mix);

    status_t dump(int fd, int spaces, int index) const;
    status_t dump(int fd, int spaces, int index) const;


private:
private:
    AudioMix    mMix;                   // Audio policy mix descriptor
    sp<SwAudioOutputDescriptor> mOutput;  // Corresponding output stream
    sp<SwAudioOutputDescriptor> mOutput;  // Corresponding output stream
};
};


@@ -76,9 +73,9 @@ public:


    audio_devices_t getDeviceAndMixForInputSource(audio_source_t inputSource,
    audio_devices_t getDeviceAndMixForInputSource(audio_source_t inputSource,
                                                  audio_devices_t availableDeviceTypes,
                                                  audio_devices_t availableDeviceTypes,
                                                  AudioMix **policyMix);
                                                  sp<AudioPolicyMix> *policyMix);


    status_t getInputMixForAttr(audio_attributes_t attr, AudioMix **policyMix);
    status_t getInputMixForAttr(audio_attributes_t attr, sp<AudioPolicyMix> *policyMix);


    status_t dump(int fd) const;
    status_t dump(int fd) const;
};
};
+3 −2
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@
namespace android {
namespace android {


class AudioPolicyClientInterface;
class AudioPolicyClientInterface;
class AudioPolicyMix;


class AudioSession : public RefBase, public AudioSessionInfoUpdateListener
class AudioSession : public RefBase, public AudioSessionInfoUpdateListener
{
{
@@ -39,7 +40,7 @@ public:
                 audio_input_flags_t flags,
                 audio_input_flags_t flags,
                 uid_t uid,
                 uid_t uid,
                 bool isSoundTrigger,
                 bool isSoundTrigger,
                 AudioMix* policyMix,
                 const sp<AudioPolicyMix> &policyMix,
                 AudioPolicyClientInterface *clientInterface);
                 AudioPolicyClientInterface *clientInterface);


    status_t dump(int fd, int spaces, int index) const;
    status_t dump(int fd, int spaces, int index) const;
@@ -72,7 +73,7 @@ private:
    bool  mIsSoundTrigger;
    bool  mIsSoundTrigger;
    uint32_t  mOpenCount;
    uint32_t  mOpenCount;
    uint32_t  mActiveCount;
    uint32_t  mActiveCount;
    AudioMix* mPolicyMix; // non NULL when used by a dynamic policy
    wp<AudioPolicyMix> mPolicyMix; // non NULL when used by a dynamic policy
    AudioPolicyClientInterface* mClientInterface;
    AudioPolicyClientInterface* mClientInterface;
    const AudioSessionInfoProvider* mInfoProvider;
    const AudioSessionInfoProvider* mInfoProvider;
};
};
+1 −0
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@
#include "AudioInputDescriptor.h"
#include "AudioInputDescriptor.h"
#include "IOProfile.h"
#include "IOProfile.h"
#include "AudioGain.h"
#include "AudioGain.h"
#include "AudioPolicyMix.h"
#include "HwModule.h"
#include "HwModule.h"
#include <media/AudioPolicy.h>
#include <media/AudioPolicy.h>
#include <policy.h>
#include <policy.h>
Loading