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}
diff --git a/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc b/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc
index 3e4367f..73beab3 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 @@
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 4442c2c..65fbd78 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 @@
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<VideoReceiveStream::Config>* receive_configs,
@@ -1816,6 +1819,7 @@
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);
@@ -1856,7 +1860,8 @@
return SEND_PACKET;
}
-protected:
+ protected:
+ rtc::scoped_ptr<VP9Encoder> vp9_encoder_;
VideoCodecVP9 vp9_settings_;
};
@@ -1871,15 +1876,13 @@
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<VideoReceiveStream::Config>* receive_configs,
VideoEncoderConfig* encoder_config) override {
vp9_settings_.flexibleMode = true;
- encoder_config->encoder_specific_settings = &vp9_settings_;
}
void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {