From 7fabd46a89675da596b28bb43c8fd3c561fbe85e Mon Sep 17 00:00:00 2001 From: philipel Date: Thu, 3 Sep 2015 04:42:32 -0700 Subject: [PATCH] Don't set V bit in flexible mode BUG=webrtc:4914 Review URL: https://codereview.webrtc.org/1291163007 Cr-Commit-Position: refs/heads/master@{#9848} --- .../modules/video_coding/codecs/vp9/vp9_impl.cc | 6 ++++-- webrtc/video/video_send_stream_tests.cc | 17 ++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc b/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc index 3e4367fb67..73beab37b0 100644 --- a/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc +++ b/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc @@ -485,8 +485,10 @@ void VP9EncoderImpl::PopulateCodecSpecific(CodecSpecificInfo* codec_specific, vp9_info->inter_pic_predicted = (pkt.data.frame.flags & VPX_FRAME_IS_KEY) ? false : true; vp9_info->flexible_mode = codec_.codecSpecific.VP9.flexibleMode; - vp9_info->ss_data_available = - (pkt.data.frame.flags & VPX_FRAME_IS_KEY) ? true : false; + vp9_info->ss_data_available = ((pkt.data.frame.flags & VPX_FRAME_IS_KEY) && + !codec_.codecSpecific.VP9.flexibleMode) + ? true + : false; if (pkt.data.frame.flags & VPX_FRAME_IS_KEY) { gof_idx_ = 0; } diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc index 4442c2cf9b..65fbd780a6 100644 --- a/webrtc/video/video_send_stream_tests.cc +++ b/webrtc/video/video_send_stream_tests.cc @@ -23,6 +23,7 @@ #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/modules/video_coding/codecs/vp9/include/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" @@ -1799,9 +1800,11 @@ TEST_F(VideoSendStreamTest, ReportsSentResolution) { class VP9HeaderObeserver : public test::SendTest { public: - VP9HeaderObeserver() : SendTest(VideoSendStreamTest::kDefaultTimeoutMs) { - vp9_settings_ = VideoEncoder::GetDefaultVp9Settings(); - } + VP9HeaderObeserver() + : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), + vp9_encoder_(VP9Encoder::Create()), + vp9_settings_(VideoEncoder::GetDefaultVp9Settings()) {} + virtual void ModifyConfigsHook( VideoSendStream::Config* send_config, std::vector* receive_configs, @@ -1816,6 +1819,7 @@ class VP9HeaderObeserver : public test::SendTest { std::vector* 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); @@ -1856,7 +1860,8 @@ class VP9HeaderObeserver : public test::SendTest { return SEND_PACKET; } -protected: + protected: + rtc::scoped_ptr vp9_encoder_; VideoCodecVP9 vp9_settings_; }; @@ -1871,15 +1876,13 @@ TEST_F(VideoSendStreamTest, VP9NoFlexMode) { RunBaseTest(&test); } -// TODO(philipel): Enable once flexible mode is implemeted. -TEST_F(VideoSendStreamTest, DISABLED_VP9FlexMode) { +TEST_F(VideoSendStreamTest, VP9FlexMode) { class FlexibleMode : public VP9HeaderObeserver { void ModifyConfigsHook( VideoSendStream::Config* send_config, std::vector* receive_configs, VideoEncoderConfig* encoder_config) override { vp9_settings_.flexibleMode = true; - encoder_config->encoder_specific_settings = &vp9_settings_; } void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {