| OLD | NEW |
| 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> // max | 10 #include <algorithm> // max |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" | 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" |
| 24 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" | 24 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" |
| 25 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" | 25 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" |
| 26 #include "webrtc/system_wrappers/interface/event_wrapper.h" | 26 #include "webrtc/system_wrappers/interface/event_wrapper.h" |
| 27 #include "webrtc/system_wrappers/interface/logging.h" | 27 #include "webrtc/system_wrappers/interface/logging.h" |
| 28 #include "webrtc/system_wrappers/interface/ref_count.h" | 28 #include "webrtc/system_wrappers/interface/ref_count.h" |
| 29 #include "webrtc/system_wrappers/interface/sleep.h" | 29 #include "webrtc/system_wrappers/interface/sleep.h" |
| 30 #include "webrtc/system_wrappers/interface/thread_wrapper.h" | 30 #include "webrtc/system_wrappers/interface/thread_wrapper.h" |
| 31 #include "webrtc/test/call_test.h" | 31 #include "webrtc/test/call_test.h" |
| 32 #include "webrtc/test/configurable_frame_size_encoder.h" | 32 #include "webrtc/test/configurable_frame_size_encoder.h" |
| 33 #include "webrtc/test/fake_texture_frame.h" |
| 33 #include "webrtc/test/null_transport.h" | 34 #include "webrtc/test/null_transport.h" |
| 34 #include "webrtc/test/testsupport/perf_test.h" | 35 #include "webrtc/test/testsupport/perf_test.h" |
| 35 #include "webrtc/video/send_statistics_proxy.h" | 36 #include "webrtc/video/send_statistics_proxy.h" |
| 36 #include "webrtc/video/transport_adapter.h" | 37 #include "webrtc/video/transport_adapter.h" |
| 37 #include "webrtc/video_frame.h" | 38 #include "webrtc/video_frame.h" |
| 38 #include "webrtc/video_send_stream.h" | 39 #include "webrtc/video_send_stream.h" |
| 39 | 40 |
| 40 namespace webrtc { | 41 namespace webrtc { |
| 41 | 42 |
| 42 enum VideoFormat { kGeneric, kVP8, }; | 43 enum VideoFormat { kGeneric, kVP8, }; |
| 43 | 44 |
| 44 void ExpectEqualFrames(const VideoFrame& frame1, const VideoFrame& frame2); | 45 void ExpectEqualFrames(const VideoFrame& frame1, const VideoFrame& frame2); |
| 45 void ExpectEqualTextureFrames(const VideoFrame& frame1, | 46 void ExpectEqualTextureFrames(const VideoFrame& frame1, |
| 46 const VideoFrame& frame2); | 47 const VideoFrame& frame2); |
| 47 void ExpectEqualBufferFrames(const VideoFrame& frame1, | 48 void ExpectEqualBufferFrames(const VideoFrame& frame1, |
| 48 const VideoFrame& frame2); | 49 const VideoFrame& frame2); |
| 49 void ExpectEqualFramesVector(const std::vector<VideoFrame>& frames1, | 50 void ExpectEqualFramesVector(const std::vector<VideoFrame>& frames1, |
| 50 const std::vector<VideoFrame>& frames2); | 51 const std::vector<VideoFrame>& frames2); |
| 51 VideoFrame CreateVideoFrame(int width, int height, uint8_t data); | 52 VideoFrame CreateVideoFrame(int width, int height, uint8_t data); |
| 52 | 53 |
| 53 class FakeNativeHandle { | |
| 54 public: | |
| 55 FakeNativeHandle() {} | |
| 56 ~FakeNativeHandle() {} | |
| 57 }; | |
| 58 | |
| 59 void DeleteNativeHandle(FakeNativeHandle* handle) { | |
| 60 delete handle; | |
| 61 } | |
| 62 | |
| 63 class VideoSendStreamTest : public test::CallTest { | 54 class VideoSendStreamTest : public test::CallTest { |
| 64 protected: | 55 protected: |
| 65 void TestNackRetransmission(uint32_t retransmit_ssrc, | 56 void TestNackRetransmission(uint32_t retransmit_ssrc, |
| 66 uint8_t retransmit_payload_type); | 57 uint8_t retransmit_payload_type); |
| 67 void TestPacketFragmentationSize(VideoFormat format, bool with_fec); | 58 void TestPacketFragmentationSize(VideoFormat format, bool with_fec); |
| 68 }; | 59 }; |
| 69 | 60 |
| 70 TEST_F(VideoSendStreamTest, CanStartStartedStream) { | 61 TEST_F(VideoSendStreamTest, CanStartStartedStream) { |
| 71 test::NullTransport transport; | 62 test::NullTransport transport; |
| 72 Call::Config call_config(&transport); | 63 Call::Config call_config(&transport); |
| (...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1077 CreateSendConfig(1); | 1068 CreateSendConfig(1); |
| 1078 FrameObserver observer; | 1069 FrameObserver observer; |
| 1079 send_config_.pre_encode_callback = &observer; | 1070 send_config_.pre_encode_callback = &observer; |
| 1080 CreateStreams(); | 1071 CreateStreams(); |
| 1081 | 1072 |
| 1082 // Prepare five input frames. Send ordinary VideoFrame and texture frames | 1073 // Prepare five input frames. Send ordinary VideoFrame and texture frames |
| 1083 // alternatively. | 1074 // alternatively. |
| 1084 std::vector<VideoFrame> input_frames; | 1075 std::vector<VideoFrame> input_frames; |
| 1085 int width = static_cast<int>(encoder_config_.streams[0].width); | 1076 int width = static_cast<int>(encoder_config_.streams[0].width); |
| 1086 int height = static_cast<int>(encoder_config_.streams[0].height); | 1077 int height = static_cast<int>(encoder_config_.streams[0].height); |
| 1087 FakeNativeHandle* handle1 = new FakeNativeHandle(); | 1078 test::FakeNativeHandle* handle1 = new test::FakeNativeHandle(); |
| 1088 FakeNativeHandle* handle2 = new FakeNativeHandle(); | 1079 test::FakeNativeHandle* handle2 = new test::FakeNativeHandle(); |
| 1089 FakeNativeHandle* handle3 = new FakeNativeHandle(); | 1080 test::FakeNativeHandle* handle3 = new test::FakeNativeHandle(); |
| 1090 input_frames.push_back(VideoFrame(handle1, width, height, 1, 1, | 1081 input_frames.push_back(test::CreateFakeNativeHandleFrame( |
| 1091 kVideoRotation_0, | 1082 handle1, width, height, 1, 1, kVideoRotation_0)); |
| 1092 rtc::Bind(&DeleteNativeHandle, handle1))); | 1083 input_frames.push_back(test::CreateFakeNativeHandleFrame( |
| 1093 input_frames.push_back(VideoFrame(handle2, width, height, 2, 2, | 1084 handle2, width, height, 2, 2, kVideoRotation_0)); |
| 1094 kVideoRotation_0, | |
| 1095 rtc::Bind(&DeleteNativeHandle, handle2))); | |
| 1096 input_frames.push_back(CreateVideoFrame(width, height, 3)); | 1085 input_frames.push_back(CreateVideoFrame(width, height, 3)); |
| 1097 input_frames.push_back(CreateVideoFrame(width, height, 4)); | 1086 input_frames.push_back(CreateVideoFrame(width, height, 4)); |
| 1098 input_frames.push_back(VideoFrame(handle3, width, height, 5, 5, | 1087 input_frames.push_back(test::CreateFakeNativeHandleFrame( |
| 1099 kVideoRotation_0, | 1088 handle3, width, height, 5, 5, kVideoRotation_0)); |
| 1100 rtc::Bind(&DeleteNativeHandle, handle3))); | |
| 1101 | 1089 |
| 1102 send_stream_->Start(); | 1090 send_stream_->Start(); |
| 1103 for (size_t i = 0; i < input_frames.size(); i++) { | 1091 for (size_t i = 0; i < input_frames.size(); i++) { |
| 1104 send_stream_->Input()->IncomingCapturedFrame(input_frames[i]); | 1092 send_stream_->Input()->IncomingCapturedFrame(input_frames[i]); |
| 1105 // Do not send the next frame too fast, so the frame dropper won't drop it. | 1093 // Do not send the next frame too fast, so the frame dropper won't drop it. |
| 1106 if (i < input_frames.size() - 1) | 1094 if (i < input_frames.size() - 1) |
| 1107 SleepMs(1000 / encoder_config_.streams[0].max_framerate); | 1095 SleepMs(1000 / encoder_config_.streams[0].max_framerate); |
| 1108 // Wait until the output frame is received before sending the next input | 1096 // Wait until the output frame is received before sending the next input |
| 1109 // frame. Or the previous input frame may be replaced without delivering. | 1097 // frame. Or the previous input frame may be replaced without delivering. |
| 1110 observer.WaitOutputFrame(); | 1098 observer.WaitOutputFrame(); |
| (...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1759 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1747 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 1760 send_stream_ = send_stream; | 1748 send_stream_ = send_stream; |
| 1761 } | 1749 } |
| 1762 | 1750 |
| 1763 VideoSendStream* send_stream_; | 1751 VideoSendStream* send_stream_; |
| 1764 } test; | 1752 } test; |
| 1765 | 1753 |
| 1766 RunBaseTest(&test); | 1754 RunBaseTest(&test); |
| 1767 } | 1755 } |
| 1768 } // namespace webrtc | 1756 } // namespace webrtc |
| OLD | NEW |