| Index: webrtc/video/end_to_end_tests.cc
|
| diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc
|
| index dbaa87b1b2f1aade0dc39d026a062f0503392344..af9dfe15bf134de4a2aee2805d670d4fbb8a7a6a 100644
|
| --- a/webrtc/video/end_to_end_tests.cc
|
| +++ b/webrtc/video/end_to_end_tests.cc
|
| @@ -195,34 +195,22 @@ TEST_P(EndToEndTest, RendersSingleDelayedFrame) {
|
| // This constant is chosen to be higher than the timeout in the video_render
|
| // module. This makes sure that frames aren't dropped if there are no other
|
| // frames in the queue.
|
| - static const int kDelayRenderCallbackMs = 1000;
|
| + static const int kRenderDelayMs = 1000;
|
|
|
| class Renderer : public rtc::VideoSinkInterface<VideoFrame> {
|
| public:
|
| Renderer() : event_(false, false) {}
|
|
|
| - void OnFrame(const VideoFrame& video_frame) override { event_.Set(); }
|
| + void OnFrame(const VideoFrame& video_frame) override {
|
| + SleepMs(kRenderDelayMs);
|
| + event_.Set();
|
| + }
|
|
|
| bool Wait() { return event_.Wait(kDefaultTimeoutMs); }
|
|
|
| rtc::Event event_;
|
| } renderer;
|
|
|
| - class TestFrameCallback : public I420FrameCallback {
|
| - public:
|
| - TestFrameCallback() : event_(false, false) {}
|
| -
|
| - bool Wait() { return event_.Wait(kDefaultTimeoutMs); }
|
| -
|
| - private:
|
| - void FrameCallback(VideoFrame* frame) override {
|
| - SleepMs(kDelayRenderCallbackMs);
|
| - event_.Set();
|
| - }
|
| -
|
| - rtc::Event event_;
|
| - };
|
| -
|
| CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
|
|
|
| test::DirectTransport sender_transport(sender_call_.get());
|
| @@ -233,8 +221,6 @@ TEST_P(EndToEndTest, RendersSingleDelayedFrame) {
|
| CreateSendConfig(1, 0, 0, &sender_transport);
|
| CreateMatchingReceiveConfigs(&receiver_transport);
|
|
|
| - TestFrameCallback pre_render_callback;
|
| - video_receive_configs_[0].pre_render_callback = &pre_render_callback;
|
| video_receive_configs_[0].renderer = &renderer;
|
|
|
| CreateVideoStreams();
|
| @@ -249,8 +235,6 @@ TEST_P(EndToEndTest, RendersSingleDelayedFrame) {
|
| &frame_forwarder, VideoSendStream::DegradationPreference::kBalanced);
|
|
|
| frame_forwarder.IncomingCapturedFrame(*frame_generator->NextFrame());
|
| - EXPECT_TRUE(pre_render_callback.Wait())
|
| - << "Timed out while waiting for pre-render callback.";
|
| EXPECT_TRUE(renderer.Wait())
|
| << "Timed out while waiting for the frame to render.";
|
|
|
| @@ -1052,7 +1036,7 @@ TEST_P(EndToEndTest, ReceivedUlpfecPacketsNotNacked) {
|
| void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) {
|
| static const int kDroppedFrameNumber = 10;
|
| class RetransmissionObserver : public test::EndToEndTest,
|
| - public I420FrameCallback {
|
| + public rtc::VideoSinkInterface<VideoFrame> {
|
| public:
|
| RetransmissionObserver(bool enable_rtx, bool enable_red)
|
| : EndToEndTest(kDefaultTimeoutMs),
|
| @@ -1108,11 +1092,12 @@ void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) {
|
| return SEND_PACKET;
|
| }
|
|
|
| - void FrameCallback(VideoFrame* frame) override {
|
| + void OnFrame(const VideoFrame& frame) override {
|
| rtc::CritScope lock(&crit_);
|
| - if (frame->timestamp() == retransmitted_timestamp_)
|
| + if (frame.timestamp() == retransmitted_timestamp_)
|
| observation_complete_.Set();
|
| - rendered_timestamps_.push_back(frame->timestamp());
|
| + rendered_timestamps_.push_back(frame.timestamp());
|
| + orig_renderer_->OnFrame(frame);
|
| }
|
|
|
| void ModifyVideoConfigs(
|
| @@ -1120,7 +1105,13 @@ void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) {
|
| std::vector<VideoReceiveStream::Config>* receive_configs,
|
| VideoEncoderConfig* encoder_config) override {
|
| send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
|
| - (*receive_configs)[0].pre_render_callback = this;
|
| +
|
| + // Insert ourselves into the rendering pipeline.
|
| + RTC_DCHECK(!orig_renderer_);
|
| + orig_renderer_ = (*receive_configs)[0].renderer;
|
| + RTC_DCHECK(orig_renderer_);
|
| + (*receive_configs)[0].renderer = this;
|
| +
|
| (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
|
|
|
| if (payload_type_ == kRedPayloadType) {
|
| @@ -1168,6 +1159,7 @@ void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) {
|
| }
|
|
|
| rtc::CriticalSection crit_;
|
| + rtc::VideoSinkInterface<VideoFrame>* orig_renderer_ = nullptr;
|
| const int payload_type_;
|
| const uint32_t retransmission_ssrc_;
|
| const int retransmission_payload_type_;
|
|
|