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

Unified Diff: webrtc/video/video_send_stream_tests.cc

Issue 1291163007: Don't set V bit in flexible mode (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698