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

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

Issue 2678343002: Delete VideoReceiveStream::Config::pre_render_callback. (Closed)
Patch Set: 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 779 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 } test; 1027 } test;
1044 1028
1045 RunBaseTest(&test); 1029 RunBaseTest(&test);
1046 } 1030 }
1047 1031
1048 // This test drops second RTP packet with a marker bit set, makes sure it's 1032 // This test drops second RTP packet with a marker bit set, makes sure it's
1049 // retransmitted and renders. Retransmission SSRCs are also checked. 1033 // retransmitted and renders. Retransmission SSRCs are also checked.
1050 void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) { 1034 void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) {
1051 static const int kDroppedFrameNumber = 10; 1035 static const int kDroppedFrameNumber = 10;
1052 class RetransmissionObserver : public test::EndToEndTest, 1036 class RetransmissionObserver : public test::EndToEndTest,
1053 public I420FrameCallback { 1037 public rtc::VideoSinkInterface<VideoFrame> {
1054 public: 1038 public:
1055 RetransmissionObserver(bool enable_rtx, bool enable_red) 1039 RetransmissionObserver(bool enable_rtx, bool enable_red)
1056 : EndToEndTest(kDefaultTimeoutMs), 1040 : EndToEndTest(kDefaultTimeoutMs),
1057 payload_type_(GetPayloadType(false, enable_red)), 1041 payload_type_(GetPayloadType(false, enable_red)),
1058 retransmission_ssrc_(enable_rtx ? kSendRtxSsrcs[0] 1042 retransmission_ssrc_(enable_rtx ? kSendRtxSsrcs[0]
1059 : kVideoSendSsrcs[0]), 1043 : kVideoSendSsrcs[0]),
1060 retransmission_payload_type_(GetPayloadType(enable_rtx, enable_red)), 1044 retransmission_payload_type_(GetPayloadType(enable_rtx, enable_red)),
1061 encoder_(VP8Encoder::Create()), 1045 encoder_(VP8Encoder::Create()),
1062 marker_bits_observed_(0), 1046 marker_bits_observed_(0),
1063 retransmitted_timestamp_(0) {} 1047 retransmitted_timestamp_(0) {}
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 // See https://bugs.chromium.org/p/webrtc/issues/detail?id=5540 for 1083 // See https://bugs.chromium.org/p/webrtc/issues/detail?id=5540 for
1100 // details. 1084 // details.
1101 observation_complete_.Set(); 1085 observation_complete_.Set();
1102 } 1086 }
1103 return DROP_PACKET; 1087 return DROP_PACKET;
1104 } 1088 }
1105 1089
1106 return SEND_PACKET; 1090 return SEND_PACKET;
1107 } 1091 }
1108 1092
1109 void FrameCallback(VideoFrame* frame) override { 1093 void OnFrame(const VideoFrame& frame) override {
1110 rtc::CritScope lock(&crit_); 1094 rtc::CritScope lock(&crit_);
1111 if (frame->timestamp() == retransmitted_timestamp_) 1095 if (frame.timestamp() == retransmitted_timestamp_)
1112 observation_complete_.Set(); 1096 observation_complete_.Set();
1113 rendered_timestamps_.push_back(frame->timestamp()); 1097 rendered_timestamps_.push_back(frame.timestamp());
1098 orig_renderer_->OnFrame(frame);
1114 } 1099 }
1115 1100
1116 void ModifyVideoConfigs( 1101 void ModifyVideoConfigs(
1117 VideoSendStream::Config* send_config, 1102 VideoSendStream::Config* send_config,
1118 std::vector<VideoReceiveStream::Config>* receive_configs, 1103 std::vector<VideoReceiveStream::Config>* receive_configs,
1119 VideoEncoderConfig* encoder_config) override { 1104 VideoEncoderConfig* encoder_config) override {
1120 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 1105 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
1121 (*receive_configs)[0].pre_render_callback = this; 1106
1107 /* Insert ourselves into the rendering pipeline */
sprang_webrtc 2017/02/07 09:52:03 nit: // rather than /* */
nisse-webrtc 2017/02/07 10:50:51 Done.
1108 orig_renderer_ = (*receive_configs)[0].renderer;
1109 (*receive_configs)[0].renderer = this;
1110
1122 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 1111 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
1123 1112
1124 if (payload_type_ == kRedPayloadType) { 1113 if (payload_type_ == kRedPayloadType) {
1125 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; 1114 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
1126 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; 1115 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType;
1127 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) 1116 if (retransmission_ssrc_ == kSendRtxSsrcs[0])
1128 send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType; 1117 send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType;
1129 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = 1118 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type =
1130 send_config->rtp.ulpfec.ulpfec_payload_type; 1119 send_config->rtp.ulpfec.ulpfec_payload_type;
1131 (*receive_configs)[0].rtp.ulpfec.red_payload_type = 1120 (*receive_configs)[0].rtp.ulpfec.red_payload_type =
(...skipping 27 matching lines...) Expand all
1159 if (use_rtx) 1148 if (use_rtx)
1160 return kRtxRedPayloadType; 1149 return kRtxRedPayloadType;
1161 return kRedPayloadType; 1150 return kRedPayloadType;
1162 } 1151 }
1163 if (use_rtx) 1152 if (use_rtx)
1164 return kSendRtxPayloadType; 1153 return kSendRtxPayloadType;
1165 return kFakeVideoSendPayloadType; 1154 return kFakeVideoSendPayloadType;
1166 } 1155 }
1167 1156
1168 rtc::CriticalSection crit_; 1157 rtc::CriticalSection crit_;
1158 rtc::VideoSinkInterface<VideoFrame>* orig_renderer_;
1169 const int payload_type_; 1159 const int payload_type_;
1170 const uint32_t retransmission_ssrc_; 1160 const uint32_t retransmission_ssrc_;
1171 const int retransmission_payload_type_; 1161 const int retransmission_payload_type_;
1172 std::unique_ptr<VideoEncoder> encoder_; 1162 std::unique_ptr<VideoEncoder> encoder_;
1173 const std::string payload_name_; 1163 const std::string payload_name_;
1174 int marker_bits_observed_; 1164 int marker_bits_observed_;
1175 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_); 1165 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_);
1176 std::vector<uint32_t> rendered_timestamps_ GUARDED_BY(&crit_); 1166 std::vector<uint32_t> rendered_timestamps_ GUARDED_BY(&crit_);
1177 } test(enable_rtx, enable_red); 1167 } test(enable_rtx, enable_red);
1178 1168
(...skipping 2993 matching lines...) Expand 10 before | Expand all | Expand 10 after
4172 std::unique_ptr<VideoEncoder> encoder_; 4162 std::unique_ptr<VideoEncoder> encoder_;
4173 std::unique_ptr<VideoDecoder> decoder_; 4163 std::unique_ptr<VideoDecoder> decoder_;
4174 rtc::CriticalSection crit_; 4164 rtc::CriticalSection crit_;
4175 int recorded_frames_ GUARDED_BY(crit_); 4165 int recorded_frames_ GUARDED_BY(crit_);
4176 } test(this); 4166 } test(this);
4177 4167
4178 RunBaseTest(&test); 4168 RunBaseTest(&test);
4179 } 4169 }
4180 4170
4181 } // namespace webrtc 4171 } // 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