diff --git a/modules/video_coding/generic_decoder.cc b/modules/video_coding/generic_decoder.cc index fc356e7a44..00585abbc9 100644 --- a/modules/video_coding/generic_decoder.cc +++ b/modules/video_coding/generic_decoder.cc @@ -329,18 +329,7 @@ int32_t VCMGenericDecoder::Decode(const EncodedImage& frame, } _callback->OnDecoderInfoChanged(std::move(decoder_info)); } - if (ret < WEBRTC_VIDEO_CODEC_OK) { - const absl::optional ssrc = - !frame_info.packet_infos.empty() - ? absl::make_optional(frame_info.packet_infos[0].ssrc()) - : absl::nullopt; - RTC_LOG(LS_WARNING) << "Failed to decode frame with timestamp " - << frame.RtpTimestamp() << ", ssrc " - << (ssrc ? rtc::ToString(*ssrc) : "") - << ", error code: " << ret; - _callback->ClearTimestampMap(); - } else if (ret == WEBRTC_VIDEO_CODEC_NO_OUTPUT) { - // No output. + if (ret < WEBRTC_VIDEO_CODEC_OK || ret == WEBRTC_VIDEO_CODEC_NO_OUTPUT) { _callback->ClearTimestampMap(); } return ret; diff --git a/video/video_receive_stream2.cc b/video/video_receive_stream2.cc index 2696647616..af25c364de 100644 --- a/video/video_receive_stream2.cc +++ b/video/video_receive_stream2.cc @@ -904,6 +904,22 @@ int VideoReceiveStream2::DecodeAndMaybeDispatchEncodedFrame( } int decode_result = video_receiver_.Decode(frame_ptr); + if (decode_result < WEBRTC_VIDEO_CODEC_OK) { + // Asynchronous decoders may delay error reporting, potentially resulting in + // error reports reflecting issues that occurred several frames back. + RTC_LOG(LS_WARNING) + << "Failed to decode frame. Return code: " << decode_result + << ", SSRC: " << remote_ssrc() + << ", frame RTP timestamp: " << frame_ptr->RtpTimestamp() + << ", type: " << VideoFrameTypeToString(frame_ptr->FrameType()) + << ", size: " << frame_ptr->size() + << ", width: " << frame_ptr->_encodedWidth + << ", height: " << frame_ptr->_encodedHeight + << ", spatial idx: " << frame_ptr->SpatialIndex().value_or(-1) + << ", temporal idx: " << frame_ptr->TemporalIndex().value_or(-1) + << ", id: " << frame_ptr->Id(); + } + if (encoded_frame_output_enabled) { absl::optional pending_resolution;