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

Commit be08ba90 authored by Kevin Rocard's avatar Kevin Rocard Committed by android-build-merger
Browse files

Merge "audiopolicy: Two session can not offload concurrently" into oc-dev

am: 46260c37

Change-Id: I26ab34add9e632eddec417fc7b042387dc4d1c0a
parents 65d96f77 46260c37
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -130,7 +130,7 @@ public:
    sp<SwAudioOutputDescriptor> mOutput1;    // used by duplicated outputs: first output
    sp<SwAudioOutputDescriptor> mOutput2;    // used by duplicated outputs: second output
    uint32_t mDirectOpenCount; // number of clients using this output (direct outputs only)
    uid_t mDirectClientUid; // uid of the direct output client
    audio_session_t mDirectClientSession; // session id of the direct output client
    uint32_t mGlobalRefCount;  // non-stream-specific ref count
};

+2 −1
Original line number Diff line number Diff line
@@ -223,7 +223,8 @@ SwAudioOutputDescriptor::SwAudioOutputDescriptor(const sp<IOProfile>& profile,
    : AudioOutputDescriptor(profile, clientInterface),
    mProfile(profile), mIoHandle(0), mLatency(0),
    mFlags((audio_output_flags_t)0), mPolicyMix(NULL),
    mOutput1(0), mOutput2(0), mDirectOpenCount(0), mDirectClientUid(0), mGlobalRefCount(0)
    mOutput1(0), mOutput2(0), mDirectOpenCount(0),
    mDirectClientSession(AUDIO_SESSION_NONE), mGlobalRefCount(0)
{
    if (profile != NULL) {
        mFlags = (audio_output_flags_t)profile->getFlags();
+12 −12
Original line number Diff line number Diff line
@@ -754,9 +754,8 @@ audio_io_handle_t AudioPolicyManager::getOutput(audio_stream_type_t stream,
    ALOGV("getOutput() device %d, stream %d, samplingRate %d, format %x, channelMask %x, flags %x",
          device, stream, samplingRate, format, channelMask, flags);

    return getOutputForDevice(device, AUDIO_SESSION_ALLOCATE, uid_t{0} /*Invalid uid*/,
                              stream, samplingRate,format, channelMask,
                              flags, offloadInfo);
    return getOutputForDevice(device, AUDIO_SESSION_ALLOCATE, stream, samplingRate, format,
                              channelMask, flags, offloadInfo);
}

status_t AudioPolicyManager::getOutputForAttr(const audio_attributes_t *attr,
@@ -834,7 +833,7 @@ status_t AudioPolicyManager::getOutputForAttr(const audio_attributes_t *attr,
    ALOGV("getOutputForAttr() device 0x%x, samplingRate %d, format %x, channelMask %x, flags %x",
          device, config->sample_rate, config->format, config->channel_mask, flags);

    *output = getOutputForDevice(device, session, uid, *stream,
    *output = getOutputForDevice(device, session, *stream,
                                 config->sample_rate, config->format, config->channel_mask,
                                 flags, &config->offload_info);
    if (*output == AUDIO_IO_HANDLE_NONE) {
@@ -847,8 +846,7 @@ status_t AudioPolicyManager::getOutputForAttr(const audio_attributes_t *attr,

audio_io_handle_t AudioPolicyManager::getOutputForDevice(
        audio_devices_t device,
        audio_session_t session __unused,
        uid_t clientUid,
        audio_session_t session,
        audio_stream_type_t stream,
        uint32_t samplingRate,
        audio_format_t format,
@@ -962,14 +960,15 @@ audio_io_handle_t AudioPolicyManager::getOutputForDevice(
                if ((samplingRate == outputDesc->mSamplingRate) &&
                    audio_formats_match(format, outputDesc->mFormat) &&
                    (channelMask == outputDesc->mChannelMask)) {
                  if (clientUid == outputDesc->mDirectClientUid) {
                  if (session == outputDesc->mDirectClientSession) {
                      outputDesc->mDirectOpenCount++;
                      ALOGV("getOutput() reusing direct output %d", mOutputs.keyAt(i));
                      ALOGV("getOutput() reusing direct output %d for session %d",
                            mOutputs.keyAt(i), session);
                      return mOutputs.keyAt(i);
                  } else {
                      ALOGV("getOutput() do not reuse direct output because current client (%ld) "
                            "is not the same as requesting client (%ld)",
                            (long)outputDesc->mDirectClientUid, (long)clientUid);
                      ALOGV("getOutput() do not reuse direct output because current client (%d) "
                            "is not the same as requesting client (%d)",
                            outputDesc->mDirectClientSession, session);
                      goto non_direct_output;
                  }
                }
@@ -1042,7 +1041,8 @@ audio_io_handle_t AudioPolicyManager::getOutputForDevice(
        outputDesc->mRefCount[stream] = 0;
        outputDesc->mStopTime[stream] = 0;
        outputDesc->mDirectOpenCount = 1;
        outputDesc->mDirectClientUid = clientUid;
        outputDesc->mDirectClientSession = session;

        addOutput(output, outputDesc);
        mPreviousOutputs = mOutputs;
        ALOGV("getOutput() returns new direct output %d", output);
+0 −1
Original line number Diff line number Diff line
@@ -627,7 +627,6 @@ private:
        audio_io_handle_t getOutputForDevice(
                audio_devices_t device,
                audio_session_t session,
                uid_t client,
                audio_stream_type_t stream,
                uint32_t samplingRate,
                audio_format_t format,