| 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..7a4120e23ac03832b84d5aebdc231ce17901cea9 100644
|
| --- a/webrtc/video/video_send_stream_tests.cc
|
| +++ b/webrtc/video/video_send_stream_tests.cc
|
| @@ -22,6 +22,7 @@
|
| #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 +1796,100 @@ TEST_F(VideoSendStreamTest, ReportsSentResolution) {
|
|
|
| RunBaseTest(&test);
|
| }
|
| +
|
| +class VP9HeaderObeserver : public test::SendTest {
|
| + public:
|
| + VP9HeaderObeserver() : SendTest(VideoSendStreamTest::kDefaultTimeoutMs) {
|
| + 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.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:
|
| + 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);
|
| +}
|
| +
|
| +// TODO(philipel): Enable once flexible mode is implemeted.
|
| +TEST_F(VideoSendStreamTest, DISABLED_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;
|
| + encoder_config->encoder_specific_settings = &vp9_settings_;
|
| + }
|
| +
|
| + void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {
|
| + EXPECT_TRUE(vp9videoHeader->flexible_mode);
|
| + observation_complete_->Set();
|
| + }
|
| +
|
| + } test;
|
| +
|
| + RunBaseTest(&test);
|
| +}
|
| +
|
| } // namespace webrtc
|
|
|