Index: webrtc/video/video_send_stream_tests.cc |
diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc |
index 8b18622e9e9f54f06c05580a908f4ab7d11b0245..54de1c81a000e253504ff375eca38893b15ad4eb 100644 |
--- a/webrtc/video/video_send_stream_tests.cc |
+++ b/webrtc/video/video_send_stream_tests.cc |
@@ -18,10 +18,12 @@ |
#include "webrtc/base/scoped_ptr.h" |
#include "webrtc/call.h" |
#include "webrtc/frame_callback.h" |
+#include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" |
mflodman
2015/08/31 14:09:06
Alphabetic order.
philipel
2015/09/01 12:26:26
Done.
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h" |
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h" |
#include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" |
#include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" |
+#include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h" |
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h" |
#include "webrtc/system_wrappers/interface/event_wrapper.h" |
#include "webrtc/system_wrappers/interface/logging.h" |
@@ -1795,4 +1797,102 @@ TEST_F(VideoSendStreamTest, ReportsSentResolution) { |
RunBaseTest(&test); |
} |
+ |
+class VP9HeaderObeserver : public test::SendTest { |
+ public: |
+ VP9HeaderObeserver() |
+ : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), |
+ vp9_encoder_(VP9Encoder::Create()), |
+ vp9_settings_(VideoEncoder::GetDefaultVp9Settings()) {} |
+ |
+ virtual void ModifyConfigsHook( |
+ VideoSendStream::Config* send_config, |
+ std::vector<VideoReceiveStream::Config>* receive_configs, |
+ VideoEncoderConfig* encoder_config) {} |
+ |
+ virtual void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) = 0; |
+ |
+ private: |
+ const int kVp9PayloadType = 105; |
+ |
+ void ModifyConfigs(VideoSendStream::Config* send_config, |
+ std::vector<VideoReceiveStream::Config>* receive_configs, |
+ VideoEncoderConfig* encoder_config) override { |
+ encoder_config->encoder_specific_settings = &vp9_settings_; |
+ send_config->encoder_settings.encoder = vp9_encoder_.get(); |
+ send_config->encoder_settings.payload_name = "VP9"; |
+ send_config->encoder_settings.payload_type = kVp9PayloadType; |
+ ModifyConfigsHook(send_config, receive_configs, encoder_config); |
+ } |
+ |
+ void PerformTest() override { |
+ EXPECT_EQ(kEventSignaled, Wait()) |
+ << "Test timed out waiting for VP9 packet"; |
+ } |
+ |
+ Action OnSendRtp(const uint8_t* packet, size_t length) override { |
+ RTPHeader header; |
+ EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
+ |
+ if (header.payloadType == kVp9PayloadType) { |
+ RtpDepacketizerVp9 vp9depacketizer; |
+ RtpDepacketizer::ParsedPayload vp9payload; |
+ const uint8_t* vp9_packet = packet + header.headerLength; |
+ size_t payload_length = |
+ length - header.headerLength - header.paddingLength; |
+ |
+ bool parse_vp9header_successful = |
+ vp9depacketizer.Parse(&vp9payload, vp9_packet, payload_length); |
+ bool is_vp9_codec_type = |
+ vp9payload.type.Video.codec == RtpVideoCodecTypes::kRtpVideoVp9; |
+ EXPECT_TRUE(parse_vp9header_successful); |
+ EXPECT_TRUE(is_vp9_codec_type); |
+ |
+ RTPVideoHeaderVP9* vp9videoHeader = |
+ &vp9payload.type.Video.codecHeader.VP9; |
+ if (parse_vp9header_successful && is_vp9_codec_type) { |
+ InspectHeader(vp9videoHeader); |
+ } else { |
+ observation_complete_->Set(); |
+ } |
+ } |
+ |
+ return SEND_PACKET; |
+ } |
+ |
+ protected: |
+ rtc::scoped_ptr<VP9Encoder> vp9_encoder_; |
+ VideoCodecVP9 vp9_settings_; |
+}; |
+ |
+TEST_F(VideoSendStreamTest, VP9NoFlexMode) { |
+ class NoFlexibleMode : public VP9HeaderObeserver { |
+ void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { |
+ EXPECT_FALSE(vp9videoHeader->flexible_mode); |
+ observation_complete_->Set(); |
+ } |
+ } test; |
+ |
+ RunBaseTest(&test); |
+} |
+ |
+TEST_F(VideoSendStreamTest, VP9FlexMode) { |
+ class FlexibleMode : public VP9HeaderObeserver { |
+ void ModifyConfigsHook( |
+ VideoSendStream::Config* send_config, |
+ std::vector<VideoReceiveStream::Config>* receive_configs, |
+ VideoEncoderConfig* encoder_config) override { |
+ vp9_settings_.flexibleMode = true; |
+ } |
+ |
+ void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { |
+ EXPECT_TRUE(vp9videoHeader->flexible_mode); |
+ observation_complete_->Set(); |
+ } |
+ |
+ } test; |
+ |
+ RunBaseTest(&test); |
+} |
+ |
} // namespace webrtc |