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

Commit 68870e55 authored by Xin Li's avatar Xin Li
Browse files

Merge TP1A.221005.003

Merged-In: Ie8b57e20927d90e45b0f69a23a6777af7a39794d
Change-Id: I89e2896d4249e3037cc0180f1f3c4979c343c556
parents 985ef526 b4b328f2
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -618,13 +618,14 @@ void AAVCAssembler::submitAccessUnit() {

int32_t AAVCAssembler::pickStartSeq(const Queue *queue,
        uint32_t first, int64_t play, int64_t jit) {
    CHECK(!queue->empty());
    // pick the first sequence number has the start bit.
    sp<ABuffer> buffer = *(queue->begin());
    int32_t firstSeqNo = buffer->int32Data();

    // This only works for FU-A type & non-start sequence
    unsigned nalType = buffer->data()[0] & 0x1f;
    if (nalType != 28 || buffer->data()[1] & 0x80) {
    int32_t nalType = buffer->size() >= 1 ? buffer->data()[0] & 0x1f : -1;
    if (nalType != 28 || (buffer->size() >= 2 && buffer->data()[1] & 0x80)) {
        return firstSeqNo;
    }

@@ -634,7 +635,7 @@ int32_t AAVCAssembler::pickStartSeq(const Queue *queue,
        if (rtpTime + jit >= play) {
            break;
        }
        if ((data[1] & 0x80)) {
        if (it->size() >= 2 && (data[1] & 0x80)) {
            const int32_t seqNo = it->int32Data();
            ALOGE("finding [HEAD] pkt. \t Seq# (%d ~ )[%d", firstSeqNo, seqNo);
            firstSeqNo = seqNo;
+12 −0
Original line number Diff line number Diff line
@@ -9669,6 +9669,12 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client,
    if (isOutput()) {
        ret = AudioSystem::startOutput(portId);
    } else {
        {
            // Add the track record before starting input so that the silent status for the
            // client can be cached.
            Mutex::Autolock _l(mLock);
            setClientSilencedState_l(portId, false /*silenced*/);
        }
        ret = AudioSystem::startInput(portId);
    }

@@ -9687,6 +9693,7 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client,
        } else {
            mHalStream->stop();
        }
        eraseClientSilencedState_l(portId);
        return PERMISSION_DENIED;
    }

@@ -9695,6 +9702,9 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client,
                                        mChannelMask, mSessionId, isOutput(),
                                        client.attributionSource,
                                        IPCThreadState::self()->getCallingPid(), portId);
    if (!isOutput()) {
        track->setSilenced_l(isClientSilenced_l(portId));
    }

    if (isOutput()) {
        // force volume update when a new track is added
@@ -9752,6 +9762,7 @@ status_t AudioFlinger::MmapThread::stop(audio_port_handle_t handle)
    }

    mActiveTracks.remove(track);
    eraseClientSilencedState_l(track->portId());

    mLock.unlock();
    if (isOutput()) {
@@ -10542,6 +10553,7 @@ void AudioFlinger::MmapCaptureThread::setRecordSilenced(audio_port_handle_t port
            broadcast_l();
        }
    }
    setClientSilencedIfExists_l(portId, silenced);
}

void AudioFlinger::MmapCaptureThread::toAudioPortConfig(struct audio_port_config *config)
+21 −0
Original line number Diff line number Diff line
@@ -2105,6 +2105,26 @@ class MmapThread : public ThreadBase

    virtual     bool        isStreamInitialized() { return false; }

                void        setClientSilencedState_l(audio_port_handle_t portId, bool silenced) {
                                mClientSilencedStates[portId] = silenced;
                            }

                size_t      eraseClientSilencedState_l(audio_port_handle_t portId) {
                                return mClientSilencedStates.erase(portId);
                            }

                bool        isClientSilenced_l(audio_port_handle_t portId) const {
                                const auto it = mClientSilencedStates.find(portId);
                                return it != mClientSilencedStates.end() ? it->second : false;
                            }

                void        setClientSilencedIfExists_l(audio_port_handle_t portId, bool silenced) {
                                const auto it = mClientSilencedStates.find(portId);
                                if (it != mClientSilencedStates.end()) {
                                    it->second = silenced;
                                }
                            }

 protected:
                void        dumpInternals_l(int fd, const Vector<String16>& args) override;
                void        dumpTracks_l(int fd, const Vector<String16>& args) override;
@@ -2124,6 +2144,7 @@ class MmapThread : public ThreadBase
                AudioHwDevice* const    mAudioHwDev;
                ActiveTracks<MmapTrack> mActiveTracks;
                float                   mHalVolFloat;
                std::map<audio_port_handle_t, bool> mClientSilencedStates;

                int32_t                 mNoCallbackWarningCount;
     static     constexpr int32_t       kMaxNoCallbackWarnings = 5;