Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(400)

Side by Side Diff: webrtc/video/end_to_end_tests.cc

Issue 2678343002: Delete VideoReceiveStream::Config::pre_render_callback. (Closed)
Patch Set: Rebased. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/common_video/include/frame_callback.h ('k') | webrtc/video/video_receive_stream.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <algorithm> 10 #include <algorithm>
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 188
189 DestroyStreams(); 189 DestroyStreams();
190 } 190 }
191 191
192 TEST_P(EndToEndTest, RendersSingleDelayedFrame) { 192 TEST_P(EndToEndTest, RendersSingleDelayedFrame) {
193 static const int kWidth = 320; 193 static const int kWidth = 320;
194 static const int kHeight = 240; 194 static const int kHeight = 240;
195 // This constant is chosen to be higher than the timeout in the video_render 195 // This constant is chosen to be higher than the timeout in the video_render
196 // module. This makes sure that frames aren't dropped if there are no other 196 // module. This makes sure that frames aren't dropped if there are no other
197 // frames in the queue. 197 // frames in the queue.
198 static const int kDelayRenderCallbackMs = 1000; 198 static const int kRenderDelayMs = 1000;
199 199
200 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { 200 class Renderer : public rtc::VideoSinkInterface<VideoFrame> {
201 public: 201 public:
202 Renderer() : event_(false, false) {} 202 Renderer() : event_(false, false) {}
203 203
204 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } 204 void OnFrame(const VideoFrame& video_frame) override {
205 SleepMs(kRenderDelayMs);
206 event_.Set();
207 }
205 208
206 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } 209 bool Wait() { return event_.Wait(kDefaultTimeoutMs); }
207 210
208 rtc::Event event_; 211 rtc::Event event_;
209 } renderer; 212 } renderer;
210 213
211 class TestFrameCallback : public I420FrameCallback {
212 public:
213 TestFrameCallback() : event_(false, false) {}
214
215 bool Wait() { return event_.Wait(kDefaultTimeoutMs); }
216
217 private:
218 void FrameCallback(VideoFrame* frame) override {
219 SleepMs(kDelayRenderCallbackMs);
220 event_.Set();
221 }
222
223 rtc::Event event_;
224 };
225
226 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); 214 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
227 215
228 test::DirectTransport sender_transport(sender_call_.get()); 216 test::DirectTransport sender_transport(sender_call_.get());
229 test::DirectTransport receiver_transport(receiver_call_.get()); 217 test::DirectTransport receiver_transport(receiver_call_.get());
230 sender_transport.SetReceiver(receiver_call_->Receiver()); 218 sender_transport.SetReceiver(receiver_call_->Receiver());
231 receiver_transport.SetReceiver(sender_call_->Receiver()); 219 receiver_transport.SetReceiver(sender_call_->Receiver());
232 220
233 CreateSendConfig(1, 0, 0, &sender_transport); 221 CreateSendConfig(1, 0, 0, &sender_transport);
234 CreateMatchingReceiveConfigs(&receiver_transport); 222 CreateMatchingReceiveConfigs(&receiver_transport);
235 223
236 TestFrameCallback pre_render_callback;
237 video_receive_configs_[0].pre_render_callback = &pre_render_callback;
238 video_receive_configs_[0].renderer = &renderer; 224 video_receive_configs_[0].renderer = &renderer;
239 225
240 CreateVideoStreams(); 226 CreateVideoStreams();
241 Start(); 227 Start();
242 228
243 // Create frames that are smaller than the send width/height, this is done to 229 // Create frames that are smaller than the send width/height, this is done to
244 // check that the callbacks are done after processing video. 230 // check that the callbacks are done after processing video.
245 std::unique_ptr<test::FrameGenerator> frame_generator( 231 std::unique_ptr<test::FrameGenerator> frame_generator(
246 test::FrameGenerator::CreateChromaGenerator(kWidth, kHeight)); 232 test::FrameGenerator::CreateChromaGenerator(kWidth, kHeight));
247 test::FrameForwarder frame_forwarder; 233 test::FrameForwarder frame_forwarder;
248 video_send_stream_->SetSource( 234 video_send_stream_->SetSource(
249 &frame_forwarder, VideoSendStream::DegradationPreference::kBalanced); 235 &frame_forwarder, VideoSendStream::DegradationPreference::kBalanced);
250 236
251 frame_forwarder.IncomingCapturedFrame(*frame_generator->NextFrame()); 237 frame_forwarder.IncomingCapturedFrame(*frame_generator->NextFrame());
252 EXPECT_TRUE(pre_render_callback.Wait())
253 << "Timed out while waiting for pre-render callback.";
254 EXPECT_TRUE(renderer.Wait()) 238 EXPECT_TRUE(renderer.Wait())
255 << "Timed out while waiting for the frame to render."; 239 << "Timed out while waiting for the frame to render.";
256 240
257 Stop(); 241 Stop();
258 242
259 sender_transport.StopSending(); 243 sender_transport.StopSending();
260 receiver_transport.StopSending(); 244 receiver_transport.StopSending();
261 245
262 DestroyStreams(); 246 DestroyStreams();
263 } 247 }
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 } test; 1029 } test;
1046 1030
1047 RunBaseTest(&test); 1031 RunBaseTest(&test);
1048 } 1032 }
1049 1033
1050 // This test drops second RTP packet with a marker bit set, makes sure it's 1034 // This test drops second RTP packet with a marker bit set, makes sure it's
1051 // retransmitted and renders. Retransmission SSRCs are also checked. 1035 // retransmitted and renders. Retransmission SSRCs are also checked.
1052 void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) { 1036 void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) {
1053 static const int kDroppedFrameNumber = 10; 1037 static const int kDroppedFrameNumber = 10;
1054 class RetransmissionObserver : public test::EndToEndTest, 1038 class RetransmissionObserver : public test::EndToEndTest,
1055 public I420FrameCallback { 1039 public rtc::VideoSinkInterface<VideoFrame> {
1056 public: 1040 public:
1057 RetransmissionObserver(bool enable_rtx, bool enable_red) 1041 RetransmissionObserver(bool enable_rtx, bool enable_red)
1058 : EndToEndTest(kDefaultTimeoutMs), 1042 : EndToEndTest(kDefaultTimeoutMs),
1059 payload_type_(GetPayloadType(false, enable_red)), 1043 payload_type_(GetPayloadType(false, enable_red)),
1060 retransmission_ssrc_(enable_rtx ? kSendRtxSsrcs[0] 1044 retransmission_ssrc_(enable_rtx ? kSendRtxSsrcs[0]
1061 : kVideoSendSsrcs[0]), 1045 : kVideoSendSsrcs[0]),
1062 retransmission_payload_type_(GetPayloadType(enable_rtx, enable_red)), 1046 retransmission_payload_type_(GetPayloadType(enable_rtx, enable_red)),
1063 encoder_(VP8Encoder::Create()), 1047 encoder_(VP8Encoder::Create()),
1064 marker_bits_observed_(0), 1048 marker_bits_observed_(0),
1065 retransmitted_timestamp_(0) {} 1049 retransmitted_timestamp_(0) {}
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 // See https://bugs.chromium.org/p/webrtc/issues/detail?id=5540 for 1085 // See https://bugs.chromium.org/p/webrtc/issues/detail?id=5540 for
1102 // details. 1086 // details.
1103 observation_complete_.Set(); 1087 observation_complete_.Set();
1104 } 1088 }
1105 return DROP_PACKET; 1089 return DROP_PACKET;
1106 } 1090 }
1107 1091
1108 return SEND_PACKET; 1092 return SEND_PACKET;
1109 } 1093 }
1110 1094
1111 void FrameCallback(VideoFrame* frame) override { 1095 void OnFrame(const VideoFrame& frame) override {
1112 rtc::CritScope lock(&crit_); 1096 rtc::CritScope lock(&crit_);
1113 if (frame->timestamp() == retransmitted_timestamp_) 1097 if (frame.timestamp() == retransmitted_timestamp_)
1114 observation_complete_.Set(); 1098 observation_complete_.Set();
1115 rendered_timestamps_.push_back(frame->timestamp()); 1099 rendered_timestamps_.push_back(frame.timestamp());
1100 orig_renderer_->OnFrame(frame);
1116 } 1101 }
1117 1102
1118 void ModifyVideoConfigs( 1103 void ModifyVideoConfigs(
1119 VideoSendStream::Config* send_config, 1104 VideoSendStream::Config* send_config,
1120 std::vector<VideoReceiveStream::Config>* receive_configs, 1105 std::vector<VideoReceiveStream::Config>* receive_configs,
1121 VideoEncoderConfig* encoder_config) override { 1106 VideoEncoderConfig* encoder_config) override {
1122 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 1107 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
1123 (*receive_configs)[0].pre_render_callback = this; 1108
1109 // Insert ourselves into the rendering pipeline.
1110 RTC_DCHECK(!orig_renderer_);
1111 orig_renderer_ = (*receive_configs)[0].renderer;
1112 RTC_DCHECK(orig_renderer_);
1113 (*receive_configs)[0].renderer = this;
1114
1124 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 1115 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
1125 1116
1126 if (payload_type_ == kRedPayloadType) { 1117 if (payload_type_ == kRedPayloadType) {
1127 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; 1118 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
1128 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; 1119 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType;
1129 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) 1120 if (retransmission_ssrc_ == kSendRtxSsrcs[0])
1130 send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType; 1121 send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType;
1131 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = 1122 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type =
1132 send_config->rtp.ulpfec.ulpfec_payload_type; 1123 send_config->rtp.ulpfec.ulpfec_payload_type;
1133 (*receive_configs)[0].rtp.ulpfec.red_payload_type = 1124 (*receive_configs)[0].rtp.ulpfec.red_payload_type =
(...skipping 27 matching lines...) Expand all
1161 if (use_rtx) 1152 if (use_rtx)
1162 return kRtxRedPayloadType; 1153 return kRtxRedPayloadType;
1163 return kRedPayloadType; 1154 return kRedPayloadType;
1164 } 1155 }
1165 if (use_rtx) 1156 if (use_rtx)
1166 return kSendRtxPayloadType; 1157 return kSendRtxPayloadType;
1167 return kFakeVideoSendPayloadType; 1158 return kFakeVideoSendPayloadType;
1168 } 1159 }
1169 1160
1170 rtc::CriticalSection crit_; 1161 rtc::CriticalSection crit_;
1162 rtc::VideoSinkInterface<VideoFrame>* orig_renderer_ = nullptr;
1171 const int payload_type_; 1163 const int payload_type_;
1172 const uint32_t retransmission_ssrc_; 1164 const uint32_t retransmission_ssrc_;
1173 const int retransmission_payload_type_; 1165 const int retransmission_payload_type_;
1174 std::unique_ptr<VideoEncoder> encoder_; 1166 std::unique_ptr<VideoEncoder> encoder_;
1175 const std::string payload_name_; 1167 const std::string payload_name_;
1176 int marker_bits_observed_; 1168 int marker_bits_observed_;
1177 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_); 1169 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_);
1178 std::vector<uint32_t> rendered_timestamps_ GUARDED_BY(&crit_); 1170 std::vector<uint32_t> rendered_timestamps_ GUARDED_BY(&crit_);
1179 } test(enable_rtx, enable_red); 1171 } test(enable_rtx, enable_red);
1180 1172
(...skipping 3006 matching lines...) Expand 10 before | Expand all | Expand 10 after
4187 std::unique_ptr<VideoEncoder> encoder_; 4179 std::unique_ptr<VideoEncoder> encoder_;
4188 std::unique_ptr<VideoDecoder> decoder_; 4180 std::unique_ptr<VideoDecoder> decoder_;
4189 rtc::CriticalSection crit_; 4181 rtc::CriticalSection crit_;
4190 int recorded_frames_ GUARDED_BY(crit_); 4182 int recorded_frames_ GUARDED_BY(crit_);
4191 } test(this); 4183 } test(this);
4192 4184
4193 RunBaseTest(&test); 4185 RunBaseTest(&test);
4194 } 4186 }
4195 4187
4196 } // namespace webrtc 4188 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/common_video/include/frame_callback.h ('k') | webrtc/video/video_receive_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698