Loading media/libstagefright/rtsp/AAVCAssembler.cpp +4 −3 Original line number Original line Diff line number Diff line Loading @@ -618,13 +618,14 @@ void AAVCAssembler::submitAccessUnit() { int32_t AAVCAssembler::pickStartSeq(const Queue *queue, int32_t AAVCAssembler::pickStartSeq(const Queue *queue, uint32_t first, int64_t play, int64_t jit) { uint32_t first, int64_t play, int64_t jit) { CHECK(!queue->empty()); // pick the first sequence number has the start bit. // pick the first sequence number has the start bit. sp<ABuffer> buffer = *(queue->begin()); sp<ABuffer> buffer = *(queue->begin()); int32_t firstSeqNo = buffer->int32Data(); int32_t firstSeqNo = buffer->int32Data(); // This only works for FU-A type & non-start sequence // This only works for FU-A type & non-start sequence unsigned nalType = buffer->data()[0] & 0x1f; int32_t nalType = buffer->size() >= 1 ? buffer->data()[0] & 0x1f : -1; if (nalType != 28 || buffer->data()[1] & 0x80) { if (nalType != 28 || (buffer->size() >= 2 && buffer->data()[1] & 0x80)) { return firstSeqNo; return firstSeqNo; } } Loading @@ -634,7 +635,7 @@ int32_t AAVCAssembler::pickStartSeq(const Queue *queue, if (rtpTime + jit >= play) { if (rtpTime + jit >= play) { break; break; } } if ((data[1] & 0x80)) { if (it->size() >= 2 && (data[1] & 0x80)) { const int32_t seqNo = it->int32Data(); const int32_t seqNo = it->int32Data(); ALOGE("finding [HEAD] pkt. \t Seq# (%d ~ )[%d", firstSeqNo, seqNo); ALOGE("finding [HEAD] pkt. \t Seq# (%d ~ )[%d", firstSeqNo, seqNo); firstSeqNo = seqNo; firstSeqNo = seqNo; Loading services/audioflinger/Threads.cpp +12 −0 Original line number Original line Diff line number Diff line Loading @@ -9669,6 +9669,12 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, if (isOutput()) { if (isOutput()) { ret = AudioSystem::startOutput(portId); ret = AudioSystem::startOutput(portId); } else { } 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); ret = AudioSystem::startInput(portId); } } Loading @@ -9687,6 +9693,7 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, } else { } else { mHalStream->stop(); mHalStream->stop(); } } eraseClientSilencedState_l(portId); return PERMISSION_DENIED; return PERMISSION_DENIED; } } Loading @@ -9695,6 +9702,9 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, mChannelMask, mSessionId, isOutput(), mChannelMask, mSessionId, isOutput(), client.attributionSource, client.attributionSource, IPCThreadState::self()->getCallingPid(), portId); IPCThreadState::self()->getCallingPid(), portId); if (!isOutput()) { track->setSilenced_l(isClientSilenced_l(portId)); } if (isOutput()) { if (isOutput()) { // force volume update when a new track is added // force volume update when a new track is added Loading Loading @@ -9752,6 +9762,7 @@ status_t AudioFlinger::MmapThread::stop(audio_port_handle_t handle) } } mActiveTracks.remove(track); mActiveTracks.remove(track); eraseClientSilencedState_l(track->portId()); mLock.unlock(); mLock.unlock(); if (isOutput()) { if (isOutput()) { Loading Loading @@ -10542,6 +10553,7 @@ void AudioFlinger::MmapCaptureThread::setRecordSilenced(audio_port_handle_t port broadcast_l(); broadcast_l(); } } } } setClientSilencedIfExists_l(portId, silenced); } } void AudioFlinger::MmapCaptureThread::toAudioPortConfig(struct audio_port_config *config) void AudioFlinger::MmapCaptureThread::toAudioPortConfig(struct audio_port_config *config) Loading services/audioflinger/Threads.h +21 −0 Original line number Original line Diff line number Diff line Loading @@ -2105,6 +2105,26 @@ class MmapThread : public ThreadBase virtual bool isStreamInitialized() { return false; } 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: protected: void dumpInternals_l(int fd, const Vector<String16>& args) override; void dumpInternals_l(int fd, const Vector<String16>& args) override; void dumpTracks_l(int fd, const Vector<String16>& args) override; void dumpTracks_l(int fd, const Vector<String16>& args) override; Loading @@ -2124,6 +2144,7 @@ class MmapThread : public ThreadBase AudioHwDevice* const mAudioHwDev; AudioHwDevice* const mAudioHwDev; ActiveTracks<MmapTrack> mActiveTracks; ActiveTracks<MmapTrack> mActiveTracks; float mHalVolFloat; float mHalVolFloat; std::map<audio_port_handle_t, bool> mClientSilencedStates; int32_t mNoCallbackWarningCount; int32_t mNoCallbackWarningCount; static constexpr int32_t kMaxNoCallbackWarnings = 5; static constexpr int32_t kMaxNoCallbackWarnings = 5; Loading Loading
media/libstagefright/rtsp/AAVCAssembler.cpp +4 −3 Original line number Original line Diff line number Diff line Loading @@ -618,13 +618,14 @@ void AAVCAssembler::submitAccessUnit() { int32_t AAVCAssembler::pickStartSeq(const Queue *queue, int32_t AAVCAssembler::pickStartSeq(const Queue *queue, uint32_t first, int64_t play, int64_t jit) { uint32_t first, int64_t play, int64_t jit) { CHECK(!queue->empty()); // pick the first sequence number has the start bit. // pick the first sequence number has the start bit. sp<ABuffer> buffer = *(queue->begin()); sp<ABuffer> buffer = *(queue->begin()); int32_t firstSeqNo = buffer->int32Data(); int32_t firstSeqNo = buffer->int32Data(); // This only works for FU-A type & non-start sequence // This only works for FU-A type & non-start sequence unsigned nalType = buffer->data()[0] & 0x1f; int32_t nalType = buffer->size() >= 1 ? buffer->data()[0] & 0x1f : -1; if (nalType != 28 || buffer->data()[1] & 0x80) { if (nalType != 28 || (buffer->size() >= 2 && buffer->data()[1] & 0x80)) { return firstSeqNo; return firstSeqNo; } } Loading @@ -634,7 +635,7 @@ int32_t AAVCAssembler::pickStartSeq(const Queue *queue, if (rtpTime + jit >= play) { if (rtpTime + jit >= play) { break; break; } } if ((data[1] & 0x80)) { if (it->size() >= 2 && (data[1] & 0x80)) { const int32_t seqNo = it->int32Data(); const int32_t seqNo = it->int32Data(); ALOGE("finding [HEAD] pkt. \t Seq# (%d ~ )[%d", firstSeqNo, seqNo); ALOGE("finding [HEAD] pkt. \t Seq# (%d ~ )[%d", firstSeqNo, seqNo); firstSeqNo = seqNo; firstSeqNo = seqNo; Loading
services/audioflinger/Threads.cpp +12 −0 Original line number Original line Diff line number Diff line Loading @@ -9669,6 +9669,12 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, if (isOutput()) { if (isOutput()) { ret = AudioSystem::startOutput(portId); ret = AudioSystem::startOutput(portId); } else { } 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); ret = AudioSystem::startInput(portId); } } Loading @@ -9687,6 +9693,7 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, } else { } else { mHalStream->stop(); mHalStream->stop(); } } eraseClientSilencedState_l(portId); return PERMISSION_DENIED; return PERMISSION_DENIED; } } Loading @@ -9695,6 +9702,9 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, mChannelMask, mSessionId, isOutput(), mChannelMask, mSessionId, isOutput(), client.attributionSource, client.attributionSource, IPCThreadState::self()->getCallingPid(), portId); IPCThreadState::self()->getCallingPid(), portId); if (!isOutput()) { track->setSilenced_l(isClientSilenced_l(portId)); } if (isOutput()) { if (isOutput()) { // force volume update when a new track is added // force volume update when a new track is added Loading Loading @@ -9752,6 +9762,7 @@ status_t AudioFlinger::MmapThread::stop(audio_port_handle_t handle) } } mActiveTracks.remove(track); mActiveTracks.remove(track); eraseClientSilencedState_l(track->portId()); mLock.unlock(); mLock.unlock(); if (isOutput()) { if (isOutput()) { Loading Loading @@ -10542,6 +10553,7 @@ void AudioFlinger::MmapCaptureThread::setRecordSilenced(audio_port_handle_t port broadcast_l(); broadcast_l(); } } } } setClientSilencedIfExists_l(portId, silenced); } } void AudioFlinger::MmapCaptureThread::toAudioPortConfig(struct audio_port_config *config) void AudioFlinger::MmapCaptureThread::toAudioPortConfig(struct audio_port_config *config) Loading
services/audioflinger/Threads.h +21 −0 Original line number Original line Diff line number Diff line Loading @@ -2105,6 +2105,26 @@ class MmapThread : public ThreadBase virtual bool isStreamInitialized() { return false; } 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: protected: void dumpInternals_l(int fd, const Vector<String16>& args) override; void dumpInternals_l(int fd, const Vector<String16>& args) override; void dumpTracks_l(int fd, const Vector<String16>& args) override; void dumpTracks_l(int fd, const Vector<String16>& args) override; Loading @@ -2124,6 +2144,7 @@ class MmapThread : public ThreadBase AudioHwDevice* const mAudioHwDev; AudioHwDevice* const mAudioHwDev; ActiveTracks<MmapTrack> mActiveTracks; ActiveTracks<MmapTrack> mActiveTracks; float mHalVolFloat; float mHalVolFloat; std::map<audio_port_handle_t, bool> mClientSilencedStates; int32_t mNoCallbackWarningCount; int32_t mNoCallbackWarningCount; static constexpr int32_t kMaxNoCallbackWarnings = 5; static constexpr int32_t kMaxNoCallbackWarnings = 5; Loading