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

Commit d1f1cb68 authored by jiabin's avatar jiabin
Browse files

Add audio attributes info when starting aaudio tracks on MMAP mix.

In aaudio, when adding tracks to mixed stream, it is needed to update
audio attributes to HAL whenever the tracks are added or removed.
Currently, only the audio attributes used to open the stream will be
sent to the HAL. In that case, adding audio attributes of the clients
when starting the stream can help solve the problem. In audio flinger,
the client's audio attributes will be used to create MmapTrack.

Test: play multiple aaudio tracks, add log
Bug: 77279923
Change-Id: Ic1c536049e194a2bb7513425ee4828d52769d27f
parent 06675ff3
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -107,12 +107,15 @@ class MmapStreamInterface : public virtual RefBase
     * createMmapBuffer() must be called before calling start()
     *
     * \param[in] client a AudioClient struct describing the client starting on this stream.
     * \param[in] attr audio attributes provided by the client.
     * \param[out] handle unique handle for this instance. Used with stop().
     * \return OK in case of success.
     *         NO_INIT in case of initialization error
     *         INVALID_OPERATION if called out of sequence
     */
    virtual status_t start(const AudioClient& client, audio_port_handle_t *handle) = 0;
    virtual status_t start(const AudioClient& client,
                           const audio_attributes_t *attr,
                           audio_port_handle_t *handle) = 0;

    /**
     * Stop a stream operating in mmap mode.
+3 −2
Original line number Diff line number Diff line
@@ -99,7 +99,8 @@ public:

    aaudio_result_t startClient(aaudio_handle_t streamHandle __unused,
                                const android::AudioClient& client __unused,
                                      audio_port_handle_t *clientHandle) override {
                                const audio_attributes_t *attr __unused,
                                audio_port_handle_t *clientHandle __unused) override {
        return AAUDIO_ERROR_UNAVAILABLE;
    }

+3 −2
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ public:

    virtual aaudio_result_t startClient(aaudio_handle_t streamHandle,
                                        const android::AudioClient& client,
                                        const audio_attributes_t *attr,
                                        audio_port_handle_t *clientHandle) = 0;

    virtual aaudio_result_t stopClient(aaudio_handle_t streamHandle,
+2 −1
Original line number Diff line number Diff line
@@ -429,13 +429,14 @@ aaudio_result_t AudioStreamInternal::unregisterThread() {
}

aaudio_result_t AudioStreamInternal::startClient(const android::AudioClient& client,
                                                 const audio_attributes_t *attr,
                                                 audio_port_handle_t *portHandle) {
    ALOGV("%s() called", __func__);
    if (mServiceStreamHandle == AAUDIO_HANDLE_INVALID) {
        return AAUDIO_ERROR_INVALID_STATE;
    }
    aaudio_result_t result =  mServiceInterface.startClient(mServiceStreamHandle,
                                                            client, portHandle);
                                                            client, attr, portHandle);
    ALOGV("%s(%d) returning %d", __func__, *portHandle, result);
    return result;
}
+1 −0
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ public:
    int64_t calculateReasonableTimeout();

    aaudio_result_t startClient(const android::AudioClient& client,
                                const audio_attributes_t *attr,
                                audio_port_handle_t *clientHandle);

    aaudio_result_t stopClient(audio_port_handle_t clientHandle);
Loading