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

Commit d9c99eaf authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "audiopolicy: Remove raw pointer references to AudioMix"

parents 242f566a bfac583d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@

namespace android {

class AudioMix;
class AudioPolicyMix;
class AudioPolicyClientInterface;

// descriptor for audio inputs. Used to maintain current configuration of each opened audio input
@@ -53,7 +53,7 @@ public:
    void dump(String8 *dst) const override;

    audio_io_handle_t   mIoHandle = AUDIO_IO_HANDLE_NONE; // input handle
    AudioMix            *mPolicyMix = nullptr;        // 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

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

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

class ActivityTracking
@@ -281,7 +281,7 @@ public:
    }

    DeviceVector mDevices; /**< current devices this output is routed to */
    AudioMix *mPolicyMix = nullptr;              // non NULL when used by a dynamic policy
    wp<AudioPolicyMix> mPolicyMix;  // non NULL when used by a dynamic policy

protected:
    const sp<AudioPort> mPort;
+10 −17
Original line number Diff line number Diff line
@@ -31,24 +31,19 @@ namespace android {
/**
 * custom mix entry in mPolicyMixes
 */
class AudioPolicyMix : public RefBase {
class AudioPolicyMix : public AudioMix, public RefBase {
public:
    AudioPolicyMix() {}
    AudioPolicyMix(const AudioMix &mix) : AudioMix(mix) {}
    AudioPolicyMix(const AudioPolicyMix&) = delete;
    AudioPolicyMix& operator=(const AudioPolicyMix&) = delete;

    const sp<SwAudioOutputDescriptor> &getOutput() const;

    void setOutput(sp<SwAudioOutputDescriptor> &output);

    void clearOutput();

    android::AudioMix *getMix();

    void setMix(const AudioMix &mix);
    const sp<SwAudioOutputDescriptor> &getOutput() const { return mOutput; }
    void setOutput(const sp<SwAudioOutputDescriptor> &output) { mOutput = output; }
    void clearOutput() { mOutput.clear(); }

    void dump(String8 *dst, int spaces, int index) const;

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

@@ -77,21 +72,19 @@ public:

    sp<DeviceDescriptor> getDeviceAndMixForInputSource(audio_source_t inputSource,
                                                       const DeviceVector &availableDeviceTypes,
                                                       AudioMix **policyMix) const;
                                                       sp<AudioPolicyMix> *policyMix) const;

    /**
     * @brief try to find a matching mix for a given output descriptor and returns the associated
     * output device.
     * @param output to be considered
     * @param availableOutputDevices list of output devices currently reachable
     * @param policyMix to be returned if any mix matching ouput descriptor
     * @return device selected from the mix attached to the output, null pointer otherwise
     */
    sp<DeviceDescriptor> getDeviceAndMixForOutput(const sp<SwAudioOutputDescriptor> &output,
                                                  const DeviceVector &availableOutputDevices,
                                                  AudioMix **policyMix = nullptr);
                                                  const DeviceVector &availableOutputDevices);

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

    status_t setUidDeviceAffinities(uid_t uid, const Vector<AudioDeviceTypeAddr>& devices);
    status_t removeUidDeviceAffinities(uid_t uid);
+6 −4
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <AudioPolicyInterface.h>
#include "AudioInputDescriptor.h"
#include "AudioGain.h"
#include "AudioPolicyMix.h"
#include "HwModule.h"

namespace android {
@@ -308,16 +309,17 @@ void AudioInputDescriptor::setClientActive(const sp<RecordClientDescriptor>& cli
    const int delta = active ? 1 : -1;
    mGlobalActiveCount += delta;

    sp<AudioPolicyMix> policyMix = mPolicyMix.promote();
    if ((oldGlobalActiveCount == 0) && (mGlobalActiveCount > 0)) {
        if ((mPolicyMix != NULL) && ((mPolicyMix->mCbFlags & AudioMix::kCbFlagNotifyActivity) != 0))
        if ((policyMix != NULL) && ((policyMix->mCbFlags & AudioMix::kCbFlagNotifyActivity) != 0))
        {
            mClientInterface->onDynamicPolicyMixStateUpdate(mPolicyMix->mDeviceAddress,
            mClientInterface->onDynamicPolicyMixStateUpdate(policyMix->mDeviceAddress,
                                                            MIX_STATE_MIXING);
        }
    } else if ((oldGlobalActiveCount > 0) && (mGlobalActiveCount == 0)) {
        if ((mPolicyMix != NULL) && ((mPolicyMix->mCbFlags & AudioMix::kCbFlagNotifyActivity) != 0))
        if ((policyMix != NULL) && ((policyMix->mCbFlags & AudioMix::kCbFlagNotifyActivity) != 0))
        {
            mClientInterface->onDynamicPolicyMixStateUpdate(mPolicyMix->mDeviceAddress,
            mClientInterface->onDynamicPolicyMixStateUpdate(policyMix->mDeviceAddress,
                                                            MIX_STATE_IDLE);
        }
    }
+4 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@

#include <AudioPolicyInterface.h>
#include "AudioOutputDescriptor.h"
#include "AudioPolicyMix.h"
#include "IOProfile.h"
#include "AudioGain.h"
#include "Volume.h"
@@ -111,9 +112,10 @@ void AudioOutputDescriptor::setClientActive(const sp<TrackClientDescriptor>& cli
    }
    mGlobalActiveCount += delta;

    if ((mPolicyMix != NULL) && ((mPolicyMix->mCbFlags & AudioMix::kCbFlagNotifyActivity) != 0)) {
    sp<AudioPolicyMix> policyMix = mPolicyMix.promote();
    if ((policyMix != NULL) && ((policyMix->mCbFlags & AudioMix::kCbFlagNotifyActivity) != 0)) {
        if ((oldGlobalActiveCount == 0) || (mGlobalActiveCount == 0)) {
            mClientInterface->onDynamicPolicyMixStateUpdate(mPolicyMix->mDeviceAddress,
            mClientInterface->onDynamicPolicyMixStateUpdate(policyMix->mDeviceAddress,
                mGlobalActiveCount > 0 ? MIX_STATE_MIXING : MIX_STATE_IDLE);
        }
    }
Loading