Clean up decoders when stopping video receive stream.
This updates VideoReceiveStream2::Stop() to symmetrically tear down state that's built up in VideoReceiveStream2::Start(). Bug: webrtc:11993, webrtc:14486 Change-Id: I41f4feea5584e5baaeed2143432136f8b9761321 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/272537 Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#38244}
This commit is contained in:
@ -47,14 +47,15 @@ void VCMDecoderDataBase::RegisterExternalDecoder(
|
||||
RTC_DCHECK_RUN_ON(&decoder_sequence_checker_);
|
||||
// If payload value already exists, erase old and insert new.
|
||||
DeregisterExternalDecoder(payload_type);
|
||||
decoders_[payload_type] = external_decoder;
|
||||
if (external_decoder) {
|
||||
decoders_[payload_type] = external_decoder;
|
||||
}
|
||||
}
|
||||
|
||||
bool VCMDecoderDataBase::IsExternalDecoderRegistered(
|
||||
uint8_t payload_type) const {
|
||||
RTC_DCHECK_RUN_ON(&decoder_sequence_checker_);
|
||||
return payload_type == current_payload_type_ ||
|
||||
decoders_.find(payload_type) != decoders_.end();
|
||||
return decoders_.find(payload_type) != decoders_.end();
|
||||
}
|
||||
|
||||
void VCMDecoderDataBase::RegisterReceiveCodec(
|
||||
@ -78,6 +79,11 @@ bool VCMDecoderDataBase::DeregisterReceiveCodec(uint8_t payload_type) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void VCMDecoderDataBase::DeregisterReceiveCodecs() {
|
||||
current_payload_type_ = absl::nullopt;
|
||||
decoder_settings_.clear();
|
||||
}
|
||||
|
||||
VCMGenericDecoder* VCMDecoderDataBase::GetDecoder(
|
||||
const VCMEncodedFrame& frame,
|
||||
VCMDecodedFrameCallback* decoded_frame_callback) {
|
||||
@ -112,8 +118,8 @@ VCMGenericDecoder* VCMDecoderDataBase::GetDecoder(
|
||||
|
||||
void VCMDecoderDataBase::CreateAndInitDecoder(const VCMEncodedFrame& frame) {
|
||||
uint8_t payload_type = frame.PayloadType();
|
||||
RTC_LOG(LS_INFO) << "Initializing decoder with payload type '"
|
||||
<< int{payload_type} << "'.";
|
||||
RTC_DLOG(LS_INFO) << "Initializing decoder with payload type '"
|
||||
<< int{payload_type} << "'.";
|
||||
auto decoder_item = decoder_settings_.find(payload_type);
|
||||
if (decoder_item == decoder_settings_.end()) {
|
||||
RTC_LOG(LS_ERROR) << "Can't find a decoder associated with payload type: "
|
||||
|
||||
Reference in New Issue
Block a user