Forward the corruption score from the decoder to ReceiveStatisticsProxy
Bug: webrtc:358039777 Change-Id: Iace01daa53d08b5d0c484b5f55da73ba230317da Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/365095 Reviewed-by: Erik Språng <sprang@webrtc.org> Auto-Submit: Fanny Linderborg <linderborg@webrtc.org> Commit-Queue: Fanny Linderborg <linderborg@webrtc.org> Cr-Commit-Position: refs/heads/main@{#43213}
This commit is contained in:
parent
2d75cd3664
commit
518bd61cec
@ -134,14 +134,13 @@ void VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: bugs.webrtc.org/358039777 - Use the score.
|
std::optional<double> corruption_score;
|
||||||
std::optional<double> score;
|
|
||||||
if (corruption_score_calculator_ &&
|
if (corruption_score_calculator_ &&
|
||||||
frame_info->frame_instrumentation_data.has_value()) {
|
frame_info->frame_instrumentation_data.has_value()) {
|
||||||
if (const FrameInstrumentationData* data =
|
if (const FrameInstrumentationData* data =
|
||||||
absl::get_if<FrameInstrumentationData>(
|
absl::get_if<FrameInstrumentationData>(
|
||||||
&*frame_info->frame_instrumentation_data)) {
|
&*frame_info->frame_instrumentation_data)) {
|
||||||
score = corruption_score_calculator_->CalculateCorruptionScore(
|
corruption_score = corruption_score_calculator_->CalculateCorruptionScore(
|
||||||
decodedImage, *data);
|
decodedImage, *data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -242,7 +241,8 @@ void VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage,
|
|||||||
.qp = qp,
|
.qp = qp,
|
||||||
.decode_time = decode_time,
|
.decode_time = decode_time,
|
||||||
.content_type = frame_info->content_type,
|
.content_type = frame_info->content_type,
|
||||||
.frame_type = frame_info->frame_type});
|
.frame_type = frame_info->frame_type,
|
||||||
|
.corruption_score = corruption_score});
|
||||||
}
|
}
|
||||||
|
|
||||||
void VCMDecodedFrameCallback::OnDecoderInfoChanged(
|
void VCMDecodedFrameCallback::OnDecoderInfoChanged(
|
||||||
|
|||||||
@ -37,6 +37,8 @@
|
|||||||
#include "test/scoped_key_value_config.h"
|
#include "test/scoped_key_value_config.h"
|
||||||
#include "test/time_controller/simulated_time_controller.h"
|
#include "test/time_controller/simulated_time_controller.h"
|
||||||
|
|
||||||
|
using ::testing::Return;
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace video_coding {
|
namespace video_coding {
|
||||||
|
|
||||||
@ -65,6 +67,7 @@ class ReceiveCallback : public VCMReceiveCallback {
|
|||||||
|
|
||||||
int32_t OnFrameToRender(const struct FrameToRender& arguments) override {
|
int32_t OnFrameToRender(const struct FrameToRender& arguments) override {
|
||||||
frames_.push_back(arguments.video_frame);
|
frames_.push_back(arguments.video_frame);
|
||||||
|
last_corruption_score_ = arguments.corruption_score;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,9 +87,14 @@ class ReceiveCallback : public VCMReceiveCallback {
|
|||||||
|
|
||||||
uint32_t frames_dropped() const { return frames_dropped_; }
|
uint32_t frames_dropped() const { return frames_dropped_; }
|
||||||
|
|
||||||
|
std::optional<double> last_corruption_score() const {
|
||||||
|
return last_corruption_score_;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<VideoFrame> frames_;
|
std::vector<VideoFrame> frames_;
|
||||||
uint32_t frames_dropped_ = 0;
|
uint32_t frames_dropped_ = 0;
|
||||||
|
std::optional<double> last_corruption_score_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class GenericDecoderTest : public ::testing::Test {
|
class GenericDecoderTest : public ::testing::Test {
|
||||||
@ -220,22 +228,27 @@ TEST_F(GenericDecoderTest, IsLowLatencyStreamActivatedByPlayoutDelay) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(GenericDecoderTest, CallCalculateCorruptionScoreInDecoded) {
|
TEST_F(GenericDecoderTest, CallCalculateCorruptionScoreInDecoded) {
|
||||||
EXPECT_CALL(corruption_score_calculator_, CalculateCorruptionScore);
|
constexpr double kCorruptionScore = 0.76;
|
||||||
|
|
||||||
uint32_t rtp_timestamp = 1;
|
EXPECT_CALL(corruption_score_calculator_, CalculateCorruptionScore)
|
||||||
|
.WillOnce(Return(kCorruptionScore));
|
||||||
|
|
||||||
|
constexpr uint32_t kRtpTimestamp = 1;
|
||||||
FrameInfo frame_info;
|
FrameInfo frame_info;
|
||||||
frame_info.frame_instrumentation_data = FrameInstrumentationData{};
|
frame_info.frame_instrumentation_data = FrameInstrumentationData{};
|
||||||
frame_info.rtp_timestamp = rtp_timestamp;
|
frame_info.rtp_timestamp = kRtpTimestamp;
|
||||||
frame_info.decode_start = Timestamp::Zero();
|
frame_info.decode_start = Timestamp::Zero();
|
||||||
frame_info.content_type = VideoContentType::UNSPECIFIED;
|
frame_info.content_type = VideoContentType::UNSPECIFIED;
|
||||||
frame_info.frame_type = VideoFrameType::kVideoFrameDelta;
|
frame_info.frame_type = VideoFrameType::kVideoFrameDelta;
|
||||||
VideoFrame video_frame = VideoFrame::Builder()
|
VideoFrame video_frame = VideoFrame::Builder()
|
||||||
.set_video_frame_buffer(I420Buffer::Create(5, 5))
|
.set_video_frame_buffer(I420Buffer::Create(5, 5))
|
||||||
.set_rtp_timestamp(rtp_timestamp)
|
.set_rtp_timestamp(kRtpTimestamp)
|
||||||
.build();
|
.build();
|
||||||
vcm_callback_.Map(std::move(frame_info));
|
vcm_callback_.Map(std::move(frame_info));
|
||||||
|
|
||||||
vcm_callback_.Decoded(video_frame);
|
vcm_callback_.Decoded(video_frame);
|
||||||
|
|
||||||
|
EXPECT_EQ(user_callback_.last_corruption_score(), kCorruptionScore);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace video_coding
|
} // namespace video_coding
|
||||||
|
|||||||
@ -59,6 +59,7 @@ class VCMReceiveCallback {
|
|||||||
TimeDelta decode_time;
|
TimeDelta decode_time;
|
||||||
VideoContentType content_type;
|
VideoContentType content_type;
|
||||||
VideoFrameType frame_type;
|
VideoFrameType frame_type;
|
||||||
|
std::optional<double> corruption_score;
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: bugs.webrtc.org/358039777 - Delete this function.
|
// TODO: bugs.webrtc.org/358039777 - Delete this function.
|
||||||
|
|||||||
@ -66,6 +66,10 @@ int32_t VideoStreamDecoder::OnFrameToRender(
|
|||||||
receive_stats_callback_->OnDecodedFrame(
|
receive_stats_callback_->OnDecodedFrame(
|
||||||
arguments.video_frame, arguments.qp, arguments.decode_time,
|
arguments.video_frame, arguments.qp, arguments.decode_time,
|
||||||
arguments.content_type, arguments.frame_type);
|
arguments.content_type, arguments.frame_type);
|
||||||
|
if (arguments.corruption_score.has_value()) {
|
||||||
|
receive_stats_callback_->OnCorruptionScore(*arguments.corruption_score,
|
||||||
|
arguments.content_type);
|
||||||
|
}
|
||||||
incoming_video_stream_->OnFrame(arguments.video_frame);
|
incoming_video_stream_->OnFrame(arguments.video_frame);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user