diff options
Diffstat (limited to 'test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc')
-rw-r--r-- | test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc index 228ab8ac02..196f900bd3 100644 --- a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc +++ b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc @@ -15,6 +15,7 @@ #include <memory> #include <utility> +#include "absl/strings/string_view.h" #include "absl/types/optional.h" #include "api/video/i420_buffer.h" #include "modules/video_coding/include/video_error_codes.h" @@ -26,10 +27,12 @@ namespace webrtc_pc_e2e { QualityAnalyzingVideoDecoder::QualityAnalyzingVideoDecoder( int id, + absl::string_view peer_name, std::unique_ptr<VideoDecoder> delegate, EncodedImageDataExtractor* extractor, VideoQualityAnalyzerInterface* analyzer) : id_(id), + peer_name_(peer_name), implementation_name_("AnalyzingDecoder-" + std::string(delegate->ImplementationName())), delegate_(std::move(delegate)), @@ -76,7 +79,7 @@ int32_t QualityAnalyzingVideoDecoder::Decode(const EncodedImage& input_image, EncodedImage* origin_image; { - rtc::CritScope crit(&lock_); + MutexLock lock(&lock_); // Store id to be able to retrieve it in analyzing callback. timestamp_to_frame_id_.insert({input_image.Timestamp(), out.id}); // Store encoded image to prevent its destruction while it is used in @@ -87,17 +90,17 @@ int32_t QualityAnalyzingVideoDecoder::Decode(const EncodedImage& input_image, // We can safely dereference |origin_image|, because it can be removed from // the map only after |delegate_| Decode method will be invoked. Image will be // removed inside DecodedImageCallback, which can be done on separate thread. - analyzer_->OnFramePreDecode(out.id, *origin_image); + analyzer_->OnFramePreDecode(peer_name_, out.id, *origin_image); int32_t result = delegate_->Decode(*origin_image, missing_frames, render_time_ms); if (result != WEBRTC_VIDEO_CODEC_OK) { // If delegate decoder failed, then cleanup data for this image. { - rtc::CritScope crit(&lock_); + MutexLock lock(&lock_); timestamp_to_frame_id_.erase(input_image.Timestamp()); decoding_images_.erase(out.id); } - analyzer_->OnDecoderError(out.id, result); + analyzer_->OnDecoderError(peer_name_, out.id, result); } return result; } @@ -113,7 +116,7 @@ int32_t QualityAnalyzingVideoDecoder::Release() { // frames, so we don't take a lock to prevent deadlock. int32_t result = delegate_->Release(); - rtc::CritScope crit(&lock_); + MutexLock lock(&lock_); analyzing_callback_->SetDelegateCallback(nullptr); timestamp_to_frame_id_.clear(); decoding_images_.clear(); @@ -135,7 +138,7 @@ QualityAnalyzingVideoDecoder::DecoderCallback::~DecoderCallback() = default; void QualityAnalyzingVideoDecoder::DecoderCallback::SetDelegateCallback( DecodedImageCallback* delegate) { - rtc::CritScope crit(&callback_lock_); + MutexLock lock(&callback_lock_); delegate_callback_ = delegate; } @@ -147,7 +150,7 @@ int32_t QualityAnalyzingVideoDecoder::DecoderCallback::Decoded( decoder_->OnFrameDecoded(&decodedImage, /*decode_time_ms=*/absl::nullopt, /*qp=*/absl::nullopt); - rtc::CritScope crit(&callback_lock_); + MutexLock lock(&callback_lock_); RTC_DCHECK(delegate_callback_); return delegate_callback_->Decoded(decodedImage); } @@ -157,7 +160,7 @@ int32_t QualityAnalyzingVideoDecoder::DecoderCallback::Decoded( int64_t decode_time_ms) { decoder_->OnFrameDecoded(&decodedImage, decode_time_ms, /*qp=*/absl::nullopt); - rtc::CritScope crit(&callback_lock_); + MutexLock lock(&callback_lock_); RTC_DCHECK(delegate_callback_); return delegate_callback_->Decoded(decodedImage, decode_time_ms); } @@ -168,7 +171,7 @@ void QualityAnalyzingVideoDecoder::DecoderCallback::Decoded( absl::optional<uint8_t> qp) { decoder_->OnFrameDecoded(&decodedImage, decode_time_ms, qp); - rtc::CritScope crit(&callback_lock_); + MutexLock lock(&callback_lock_); RTC_DCHECK(delegate_callback_); delegate_callback_->Decoded(decodedImage, decode_time_ms, qp); } @@ -183,7 +186,7 @@ QualityAnalyzingVideoDecoder::DecoderCallback::IrrelevantSimulcastStreamDecoded( .set_timestamp_rtp(timestamp_ms) .set_id(frame_id) .build(); - rtc::CritScope crit(&callback_lock_); + MutexLock lock(&callback_lock_); RTC_DCHECK(delegate_callback_); delegate_callback_->Decoded(dummy_frame, absl::nullopt, absl::nullopt); return WEBRTC_VIDEO_CODEC_OK; @@ -204,7 +207,7 @@ void QualityAnalyzingVideoDecoder::OnFrameDecoded( absl::optional<uint8_t> qp) { uint16_t frame_id; { - rtc::CritScope crit(&lock_); + MutexLock lock(&lock_); auto it = timestamp_to_frame_id_.find(frame->timestamp()); if (it == timestamp_to_frame_id_.end()) { // Ensure, that we have info about this frame. It can happen that for some @@ -224,15 +227,17 @@ void QualityAnalyzingVideoDecoder::OnFrameDecoded( frame->set_id(frame_id); VideoQualityAnalyzerInterface::DecoderStats stats; stats.decode_time_ms = decode_time_ms; - analyzer_->OnFrameDecoded(*frame, stats); + analyzer_->OnFrameDecoded(peer_name_, *frame, stats); } QualityAnalyzingVideoDecoderFactory::QualityAnalyzingVideoDecoderFactory( + absl::string_view peer_name, std::unique_ptr<VideoDecoderFactory> delegate, IdGenerator<int>* id_generator, EncodedImageDataExtractor* extractor, VideoQualityAnalyzerInterface* analyzer) - : delegate_(std::move(delegate)), + : peer_name_(peer_name), + delegate_(std::move(delegate)), id_generator_(id_generator), extractor_(extractor), analyzer_(analyzer) {} @@ -249,7 +254,8 @@ QualityAnalyzingVideoDecoderFactory::CreateVideoDecoder( const SdpVideoFormat& format) { std::unique_ptr<VideoDecoder> decoder = delegate_->CreateVideoDecoder(format); return std::make_unique<QualityAnalyzingVideoDecoder>( - id_generator_->GetNextId(), std::move(decoder), extractor_, analyzer_); + id_generator_->GetNextId(), peer_name_, std::move(decoder), extractor_, + analyzer_); } std::unique_ptr<VideoDecoder> @@ -259,7 +265,8 @@ QualityAnalyzingVideoDecoderFactory::LegacyCreateVideoDecoder( std::unique_ptr<VideoDecoder> decoder = delegate_->LegacyCreateVideoDecoder(format, receive_stream_id); return std::make_unique<QualityAnalyzingVideoDecoder>( - id_generator_->GetNextId(), std::move(decoder), extractor_, analyzer_); + id_generator_->GetNextId(), peer_name_, std::move(decoder), extractor_, + analyzer_); } } // namespace webrtc_pc_e2e |