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

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

Merge "aaudio: disconnect when onTearDown() called" into oc-dr1-dev

parents 6ec18f8c 5ef003b7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ void AAudioServiceEndpoint::disconnectRegisteredStreams() {
    }
    mRunningStreams.clear();
    for(auto sharedStream : mRegisteredStreams) {
        sharedStream->onDisconnect();
        sharedStream->disconnect();
    }
    mRegisteredStreams.clear();
}
+7 −4
Original line number Diff line number Diff line
@@ -79,7 +79,7 @@ aaudio_result_t AAudioServiceStreamBase::pause() {
        mThreadEnabled.store(false);
        result = mAAudioThread.stop();
        if (result != AAUDIO_OK) {
            processFatalError();
            disconnect();
            return result;
        }
        sendServiceEvent(AAUDIO_SERVICE_EVENT_PAUSED);
@@ -96,7 +96,7 @@ aaudio_result_t AAudioServiceStreamBase::stop() {
        mThreadEnabled.store(false);
        result = mAAudioThread.stop();
        if (result != AAUDIO_OK) {
            processFatalError();
            disconnect();
            return result;
        }
        sendServiceEvent(AAUDIO_SERVICE_EVENT_STOPPED);
@@ -133,8 +133,11 @@ void AAudioServiceStreamBase::run() {
    ALOGD("AAudioServiceStreamBase::run() exiting ----------------");
}

void AAudioServiceStreamBase::processFatalError() {
void AAudioServiceStreamBase::disconnect() {
    if (mState != AAUDIO_STREAM_STATE_DISCONNECTED) {
        sendServiceEvent(AAUDIO_SERVICE_EVENT_DISCONNECTED);
        mState = AAUDIO_STREAM_STATE_DISCONNECTED;
    }
}

aaudio_result_t AAudioServiceStreamBase::sendServiceEvent(aaudio_service_event_t event,
+1 −1
Original line number Diff line number Diff line
@@ -117,7 +117,7 @@ public:

    void run() override; // to implement Runnable

    void processFatalError();
    void disconnect();

    uid_t getOwnerUserId() const {
        return mOwnerUserId;
+6 −5
Original line number Diff line number Diff line
@@ -206,7 +206,7 @@ aaudio_result_t AAudioServiceStreamMMAP::start() {
    status_t status = mMmapStream->start(mMmapClient, &mPortHandle);
    if (status != OK) {
        ALOGE("AAudioServiceStreamMMAP::start() mMmapStream->start() returned %d", status);
        processFatalError();
        disconnect();
        result = AAudioConvert_androidToAAudioResult(status);
    } else {
        result = AAudioServiceStreamBase::start();
@@ -248,13 +248,13 @@ aaudio_result_t AAudioServiceStreamMMAP::getFreeRunningPosition(int64_t *positio
                                                                int64_t *timeNanos) {
    struct audio_mmap_position position;
    if (mMmapStream == nullptr) {
        processFatalError();
        disconnect();
        return AAUDIO_ERROR_NULL;
    }
    status_t status = mMmapStream->getMmapPosition(&position);
    if (status != OK) {
        ALOGE("sendCurrentTimestamp(): getMmapPosition() returned %d", status);
        processFatalError();
        disconnect();
        return AAudioConvert_androidToAAudioResult(status);
    } else {
        mFramesRead.update32(position.position_frames);
@@ -265,7 +265,8 @@ aaudio_result_t AAudioServiceStreamMMAP::getFreeRunningPosition(int64_t *positio
}

void AAudioServiceStreamMMAP::onTearDown() {
    ALOGD("AAudioServiceStreamMMAP::onTearDown() called"); // TODO what is needed here?
    ALOGD("AAudioServiceStreamMMAP::onTearDown() called");
    disconnect();
};

void AAudioServiceStreamMMAP::onVolumeChanged(audio_channel_mask_t channels,
@@ -280,7 +281,7 @@ void AAudioServiceStreamMMAP::onRoutingChanged(audio_port_handle_t deviceId) {
    ALOGD("AAudioServiceStreamMMAP::onRoutingChanged() called with %d, old = %d",
          deviceId, mPortHandle);
    if (mPortHandle > 0 && mPortHandle != deviceId) {
        sendServiceEvent(AAUDIO_SERVICE_EVENT_DISCONNECTED);
        disconnect();
    }
    mPortHandle = deviceId;
};
+3 −7
Original line number Diff line number Diff line
@@ -202,7 +202,7 @@ aaudio_result_t AAudioServiceStreamShared::start() {
    aaudio_result_t result = endpoint->startStream(this);
    if (result != AAUDIO_OK) {
        ALOGE("AAudioServiceStreamShared::start() mServiceEndpoint returned %d", result);
        processFatalError();
        disconnect();
    } else {
        result = AAudioServiceStreamBase::start();
    }
@@ -222,7 +222,7 @@ aaudio_result_t AAudioServiceStreamShared::pause() {
    aaudio_result_t result = endpoint->stopStream(this);
    if (result != AAUDIO_OK) {
        ALOGE("AAudioServiceStreamShared::pause() mServiceEndpoint returned %d", result);
        processFatalError();
        disconnect(); // TODO should we return or pause Base first?
    }
    return AAudioServiceStreamBase::pause();
}
@@ -235,7 +235,7 @@ aaudio_result_t AAudioServiceStreamShared::stop() {
    aaudio_result_t result = endpoint->stopStream(this);
    if (result != AAUDIO_OK) {
        ALOGE("AAudioServiceStreamShared::stop() mServiceEndpoint returned %d", result);
        processFatalError();
        disconnect();
    }
    return AAudioServiceStreamBase::stop();
}
@@ -293,10 +293,6 @@ aaudio_result_t AAudioServiceStreamShared::getDownDataDescription(AudioEndpointP
void AAudioServiceStreamShared::onStop() {
}

void AAudioServiceStreamShared::onDisconnect() {
    processFatalError();
}

void AAudioServiceStreamShared::markTransferTime(int64_t nanoseconds) {
    mMarkedPosition = mAudioDataQueue->getFifoBuffer()->getReadCounter();
    mMarkedTime = nanoseconds;
Loading